mirror of
https://github.com/cypress-io/cypress.git
synced 2026-04-21 14:40:05 -05:00
f89a8236a8
* desktop-gui: use authBegin api * server: add auth lib for in-browser auth * server: unneeded * server: send proper cors header, actually receive authinfo * desktop-gui: DASHBOARD_LOGIN * server: send both auth flows through dashboard login * server, desktop-gui: exchange code for token, move logic out of desktop gui, cache auth urls * server: cleanup * server: refresh token [wip] * server: cleanup * server: focus main window on login * server: focus cypress after login * server: fix * server: use id_token so Google Login works, fixes to fallback electron auth flow * desktop-gui: "Log In with GitHub" -> "Log In to Dashboard" * server: work without electron * server: what a bizarre function signature, but ok * server: unit test for new auth.js * driver, server: cleanup * server: use redirects instead of XHR * server: update api spec * add some tests for token refreshin * desktop-gui: update tests, cleanup * unit tests * add user unit tests * server: rely on dashboard to set us up with access_token, user profile, etc * server: cleanup * redirect errors too * server: don't worry about refresh tokens in TR * guard against null server * don't regenerate state * fix auth unit test * fall back to electron auth if native auth never opens * break out MarkdownRenderer component * warn if browser not opened, offer copyable url * remove electron fallback and all login window handling * update tests * send more feedback when authing * add success message when logging in * update tests to expect continue button, warnings * use :contains * send machineId, version, platform, arch with login * createSignout -> createLogout, get logoutUrl from /auth v2 endpoint * Change version queryParam to cypressVersion, keep platform as platform, don't bother sending arch * Change " Opening browser..." button to display " Browser failed to open" * "You are now logged in to the Cypress Dashboard as Zach Bloomquist." -> "You are now logged in as Zach Bloomquist." * POST /signout -> GET /logout * make fallback URL click-to-select * add tests for edge cases in browser launching * cleanup * logoutUrl -> dashboardLogoutUrl * getLogout -> postLogout * getLogout -> postLogout * send machineId with postLogout
59 lines
1.3 KiB
CoffeeScript
59 lines
1.3 KiB
CoffeeScript
debug = require("debug")("cypress:server:user")
|
|
api = require("./api")
|
|
cache = require("./cache")
|
|
errors = require("./errors")
|
|
keys = require("./util/keys")
|
|
|
|
module.exports = {
|
|
get: ->
|
|
cache.getUser()
|
|
|
|
getSafely: ->
|
|
@get()
|
|
.tap (user) ->
|
|
if user.authToken
|
|
## obfuscate the userToken key
|
|
user.authToken = keys.hide(user.authToken)
|
|
|
|
set: (user) ->
|
|
cache.setUser(user)
|
|
|
|
getBaseLoginUrl: ->
|
|
api.getAuthUrls()
|
|
.get('dashboardAuthUrl')
|
|
|
|
logOut: ->
|
|
@get().then (user) ->
|
|
authToken = user and user.authToken
|
|
|
|
cache.removeUser().then ->
|
|
if authToken
|
|
api.postLogout(authToken)
|
|
|
|
syncProfile: (authToken) ->
|
|
debug("synchronizing user profile")
|
|
api.getMe(authToken)
|
|
.then (res) =>
|
|
debug("received /me %o", res)
|
|
user = {
|
|
authToken
|
|
name: res.name
|
|
email: res.email
|
|
}
|
|
@set(user)
|
|
.return(user)
|
|
|
|
ensureAuthToken: ->
|
|
@get().then (user) ->
|
|
## return authToken if we have one
|
|
if user and at = user.authToken
|
|
return at
|
|
else
|
|
## else throw the not logged in error
|
|
error = errors.get("NOT_LOGGED_IN")
|
|
## tag it as api error since the user is only relevant
|
|
## in regards to the api
|
|
error.isApiError = true
|
|
throw error
|
|
}
|