@things-factory/auth-base 5.0.11 → 6.0.0-alpha.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/client/actions/auth.ts +23 -0
- package/client/{auth.js → auth.ts} +66 -59
- package/client/{bootstrap.js → bootstrap.ts} +5 -4
- package/client/index.ts +1 -0
- package/client/reducers/{auth.js → auth.ts} +1 -1
- package/dist-client/actions/auth.d.ts +8 -0
- package/dist-client/actions/auth.js +15 -0
- package/dist-client/actions/auth.js.map +1 -0
- package/dist-client/auth.d.ts +34 -0
- package/dist-client/auth.js +209 -0
- package/dist-client/auth.js.map +1 -0
- package/dist-client/bootstrap.d.ts +1 -0
- package/dist-client/bootstrap.js +34 -0
- package/dist-client/bootstrap.js.map +1 -0
- package/dist-client/index.d.ts +1 -0
- package/dist-client/index.js +2 -0
- package/dist-client/index.js.map +1 -0
- package/dist-client/reducers/auth.d.ts +14 -0
- package/dist-client/reducers/auth.js +19 -0
- package/dist-client/reducers/auth.js.map +1 -0
- package/dist-client/tsconfig.tsbuildinfo +1 -0
- package/dist-server/constants/error-code.d.ts +17 -0
- package/dist-server/constants/error-message.d.ts +0 -0
- package/dist-server/constants/max-age.d.ts +1 -0
- package/dist-server/controllers/auth.d.ts +5 -0
- package/dist-server/controllers/auth.js +1 -0
- package/dist-server/controllers/auth.js.map +1 -1
- package/dist-server/controllers/change-pwd.d.ts +1 -0
- package/dist-server/controllers/change-pwd.js +5 -4
- package/dist-server/controllers/change-pwd.js.map +1 -1
- package/dist-server/controllers/checkin.d.ts +4 -0
- package/dist-server/controllers/checkin.js +3 -3
- package/dist-server/controllers/checkin.js.map +1 -1
- package/dist-server/controllers/delete-user.d.ts +3 -0
- package/dist-server/controllers/invitation.d.ts +11 -0
- package/dist-server/controllers/invitation.js +11 -12
- package/dist-server/controllers/invitation.js.map +1 -1
- package/dist-server/controllers/profile.d.ts +26 -0
- package/dist-server/controllers/profile.js +4 -4
- package/dist-server/controllers/profile.js.map +1 -1
- package/dist-server/controllers/reset-password.d.ts +5 -0
- package/dist-server/controllers/reset-password.js +7 -7
- package/dist-server/controllers/reset-password.js.map +1 -1
- package/dist-server/controllers/signin.d.ts +6 -0
- package/dist-server/controllers/signin.js +4 -3
- package/dist-server/controllers/signin.js.map +1 -1
- package/dist-server/controllers/signup.d.ts +8 -0
- package/dist-server/controllers/signup.js +13 -9
- package/dist-server/controllers/signup.js.map +1 -1
- package/dist-server/controllers/unlock-user.d.ts +5 -0
- package/dist-server/controllers/unlock-user.js +6 -6
- package/dist-server/controllers/unlock-user.js.map +1 -1
- package/dist-server/controllers/utils/make-invitation-token.d.ts +1 -0
- package/dist-server/controllers/utils/make-verification-token.d.ts +1 -0
- package/dist-server/controllers/utils/password-rule.d.ts +14 -0
- package/dist-server/controllers/utils/save-invitation-token.d.ts +5 -0
- package/dist-server/controllers/utils/save-invitation-token.js +2 -2
- package/dist-server/controllers/utils/save-invitation-token.js.map +1 -1
- package/dist-server/controllers/utils/save-verification-token.d.ts +6 -0
- package/dist-server/controllers/utils/save-verification-token.js +2 -2
- package/dist-server/controllers/utils/save-verification-token.js.map +1 -1
- package/dist-server/controllers/verification.d.ts +6 -0
- package/dist-server/controllers/verification.js +8 -8
- package/dist-server/controllers/verification.js.map +1 -1
- package/dist-server/errors/auth-error.d.ts +11 -0
- package/dist-server/errors/auth-error.js.map +1 -1
- package/dist-server/errors/index.d.ts +2 -0
- package/dist-server/errors/user-domain-not-match-error.d.ts +9 -0
- package/dist-server/errors/user-domain-not-match-error.js.map +1 -1
- package/dist-server/index.d.ts +13 -0
- package/dist-server/index.js +2 -1
- package/dist-server/index.js.map +1 -1
- package/dist-server/middlewares/authenticate-401-middleware.d.ts +1 -0
- package/dist-server/middlewares/authenticate-401-middleware.js +12 -14
- package/dist-server/middlewares/authenticate-401-middleware.js.map +1 -1
- package/dist-server/middlewares/domain-authenticate-middleware.d.ts +11 -0
- package/dist-server/middlewares/domain-authenticate-middleware.js +7 -4
- package/dist-server/middlewares/domain-authenticate-middleware.js.map +1 -1
- package/dist-server/middlewares/graphql-authenticate-middleware.d.ts +1 -0
- package/dist-server/middlewares/index.d.ts +5 -0
- package/dist-server/middlewares/jwt-authenticate-middleware.d.ts +1 -0
- package/dist-server/middlewares/signin-middleware.d.ts +1 -0
- package/dist-server/migrations/1548206416130-SeedUser.d.ts +5 -0
- package/dist-server/migrations/1548206416130-SeedUser.js +4 -5
- package/dist-server/migrations/1548206416130-SeedUser.js.map +1 -1
- package/dist-server/migrations/1566805283882-SeedPrivilege.d.ts +5 -0
- package/dist-server/migrations/1566805283882-SeedPrivilege.js +2 -2
- package/dist-server/migrations/1566805283882-SeedPrivilege.js.map +1 -1
- package/dist-server/migrations/index.d.ts +1 -0
- package/dist-server/router/auth-checkin-router.d.ts +1 -0
- package/dist-server/router/auth-checkin-router.js.map +1 -1
- package/dist-server/router/auth-private-process-router.d.ts +1 -0
- package/dist-server/router/auth-private-process-router.js +2 -2
- package/dist-server/router/auth-private-process-router.js.map +1 -1
- package/dist-server/router/auth-public-process-router.d.ts +1 -0
- package/dist-server/router/auth-public-process-router.js +2 -3
- package/dist-server/router/auth-public-process-router.js.map +1 -1
- package/dist-server/router/auth-signin-router.d.ts +1 -0
- package/dist-server/router/auth-signup-router.d.ts +1 -0
- package/dist-server/router/auth-signup-router.js +31 -32
- package/dist-server/router/auth-signup-router.js.map +1 -1
- package/dist-server/router/index.d.ts +8 -0
- package/dist-server/router/oauth2/index.d.ts +2 -0
- package/dist-server/router/oauth2/oauth2-authorize-router.d.ts +1 -0
- package/dist-server/router/oauth2/oauth2-authorize-router.js +2 -2
- package/dist-server/router/oauth2/oauth2-authorize-router.js.map +1 -1
- package/dist-server/router/oauth2/oauth2-router.d.ts +9 -0
- package/dist-server/router/oauth2/oauth2-router.js +6 -7
- package/dist-server/router/oauth2/oauth2-router.js.map +1 -1
- package/dist-server/router/oauth2/oauth2-server.d.ts +5 -0
- package/dist-server/router/oauth2/oauth2-server.js +23 -21
- package/dist-server/router/oauth2/oauth2-server.js.map +1 -1
- package/dist-server/router/oauth2/passport-oauth2-client-password.d.ts +7 -0
- package/dist-server/router/oauth2/passport-refresh-token.d.ts +7 -0
- package/dist-server/router/path-base-domain-router.d.ts +1 -0
- package/dist-server/router/site-root-router.d.ts +1 -0
- package/dist-server/routes.d.ts +1 -0
- package/dist-server/service/app-binding/app-binding-mutation.d.ts +3 -0
- package/dist-server/service/app-binding/app-binding-mutation.js +2 -2
- package/dist-server/service/app-binding/app-binding-mutation.js.map +1 -1
- package/dist-server/service/app-binding/app-binding-query.d.ts +14 -0
- package/dist-server/service/app-binding/app-binding-query.js +7 -9
- package/dist-server/service/app-binding/app-binding-query.js.map +1 -1
- package/dist-server/service/app-binding/app-binding-types.d.ts +5 -0
- package/dist-server/service/app-binding/app-binding.d.ts +7 -0
- package/dist-server/service/app-binding/index.d.ts +3 -0
- package/dist-server/service/appliance/appliance-mutation.d.ts +8 -0
- package/dist-server/service/appliance/appliance-mutation.js +13 -12
- package/dist-server/service/appliance/appliance-mutation.js.map +1 -1
- package/dist-server/service/appliance/appliance-query.d.ts +11 -0
- package/dist-server/service/appliance/appliance-query.js +7 -9
- package/dist-server/service/appliance/appliance-query.js.map +1 -1
- package/dist-server/service/appliance/appliance-types.d.ts +22 -0
- package/dist-server/service/appliance/appliance.d.ts +22 -0
- package/dist-server/service/appliance/appliance.js +1 -2
- package/dist-server/service/appliance/appliance.js.map +1 -1
- package/dist-server/service/appliance/index.d.ts +5 -0
- package/dist-server/service/application/application-mutation.d.ts +66 -0
- package/dist-server/service/application/application-mutation.js +13 -13
- package/dist-server/service/application/application-mutation.js.map +1 -1
- package/dist-server/service/application/application-query.d.ts +16 -0
- package/dist-server/service/application/application-query.js +11 -13
- package/dist-server/service/application/application-query.js.map +1 -1
- package/dist-server/service/application/application-types.d.ts +27 -0
- package/dist-server/service/application/application.d.ts +35 -0
- package/dist-server/service/application/application.js +1 -2
- package/dist-server/service/application/application.js.map +1 -1
- package/dist-server/service/application/index.d.ts +5 -0
- package/dist-server/service/domain-generator/domain-generator-mutation.d.ts +6 -0
- package/dist-server/service/domain-generator/domain-generator-mutation.js +7 -7
- package/dist-server/service/domain-generator/domain-generator-mutation.js.map +1 -1
- package/dist-server/service/domain-generator/domain-generator-types.d.ts +19 -0
- package/dist-server/service/domain-generator/domain-generator-types.js +1 -2
- package/dist-server/service/domain-generator/domain-generator-types.js.map +1 -1
- package/dist-server/service/domain-generator/index.d.ts +2 -0
- package/dist-server/service/granted-role/granted-role-mutation.d.ts +11 -0
- package/dist-server/service/granted-role/granted-role-mutation.js +14 -9
- package/dist-server/service/granted-role/granted-role-mutation.js.map +1 -1
- package/dist-server/service/granted-role/granted-role-query.d.ts +16 -0
- package/dist-server/service/granted-role/granted-role-query.js +8 -9
- package/dist-server/service/granted-role/granted-role-query.js.map +1 -1
- package/dist-server/service/granted-role/granted-role.d.ts +9 -0
- package/dist-server/service/granted-role/granted-role.js +1 -2
- package/dist-server/service/granted-role/granted-role.js.map +1 -1
- package/dist-server/service/granted-role/index.d.ts +5 -0
- package/dist-server/service/index.d.ts +31 -0
- package/dist-server/service/invitation/index.d.ts +5 -0
- package/dist-server/service/invitation/invitation-mutation.d.ts +17 -0
- package/dist-server/service/invitation/invitation-mutation.js +9 -9
- package/dist-server/service/invitation/invitation-mutation.js.map +1 -1
- package/dist-server/service/invitation/invitation-query.d.ts +8 -0
- package/dist-server/service/invitation/invitation-query.js +4 -4
- package/dist-server/service/invitation/invitation-query.js.map +1 -1
- package/dist-server/service/invitation/invitation-types.d.ts +5 -0
- package/dist-server/service/invitation/invitation.d.ts +14 -0
- package/dist-server/service/login-history/index.d.ts +4 -0
- package/dist-server/service/login-history/login-history-query.d.ts +8 -0
- package/dist-server/service/login-history/login-history-query.js +9 -11
- package/dist-server/service/login-history/login-history-query.js.map +1 -1
- package/dist-server/service/login-history/login-history.d.ts +12 -0
- package/dist-server/service/login-history/login-history.js +14 -15
- package/dist-server/service/login-history/login-history.js.map +1 -1
- package/dist-server/service/partner/index.d.ts +5 -0
- package/dist-server/service/partner/partner-mutation.d.ts +4 -0
- package/dist-server/service/partner/partner-mutation.js +6 -7
- package/dist-server/service/partner/partner-mutation.js.map +1 -1
- package/dist-server/service/partner/partner-query.d.ts +14 -0
- package/dist-server/service/partner/partner-query.js +11 -13
- package/dist-server/service/partner/partner-query.js.map +1 -1
- package/dist-server/service/partner/partner-types.d.ts +5 -0
- package/dist-server/service/partner/partner.d.ts +15 -0
- package/dist-server/service/partner/partner.js +2 -3
- package/dist-server/service/partner/partner.js.map +1 -1
- package/dist-server/service/password-history/index.d.ts +2 -0
- package/dist-server/service/password-history/password-history.d.ts +4 -0
- package/dist-server/service/privilege/index.d.ts +5 -0
- package/dist-server/service/privilege/privilege-directive.d.ts +3 -0
- package/dist-server/service/privilege/privilege-directive.js +2 -2
- package/dist-server/service/privilege/privilege-directive.js.map +1 -1
- package/dist-server/service/privilege/privilege-mutation.d.ts +7 -0
- package/dist-server/service/privilege/privilege-mutation.js +6 -5
- package/dist-server/service/privilege/privilege-mutation.js.map +1 -1
- package/dist-server/service/privilege/privilege-query.d.ts +13 -0
- package/dist-server/service/privilege/privilege-query.js +7 -8
- package/dist-server/service/privilege/privilege-query.js.map +1 -1
- package/dist-server/service/privilege/privilege-types.d.ts +25 -0
- package/dist-server/service/privilege/privilege.d.ts +15 -0
- package/dist-server/service/role/index.d.ts +5 -0
- package/dist-server/service/role/role-mutation.d.ts +8 -0
- package/dist-server/service/role/role-mutation.js +13 -11
- package/dist-server/service/role/role-mutation.js.map +1 -1
- package/dist-server/service/role/role-query.d.ts +18 -0
- package/dist-server/service/role/role-query.js +13 -13
- package/dist-server/service/role/role-query.js.map +1 -1
- package/dist-server/service/role/role-types.d.ts +33 -0
- package/dist-server/service/role/role.d.ts +18 -0
- package/dist-server/service/role/role.js +1 -2
- package/dist-server/service/role/role.js.map +1 -1
- package/dist-server/service/user/index.d.ts +5 -0
- package/dist-server/service/user/user-mutation.d.ts +28 -0
- package/dist-server/service/user/user-mutation.js +24 -17
- package/dist-server/service/user/user-mutation.js.map +1 -1
- package/dist-server/service/user/user-query.d.ts +16 -0
- package/dist-server/service/user/user-query.js +15 -13
- package/dist-server/service/user/user-query.js.map +1 -1
- package/dist-server/service/user/user-types.d.ts +26 -0
- package/dist-server/service/user/user.d.ts +39 -0
- package/dist-server/service/user/user.js +9 -8
- package/dist-server/service/user/user.js.map +1 -1
- package/dist-server/service/verification-token/index.d.ts +2 -0
- package/dist-server/service/verification-token/verification-token.d.ts +14 -0
- package/dist-server/templates/account-unlock-email.d.ts +4 -0
- package/dist-server/templates/invitation-email.d.ts +4 -0
- package/dist-server/templates/reset-password-email.d.ts +4 -0
- package/dist-server/templates/verification-email.d.ts +4 -0
- package/dist-server/tsconfig.tsbuildinfo +1 -1
- package/dist-server/types.d.ts +17 -0
- package/dist-server/types.js +3 -0
- package/dist-server/types.js.map +1 -0
- package/dist-server/utils/accepts.d.ts +1 -0
- package/dist-server/utils/access-token-cookie.d.ts +3 -0
- package/dist-server/utils/check-user-belongs-domain.d.ts +10 -0
- package/dist-server/utils/check-user-belongs-domain.js +2 -2
- package/dist-server/utils/check-user-belongs-domain.js.map +1 -1
- package/dist-server/utils/get-domain-from-hostname.d.ts +1 -0
- package/dist-server/utils/get-domain-users.d.ts +5 -0
- package/dist-server/utils/get-domain-users.js +2 -3
- package/dist-server/utils/get-domain-users.js.map +1 -1
- package/dist-server/utils/get-secret.d.ts +1 -0
- package/dist-server/utils/get-user-domains.d.ts +5 -0
- package/dist-server/utils/get-user-domains.js +7 -5
- package/dist-server/utils/get-user-domains.js.map +1 -1
- package/package.json +15 -13
- package/server/controllers/auth.ts +1 -0
- package/server/controllers/change-pwd.ts +3 -3
- package/server/controllers/checkin.ts +3 -3
- package/server/controllers/invitation.ts +6 -7
- package/server/controllers/profile.ts +4 -3
- package/server/controllers/reset-password.ts +3 -3
- package/server/controllers/signin.ts +4 -2
- package/server/controllers/signup.ts +13 -8
- package/server/controllers/unlock-user.ts +5 -3
- package/server/controllers/utils/save-invitation-token.ts +2 -1
- package/server/controllers/utils/save-verification-token.ts +2 -1
- package/server/controllers/verification.ts +6 -4
- package/server/errors/auth-error.ts +3 -0
- package/server/errors/user-domain-not-match-error.ts +3 -0
- package/server/index.ts +3 -1
- package/server/middlewares/authenticate-401-middleware.ts +15 -3
- package/server/middlewares/domain-authenticate-middleware.ts +9 -6
- package/server/migrations/1548206416130-SeedUser.ts +3 -3
- package/server/migrations/1566805283882-SeedPrivilege.ts +2 -1
- package/server/router/auth-checkin-router.ts +1 -1
- package/server/router/auth-private-process-router.ts +1 -2
- package/server/router/auth-public-process-router.ts +2 -3
- package/server/router/auth-signup-router.ts +38 -38
- package/server/router/oauth2/oauth2-authorize-router.ts +3 -2
- package/server/router/oauth2/oauth2-router.ts +4 -5
- package/server/router/oauth2/oauth2-server.ts +19 -22
- package/server/service/app-binding/app-binding-mutation.ts +3 -2
- package/server/service/app-binding/app-binding-query.ts +9 -9
- package/server/service/appliance/appliance-mutation.ts +14 -8
- package/server/service/appliance/appliance-query.ts +11 -10
- package/server/service/application/application-mutation.ts +21 -12
- package/server/service/application/application-query.ts +20 -17
- package/server/service/domain-generator/domain-generator-mutation.ts +15 -10
- package/server/service/granted-role/granted-role-mutation.ts +14 -12
- package/server/service/granted-role/granted-role-query.ts +12 -10
- package/server/service/invitation/invitation-mutation.ts +7 -5
- package/server/service/invitation/invitation-query.ts +6 -4
- package/server/service/login-history/login-history-query.ts +13 -11
- package/server/service/login-history/login-history.ts +5 -4
- package/server/service/partner/partner-mutation.ts +10 -9
- package/server/service/partner/partner-query.ts +10 -10
- package/server/service/privilege/privilege-directive.ts +1 -1
- package/server/service/privilege/privilege-mutation.ts +10 -5
- package/server/service/privilege/privilege-query.ts +7 -7
- package/server/service/role/role-mutation.ts +18 -11
- package/server/service/role/role-query.ts +18 -16
- package/server/service/user/user-mutation.ts +39 -34
- package/server/service/user/user-query.ts +29 -21
- package/server/service/user/user.ts +12 -10
- package/server/types.ts +21 -0
- package/server/utils/check-user-belongs-domain.ts +2 -2
- package/server/utils/get-domain-users.ts +4 -2
- package/server/utils/get-user-domains.ts +8 -5
- package/things-factory.config.js +1 -1
- package/translations/en.json +2 -5
- package/translations/ko.json +5 -8
- package/translations/ms.json +2 -5
- package/translations/zh.json +2 -5
- package/client/actions/auth.js +0 -16
- package/client/index.js +0 -2
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { AnyAction } from 'redux'
|
|
2
|
+
import { ThunkAction } from 'redux-thunk'
|
|
3
|
+
|
|
4
|
+
export const SET_PROFILE = 'SET-PROFILE'
|
|
5
|
+
export const SET_AUTH = 'SET-AUTH'
|
|
6
|
+
|
|
7
|
+
export const updateUser =
|
|
8
|
+
(user: any): ThunkAction<void, any, unknown, AnyAction> =>
|
|
9
|
+
(dispatch, getState) => {
|
|
10
|
+
dispatch({
|
|
11
|
+
type: SET_PROFILE,
|
|
12
|
+
user
|
|
13
|
+
})
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
export const updateAuthenticated =
|
|
17
|
+
(auth: { authenticated: boolean }): ThunkAction<void, any, unknown, AnyAction> =>
|
|
18
|
+
(dispatch, getState) => {
|
|
19
|
+
dispatch({
|
|
20
|
+
type: SET_AUTH,
|
|
21
|
+
auth
|
|
22
|
+
})
|
|
23
|
+
}
|
|
@@ -11,26 +11,42 @@ const HEADER_JSON = {
|
|
|
11
11
|
'Content-Type': 'application/json',
|
|
12
12
|
Accept: 'application/json'
|
|
13
13
|
}
|
|
14
|
+
type AuthEventName = 'profile' | 'signin' | 'signout' | 'presignout' | 'passwordchange' | 'error'
|
|
15
|
+
type AuthEventHandler = (e?: { accessToken?: string; credential?: string; domains: any[]; domain: any }) => void
|
|
16
|
+
type AuthErrorHandler = (err: any) => void
|
|
14
17
|
|
|
15
18
|
class ClientAuth {
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
19
|
+
private listeners: {
|
|
20
|
+
profile: AuthEventHandler[]
|
|
21
|
+
signout: AuthEventHandler[]
|
|
22
|
+
signin: AuthEventHandler[]
|
|
23
|
+
presignout: AuthEventHandler[]
|
|
24
|
+
passwordchange: AuthEventHandler[]
|
|
25
|
+
error: AuthErrorHandler[]
|
|
26
|
+
} = {
|
|
27
|
+
profile: [],
|
|
28
|
+
signout: [],
|
|
29
|
+
signin: [],
|
|
30
|
+
presignout: [],
|
|
31
|
+
passwordchange: [],
|
|
32
|
+
error: []
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
private authRequiredEventListener = this.onAuthRequired.bind(this)
|
|
36
|
+
private activateRequiredEventListener = this.onActivateRequired.bind(this)
|
|
37
|
+
|
|
38
|
+
private accessToken?: string
|
|
39
|
+
private _credential: any
|
|
40
|
+
// private domains: any[] = []
|
|
41
|
+
// private domain: any
|
|
24
42
|
|
|
25
|
-
|
|
26
|
-
document.addEventListener('auth-required', this.
|
|
27
|
-
|
|
28
|
-
this._activateRequiredEventListener = this.onActivateRequired.bind(this)
|
|
29
|
-
document.addEventListener('activate-required', this._activateRequiredEventListener)
|
|
43
|
+
constructor() {
|
|
44
|
+
document.addEventListener('auth-required', this.authRequiredEventListener)
|
|
45
|
+
document.addEventListener('activate-required', this.activateRequiredEventListener)
|
|
30
46
|
}
|
|
31
47
|
|
|
32
|
-
on(event, handler) {
|
|
33
|
-
var listeners = this.
|
|
48
|
+
on(event: AuthEventName, handler: AuthEventHandler | AuthErrorHandler) {
|
|
49
|
+
var listeners = this.listeners[event]
|
|
34
50
|
if (listeners) {
|
|
35
51
|
listeners.push(handler)
|
|
36
52
|
} else {
|
|
@@ -38,8 +54,8 @@ class ClientAuth {
|
|
|
38
54
|
}
|
|
39
55
|
}
|
|
40
56
|
|
|
41
|
-
off(event, handler) {
|
|
42
|
-
var listeners = this.
|
|
57
|
+
off(event: AuthEventName, handler: AuthEventHandler | AuthErrorHandler) {
|
|
58
|
+
var listeners = this.listeners[event]
|
|
43
59
|
if (listeners) {
|
|
44
60
|
let idx = listeners.indexOf(handler)
|
|
45
61
|
idx >= 0 && listeners.splice(idx, 1)
|
|
@@ -49,54 +65,62 @@ class ClientAuth {
|
|
|
49
65
|
}
|
|
50
66
|
|
|
51
67
|
dispose() {
|
|
52
|
-
document.removeEventListener('auth-required', this.
|
|
53
|
-
document.removeEventListener('activate-required', this.
|
|
68
|
+
document.removeEventListener('auth-required', this.authRequiredEventListener)
|
|
69
|
+
document.removeEventListener('activate-required', this.activateRequiredEventListener)
|
|
54
70
|
|
|
55
|
-
|
|
71
|
+
this.listeners = {
|
|
72
|
+
profile: [],
|
|
73
|
+
signin: [],
|
|
74
|
+
signout: [],
|
|
75
|
+
presignout: [],
|
|
76
|
+
passwordchange: [],
|
|
77
|
+
error: []
|
|
78
|
+
}
|
|
56
79
|
}
|
|
57
80
|
|
|
58
|
-
onProfileFetched({ credential, accessToken, domains, domain }) {
|
|
59
|
-
this.
|
|
60
|
-
this.domains = domains
|
|
61
|
-
this.domain = domain
|
|
81
|
+
private onProfileFetched({ credential, accessToken, domains, domain }) {
|
|
82
|
+
this._credential = credential
|
|
83
|
+
// this.domains = domains
|
|
84
|
+
// this.domain = domain
|
|
85
|
+
|
|
62
86
|
if (accessToken && !this.accessToken) {
|
|
63
87
|
/*
|
|
64
88
|
기존에 세션을 가지거나, 액세스토큰으로 인증된 경우,
|
|
65
89
|
이 경우는 signin 이벤트리스너들을 호출해서 authenticated 상태로 되도록 유도한다.
|
|
66
90
|
*/
|
|
67
91
|
this.accessToken = accessToken
|
|
68
|
-
this.
|
|
92
|
+
this.listeners.signin.forEach(handler => handler({ accessToken, domains, domain }))
|
|
69
93
|
}
|
|
70
94
|
accessToken && (this.accessToken = accessToken)
|
|
71
|
-
this.
|
|
95
|
+
this.listeners.profile.forEach(handler => handler({ credential, domains, domain }))
|
|
72
96
|
}
|
|
73
97
|
|
|
74
|
-
async onPreSignout() {
|
|
75
|
-
for (let onpresignout of this.
|
|
98
|
+
private async onPreSignout() {
|
|
99
|
+
for (let onpresignout of this.listeners.presignout) {
|
|
76
100
|
await onpresignout()
|
|
77
101
|
}
|
|
78
102
|
}
|
|
79
103
|
|
|
80
|
-
onAuthError(error) {
|
|
104
|
+
private onAuthError(error) {
|
|
81
105
|
/* signin, signup 과정에서 에러가 발생한 경우 */
|
|
82
|
-
this.
|
|
106
|
+
this.listeners?.error.forEach(handler => handler(error))
|
|
83
107
|
}
|
|
84
108
|
|
|
85
|
-
onPasswordChanged(result) {
|
|
109
|
+
private onPasswordChanged(result) {
|
|
86
110
|
//event is passwordchange, handler is result
|
|
87
|
-
this.
|
|
111
|
+
this.listeners?.passwordchange.forEach(handler => handler(result))
|
|
88
112
|
}
|
|
89
113
|
|
|
90
|
-
onAuthRequired(e) {
|
|
114
|
+
private onAuthRequired(e) {
|
|
91
115
|
console.warn('authentication required')
|
|
92
|
-
let url = new URL(window.location)
|
|
116
|
+
let url = new URL(window.location.href)
|
|
93
117
|
url.pathname = '/auth/signin'
|
|
94
118
|
url.searchParams.append('redirect_to', window.location.href)
|
|
95
119
|
|
|
96
|
-
window.location = url
|
|
120
|
+
window.location.href = url.href
|
|
97
121
|
}
|
|
98
122
|
|
|
99
|
-
onActivateRequired(e) {
|
|
123
|
+
private onActivateRequired(e) {
|
|
100
124
|
console.warn('activate required')
|
|
101
125
|
var params = new URLSearchParams()
|
|
102
126
|
params.append('email', e.email)
|
|
@@ -104,6 +128,10 @@ class ClientAuth {
|
|
|
104
128
|
window.location.replace(`/auth/activate?${params}`)
|
|
105
129
|
}
|
|
106
130
|
|
|
131
|
+
get credential() {
|
|
132
|
+
return this._credential
|
|
133
|
+
}
|
|
134
|
+
|
|
107
135
|
route(path, redirected) {
|
|
108
136
|
/* history에 남긴다. redirected된 상태임을 남긴다. */
|
|
109
137
|
const location = window.location
|
|
@@ -179,6 +207,7 @@ class ClientAuth {
|
|
|
179
207
|
try {
|
|
180
208
|
var searchParams = new URLSearchParams(location.search)
|
|
181
209
|
var token = searchParams.get('token')
|
|
210
|
+
var headers = JSON.parse(JSON.stringify(HEADER_JSON))
|
|
182
211
|
|
|
183
212
|
if (token) {
|
|
184
213
|
headers.authorization = `Bearer ${token}`
|
|
@@ -187,7 +216,7 @@ class ClientAuth {
|
|
|
187
216
|
const response = await fetch('/auth/profile', {
|
|
188
217
|
method: 'GET',
|
|
189
218
|
credentials: 'include',
|
|
190
|
-
headers
|
|
219
|
+
headers
|
|
191
220
|
})
|
|
192
221
|
|
|
193
222
|
if (response.ok) {
|
|
@@ -206,34 +235,12 @@ class ClientAuth {
|
|
|
206
235
|
})
|
|
207
236
|
|
|
208
237
|
return
|
|
209
|
-
} else {
|
|
210
|
-
/*
|
|
211
|
-
* profile() is called only for triggering server side authentication routing.
|
|
212
|
-
* so, don't need to notify as an error
|
|
213
|
-
*/
|
|
214
|
-
// this.onAuthError({
|
|
215
|
-
// message: await response.text()
|
|
216
|
-
// })
|
|
217
238
|
}
|
|
218
239
|
} catch (e) {
|
|
219
240
|
this.onAuthError(e)
|
|
220
241
|
}
|
|
221
242
|
}
|
|
222
243
|
|
|
223
|
-
async join() {
|
|
224
|
-
const response = await fetch('/auth/signout', {
|
|
225
|
-
method: 'POST',
|
|
226
|
-
credentials: 'include',
|
|
227
|
-
headers: HEADER_JSON
|
|
228
|
-
})
|
|
229
|
-
|
|
230
|
-
if (response.ok) {
|
|
231
|
-
debug
|
|
232
|
-
} else {
|
|
233
|
-
throw new Error(await response.text())
|
|
234
|
-
}
|
|
235
|
-
}
|
|
236
|
-
|
|
237
244
|
async signout() {
|
|
238
245
|
await this.onPreSignout()
|
|
239
246
|
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import { store, updateDomains } from '@
|
|
1
|
+
import { store, updateDomains } from '@operato/shell'
|
|
2
|
+
|
|
2
3
|
import { updateAuthenticated, updateUser } from './actions/auth'
|
|
3
4
|
import { auth } from './auth'
|
|
4
5
|
import reducerAuth from './reducers/auth'
|
|
@@ -12,10 +13,10 @@ export default function bootstrap() {
|
|
|
12
13
|
store.dispatch(
|
|
13
14
|
updateAuthenticated({
|
|
14
15
|
authenticated: true
|
|
15
|
-
})
|
|
16
|
+
}) as any
|
|
16
17
|
)
|
|
17
|
-
store.dispatch(updateUser(credential))
|
|
18
|
-
store.dispatch(updateDomains(domains, domain))
|
|
18
|
+
store.dispatch(updateUser(credential) as any)
|
|
19
|
+
store.dispatch(updateDomains(domains, domain) as any)
|
|
19
20
|
})
|
|
20
21
|
|
|
21
22
|
auth.on('passwordchange', result => {
|
package/client/index.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './auth'
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { AnyAction } from 'redux';
|
|
2
|
+
import { ThunkAction } from 'redux-thunk';
|
|
3
|
+
export declare const SET_PROFILE = "SET-PROFILE";
|
|
4
|
+
export declare const SET_AUTH = "SET-AUTH";
|
|
5
|
+
export declare const updateUser: (user: any) => ThunkAction<void, any, unknown, AnyAction>;
|
|
6
|
+
export declare const updateAuthenticated: (auth: {
|
|
7
|
+
authenticated: boolean;
|
|
8
|
+
}) => ThunkAction<void, any, unknown, AnyAction>;
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
export const SET_PROFILE = 'SET-PROFILE';
|
|
2
|
+
export const SET_AUTH = 'SET-AUTH';
|
|
3
|
+
export const updateUser = (user) => (dispatch, getState) => {
|
|
4
|
+
dispatch({
|
|
5
|
+
type: SET_PROFILE,
|
|
6
|
+
user
|
|
7
|
+
});
|
|
8
|
+
};
|
|
9
|
+
export const updateAuthenticated = (auth) => (dispatch, getState) => {
|
|
10
|
+
dispatch({
|
|
11
|
+
type: SET_AUTH,
|
|
12
|
+
auth
|
|
13
|
+
});
|
|
14
|
+
};
|
|
15
|
+
//# sourceMappingURL=auth.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth.js","sourceRoot":"","sources":["../../client/actions/auth.ts"],"names":[],"mappings":"AAGA,MAAM,CAAC,MAAM,WAAW,GAAG,aAAa,CAAA;AACxC,MAAM,CAAC,MAAM,QAAQ,GAAG,UAAU,CAAA;AAElC,MAAM,CAAC,MAAM,UAAU,GACrB,CAAC,IAAS,EAA8C,EAAE,CAC1D,CAAC,QAAQ,EAAE,QAAQ,EAAE,EAAE;IACrB,QAAQ,CAAC;QACP,IAAI,EAAE,WAAW;QACjB,IAAI;KACL,CAAC,CAAA;AACJ,CAAC,CAAA;AAEH,MAAM,CAAC,MAAM,mBAAmB,GAC9B,CAAC,IAAgC,EAA8C,EAAE,CACjF,CAAC,QAAQ,EAAE,QAAQ,EAAE,EAAE;IACrB,QAAQ,CAAC;QACP,IAAI,EAAE,QAAQ;QACd,IAAI;KACL,CAAC,CAAA;AACJ,CAAC,CAAA","sourcesContent":["import { AnyAction } from 'redux'\nimport { ThunkAction } from 'redux-thunk'\n\nexport const SET_PROFILE = 'SET-PROFILE'\nexport const SET_AUTH = 'SET-AUTH'\n\nexport const updateUser =\n (user: any): ThunkAction<void, any, unknown, AnyAction> =>\n (dispatch, getState) => {\n dispatch({\n type: SET_PROFILE,\n user\n })\n }\n\nexport const updateAuthenticated =\n (auth: { authenticated: boolean }): ThunkAction<void, any, unknown, AnyAction> =>\n (dispatch, getState) => {\n dispatch({\n type: SET_AUTH,\n auth\n })\n }\n"]}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
declare type AuthEventName = 'profile' | 'signin' | 'signout' | 'presignout' | 'passwordchange' | 'error';
|
|
2
|
+
declare type AuthEventHandler = (e?: {
|
|
3
|
+
accessToken?: string;
|
|
4
|
+
credential?: string;
|
|
5
|
+
domains: any[];
|
|
6
|
+
domain: any;
|
|
7
|
+
}) => void;
|
|
8
|
+
declare type AuthErrorHandler = (err: any) => void;
|
|
9
|
+
declare class ClientAuth {
|
|
10
|
+
private listeners;
|
|
11
|
+
private authRequiredEventListener;
|
|
12
|
+
private activateRequiredEventListener;
|
|
13
|
+
private accessToken?;
|
|
14
|
+
private _credential;
|
|
15
|
+
constructor();
|
|
16
|
+
on(event: AuthEventName, handler: AuthEventHandler | AuthErrorHandler): void;
|
|
17
|
+
off(event: AuthEventName, handler: AuthEventHandler | AuthErrorHandler): void;
|
|
18
|
+
dispose(): void;
|
|
19
|
+
private onProfileFetched;
|
|
20
|
+
private onPreSignout;
|
|
21
|
+
private onAuthError;
|
|
22
|
+
private onPasswordChanged;
|
|
23
|
+
private onAuthRequired;
|
|
24
|
+
private onActivateRequired;
|
|
25
|
+
get credential(): any;
|
|
26
|
+
route(path: any, redirected: any): void;
|
|
27
|
+
updateProfile(formProps: any): Promise<string>;
|
|
28
|
+
changePassword(formProps: any): Promise<void>;
|
|
29
|
+
deleteUser(params: any): Promise<string>;
|
|
30
|
+
profile(): Promise<void>;
|
|
31
|
+
signout(): Promise<void>;
|
|
32
|
+
}
|
|
33
|
+
export declare const auth: ClientAuth;
|
|
34
|
+
export {};
|
|
@@ -0,0 +1,209 @@
|
|
|
1
|
+
/* [ AUTH PATH ]
|
|
2
|
+
signinPath = '/auth/signin'
|
|
3
|
+
signoutPath = '/auth/signout'
|
|
4
|
+
profilePath = '/auth/profile'
|
|
5
|
+
updateProfilePath = '/auth/update-profile'
|
|
6
|
+
changepassPath = '/auth/change-pass'
|
|
7
|
+
deleteUserPath = '/auth/delete-user'
|
|
8
|
+
*/
|
|
9
|
+
const HEADER_JSON = {
|
|
10
|
+
'Content-Type': 'application/json',
|
|
11
|
+
Accept: 'application/json'
|
|
12
|
+
};
|
|
13
|
+
class ClientAuth {
|
|
14
|
+
// private domains: any[] = []
|
|
15
|
+
// private domain: any
|
|
16
|
+
constructor() {
|
|
17
|
+
this.listeners = {
|
|
18
|
+
profile: [],
|
|
19
|
+
signout: [],
|
|
20
|
+
signin: [],
|
|
21
|
+
presignout: [],
|
|
22
|
+
passwordchange: [],
|
|
23
|
+
error: []
|
|
24
|
+
};
|
|
25
|
+
this.authRequiredEventListener = this.onAuthRequired.bind(this);
|
|
26
|
+
this.activateRequiredEventListener = this.onActivateRequired.bind(this);
|
|
27
|
+
document.addEventListener('auth-required', this.authRequiredEventListener);
|
|
28
|
+
document.addEventListener('activate-required', this.activateRequiredEventListener);
|
|
29
|
+
}
|
|
30
|
+
on(event, handler) {
|
|
31
|
+
var listeners = this.listeners[event];
|
|
32
|
+
if (listeners) {
|
|
33
|
+
listeners.push(handler);
|
|
34
|
+
}
|
|
35
|
+
else {
|
|
36
|
+
console.log('unknown event', event);
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
off(event, handler) {
|
|
40
|
+
var listeners = this.listeners[event];
|
|
41
|
+
if (listeners) {
|
|
42
|
+
let idx = listeners.indexOf(handler);
|
|
43
|
+
idx >= 0 && listeners.splice(idx, 1);
|
|
44
|
+
}
|
|
45
|
+
else {
|
|
46
|
+
console.log('unknown event', event);
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
dispose() {
|
|
50
|
+
document.removeEventListener('auth-required', this.authRequiredEventListener);
|
|
51
|
+
document.removeEventListener('activate-required', this.activateRequiredEventListener);
|
|
52
|
+
this.listeners = {
|
|
53
|
+
profile: [],
|
|
54
|
+
signin: [],
|
|
55
|
+
signout: [],
|
|
56
|
+
presignout: [],
|
|
57
|
+
passwordchange: [],
|
|
58
|
+
error: []
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
onProfileFetched({ credential, accessToken, domains, domain }) {
|
|
62
|
+
this._credential = credential;
|
|
63
|
+
// this.domains = domains
|
|
64
|
+
// this.domain = domain
|
|
65
|
+
if (accessToken && !this.accessToken) {
|
|
66
|
+
/*
|
|
67
|
+
기존에 세션을 가지거나, 액세스토큰으로 인증된 경우,
|
|
68
|
+
이 경우는 signin 이벤트리스너들을 호출해서 authenticated 상태로 되도록 유도한다.
|
|
69
|
+
*/
|
|
70
|
+
this.accessToken = accessToken;
|
|
71
|
+
this.listeners.signin.forEach(handler => handler({ accessToken, domains, domain }));
|
|
72
|
+
}
|
|
73
|
+
accessToken && (this.accessToken = accessToken);
|
|
74
|
+
this.listeners.profile.forEach(handler => handler({ credential, domains, domain }));
|
|
75
|
+
}
|
|
76
|
+
async onPreSignout() {
|
|
77
|
+
for (let onpresignout of this.listeners.presignout) {
|
|
78
|
+
await onpresignout();
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
onAuthError(error) {
|
|
82
|
+
var _a;
|
|
83
|
+
/* signin, signup 과정에서 에러가 발생한 경우 */
|
|
84
|
+
(_a = this.listeners) === null || _a === void 0 ? void 0 : _a.error.forEach(handler => handler(error));
|
|
85
|
+
}
|
|
86
|
+
onPasswordChanged(result) {
|
|
87
|
+
var _a;
|
|
88
|
+
//event is passwordchange, handler is result
|
|
89
|
+
(_a = this.listeners) === null || _a === void 0 ? void 0 : _a.passwordchange.forEach(handler => handler(result));
|
|
90
|
+
}
|
|
91
|
+
onAuthRequired(e) {
|
|
92
|
+
console.warn('authentication required');
|
|
93
|
+
let url = new URL(window.location.href);
|
|
94
|
+
url.pathname = '/auth/signin';
|
|
95
|
+
url.searchParams.append('redirect_to', window.location.href);
|
|
96
|
+
window.location.href = url.href;
|
|
97
|
+
}
|
|
98
|
+
onActivateRequired(e) {
|
|
99
|
+
console.warn('activate required');
|
|
100
|
+
var params = new URLSearchParams();
|
|
101
|
+
params.append('email', e.email);
|
|
102
|
+
window.location.replace(`/auth/activate?${params}`);
|
|
103
|
+
}
|
|
104
|
+
get credential() {
|
|
105
|
+
return this._credential;
|
|
106
|
+
}
|
|
107
|
+
route(path, redirected) {
|
|
108
|
+
/* history에 남긴다. redirected된 상태임을 남긴다. */
|
|
109
|
+
const location = window.location;
|
|
110
|
+
const origin = location.origin || location.protocol + '//' + location.host;
|
|
111
|
+
const href = `${origin}${path}`;
|
|
112
|
+
if (location.pathname === path)
|
|
113
|
+
return;
|
|
114
|
+
// popstate 이벤트가 history.back() 에서만 발생하므로
|
|
115
|
+
// 히스토리에 두번을 넣고 back()을 호출하는 편법을 사용함.
|
|
116
|
+
// forward history가 한번 남는 문제가 있으나 signin 프로세스 중에만 발생하므로 큰 문제는 아님.
|
|
117
|
+
// 이 로직은 login process가 어플리케이션 구조에 종속되는 것을 최소화하기 위함임.
|
|
118
|
+
// 예를 들면, redux 구조에 들어가지 않아도 로그인 프로세스가 동작하도록 한 것임.
|
|
119
|
+
window.history.pushState({ redirected }, '', href);
|
|
120
|
+
window.history.pushState({}, '', href);
|
|
121
|
+
window.history.back();
|
|
122
|
+
}
|
|
123
|
+
async updateProfile(formProps) {
|
|
124
|
+
const response = await fetch('/auth/update-profile', {
|
|
125
|
+
method: 'POST',
|
|
126
|
+
credentials: 'include',
|
|
127
|
+
headers: HEADER_JSON,
|
|
128
|
+
body: JSON.stringify(formProps)
|
|
129
|
+
});
|
|
130
|
+
const message = await response.text();
|
|
131
|
+
if (response.ok) {
|
|
132
|
+
return message;
|
|
133
|
+
}
|
|
134
|
+
throw new Error(message);
|
|
135
|
+
}
|
|
136
|
+
async changePassword(formProps) {
|
|
137
|
+
try {
|
|
138
|
+
const response = await fetch('/auth/change-pass', {
|
|
139
|
+
method: 'POST',
|
|
140
|
+
credentials: 'include',
|
|
141
|
+
headers: HEADER_JSON,
|
|
142
|
+
body: JSON.stringify(formProps)
|
|
143
|
+
});
|
|
144
|
+
const message = await response.text();
|
|
145
|
+
if (response.ok) {
|
|
146
|
+
this.onPasswordChanged({ message });
|
|
147
|
+
}
|
|
148
|
+
else {
|
|
149
|
+
this.onAuthError({ message });
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
catch (e) {
|
|
153
|
+
this.onAuthError(e);
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
async deleteUser(params) {
|
|
157
|
+
const response = await fetch('/auth/delete-user', {
|
|
158
|
+
method: 'POST',
|
|
159
|
+
credentials: 'include',
|
|
160
|
+
headers: HEADER_JSON,
|
|
161
|
+
body: JSON.stringify(params)
|
|
162
|
+
});
|
|
163
|
+
const message = await response.text();
|
|
164
|
+
if (response.ok) {
|
|
165
|
+
return message;
|
|
166
|
+
}
|
|
167
|
+
else {
|
|
168
|
+
throw new Error(message);
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
async profile() {
|
|
172
|
+
try {
|
|
173
|
+
var searchParams = new URLSearchParams(location.search);
|
|
174
|
+
var token = searchParams.get('token');
|
|
175
|
+
var headers = JSON.parse(JSON.stringify(HEADER_JSON));
|
|
176
|
+
if (token) {
|
|
177
|
+
headers.authorization = `Bearer ${token}`;
|
|
178
|
+
}
|
|
179
|
+
const response = await fetch('/auth/profile', {
|
|
180
|
+
method: 'GET',
|
|
181
|
+
credentials: 'include',
|
|
182
|
+
headers
|
|
183
|
+
});
|
|
184
|
+
if (response.ok) {
|
|
185
|
+
if (response.redirected) {
|
|
186
|
+
location.href = response.url;
|
|
187
|
+
return;
|
|
188
|
+
}
|
|
189
|
+
const data = await response.json();
|
|
190
|
+
this.onProfileFetched({
|
|
191
|
+
credential: data.user,
|
|
192
|
+
accessToken: data.token,
|
|
193
|
+
domains: data.domains,
|
|
194
|
+
domain: data.domain
|
|
195
|
+
});
|
|
196
|
+
return;
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
catch (e) {
|
|
200
|
+
this.onAuthError(e);
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
async signout() {
|
|
204
|
+
await this.onPreSignout();
|
|
205
|
+
window.location.href = '/auth/signout';
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
export const auth = new ClientAuth();
|
|
209
|
+
//# sourceMappingURL=auth.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth.js","sourceRoot":"","sources":["../client/auth.ts"],"names":[],"mappings":"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","sourcesContent":["/* [ AUTH PATH ]\n signinPath = '/auth/signin'\n signoutPath = '/auth/signout'\n profilePath = '/auth/profile'\n updateProfilePath = '/auth/update-profile'\n changepassPath = '/auth/change-pass'\n deleteUserPath = '/auth/delete-user'\n*/\n\nconst HEADER_JSON = {\n 'Content-Type': 'application/json',\n Accept: 'application/json'\n}\ntype AuthEventName = 'profile' | 'signin' | 'signout' | 'presignout' | 'passwordchange' | 'error'\ntype AuthEventHandler = (e?: { accessToken?: string; credential?: string; domains: any[]; domain: any }) => void\ntype AuthErrorHandler = (err: any) => void\n\nclass ClientAuth {\n private listeners: {\n profile: AuthEventHandler[]\n signout: AuthEventHandler[]\n signin: AuthEventHandler[]\n presignout: AuthEventHandler[]\n passwordchange: AuthEventHandler[]\n error: AuthErrorHandler[]\n } = {\n profile: [],\n signout: [],\n signin: [],\n presignout: [],\n passwordchange: [],\n error: []\n }\n\n private authRequiredEventListener = this.onAuthRequired.bind(this)\n private activateRequiredEventListener = this.onActivateRequired.bind(this)\n\n private accessToken?: string\n private _credential: any\n // private domains: any[] = []\n // private domain: any\n\n constructor() {\n document.addEventListener('auth-required', this.authRequiredEventListener)\n document.addEventListener('activate-required', this.activateRequiredEventListener)\n }\n\n on(event: AuthEventName, handler: AuthEventHandler | AuthErrorHandler) {\n var listeners = this.listeners[event]\n if (listeners) {\n listeners.push(handler)\n } else {\n console.log('unknown event', event)\n }\n }\n\n off(event: AuthEventName, handler: AuthEventHandler | AuthErrorHandler) {\n var listeners = this.listeners[event]\n if (listeners) {\n let idx = listeners.indexOf(handler)\n idx >= 0 && listeners.splice(idx, 1)\n } else {\n console.log('unknown event', event)\n }\n }\n\n dispose() {\n document.removeEventListener('auth-required', this.authRequiredEventListener)\n document.removeEventListener('activate-required', this.activateRequiredEventListener)\n\n this.listeners = {\n profile: [],\n signin: [],\n signout: [],\n presignout: [],\n passwordchange: [],\n error: []\n }\n }\n\n private onProfileFetched({ credential, accessToken, domains, domain }) {\n this._credential = credential\n // this.domains = domains\n // this.domain = domain\n\n if (accessToken && !this.accessToken) {\n /*\n 기존에 세션을 가지거나, 액세스토큰으로 인증된 경우,\n 이 경우는 signin 이벤트리스너들을 호출해서 authenticated 상태로 되도록 유도한다.\n */\n this.accessToken = accessToken\n this.listeners.signin.forEach(handler => handler({ accessToken, domains, domain }))\n }\n accessToken && (this.accessToken = accessToken)\n this.listeners.profile.forEach(handler => handler({ credential, domains, domain }))\n }\n\n private async onPreSignout() {\n for (let onpresignout of this.listeners.presignout) {\n await onpresignout()\n }\n }\n\n private onAuthError(error) {\n /* signin, signup 과정에서 에러가 발생한 경우 */\n this.listeners?.error.forEach(handler => handler(error))\n }\n\n private onPasswordChanged(result) {\n //event is passwordchange, handler is result\n this.listeners?.passwordchange.forEach(handler => handler(result))\n }\n\n private onAuthRequired(e) {\n console.warn('authentication required')\n let url = new URL(window.location.href)\n url.pathname = '/auth/signin'\n url.searchParams.append('redirect_to', window.location.href)\n\n window.location.href = url.href\n }\n\n private onActivateRequired(e) {\n console.warn('activate required')\n var params = new URLSearchParams()\n params.append('email', e.email)\n\n window.location.replace(`/auth/activate?${params}`)\n }\n\n get credential() {\n return this._credential\n }\n\n route(path, redirected) {\n /* history에 남긴다. redirected된 상태임을 남긴다. */\n const location = window.location\n const origin = location.origin || location.protocol + '//' + location.host\n const href = `${origin}${path}`\n\n if (location.pathname === path) return\n\n // popstate 이벤트가 history.back() 에서만 발생하므로\n // 히스토리에 두번을 넣고 back()을 호출하는 편법을 사용함.\n // forward history가 한번 남는 문제가 있으나 signin 프로세스 중에만 발생하므로 큰 문제는 아님.\n // 이 로직은 login process가 어플리케이션 구조에 종속되는 것을 최소화하기 위함임.\n // 예를 들면, redux 구조에 들어가지 않아도 로그인 프로세스가 동작하도록 한 것임.\n window.history.pushState({ redirected }, '', href)\n window.history.pushState({}, '', href)\n\n window.history.back()\n }\n\n async updateProfile(formProps) {\n const response = await fetch('/auth/update-profile', {\n method: 'POST',\n credentials: 'include',\n headers: HEADER_JSON,\n body: JSON.stringify(formProps)\n })\n\n const message = await response.text()\n if (response.ok) {\n return message\n }\n\n throw new Error(message)\n }\n\n async changePassword(formProps) {\n try {\n const response = await fetch('/auth/change-pass', {\n method: 'POST',\n credentials: 'include',\n headers: HEADER_JSON,\n body: JSON.stringify(formProps)\n })\n\n const message = await response.text()\n if (response.ok) {\n this.onPasswordChanged({ message })\n } else {\n this.onAuthError({ message })\n }\n } catch (e) {\n this.onAuthError(e)\n }\n }\n\n async deleteUser(params) {\n const response = await fetch('/auth/delete-user', {\n method: 'POST',\n credentials: 'include',\n headers: HEADER_JSON,\n body: JSON.stringify(params)\n })\n\n const message = await response.text()\n if (response.ok) {\n return message\n } else {\n throw new Error(message)\n }\n }\n\n async profile() {\n try {\n var searchParams = new URLSearchParams(location.search)\n var token = searchParams.get('token')\n var headers = JSON.parse(JSON.stringify(HEADER_JSON))\n\n if (token) {\n headers.authorization = `Bearer ${token}`\n }\n\n const response = await fetch('/auth/profile', {\n method: 'GET',\n credentials: 'include',\n headers\n })\n\n if (response.ok) {\n if (response.redirected) {\n location.href = response.url\n return\n }\n\n const data = await response.json()\n\n this.onProfileFetched({\n credential: data.user,\n accessToken: data.token,\n domains: data.domains,\n domain: data.domain\n })\n\n return\n }\n } catch (e) {\n this.onAuthError(e)\n }\n }\n\n async signout() {\n await this.onPreSignout()\n\n window.location.href = '/auth/signout'\n }\n}\n\nexport const auth = new ClientAuth()\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export default function bootstrap(): void;
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { store, updateDomains } from '@operato/shell';
|
|
2
|
+
import { updateAuthenticated, updateUser } from './actions/auth';
|
|
3
|
+
import { auth } from './auth';
|
|
4
|
+
import reducerAuth from './reducers/auth';
|
|
5
|
+
export default function bootstrap() {
|
|
6
|
+
store.addReducers({
|
|
7
|
+
auth: reducerAuth
|
|
8
|
+
});
|
|
9
|
+
auth.on('profile', ({ credential, domains, domain }) => {
|
|
10
|
+
store.dispatch(updateAuthenticated({
|
|
11
|
+
authenticated: true
|
|
12
|
+
}));
|
|
13
|
+
store.dispatch(updateUser(credential));
|
|
14
|
+
store.dispatch(updateDomains(domains, domain));
|
|
15
|
+
});
|
|
16
|
+
auth.on('passwordchange', result => {
|
|
17
|
+
let message = result.message;
|
|
18
|
+
document.dispatchEvent(new CustomEvent('notify', {
|
|
19
|
+
detail: {
|
|
20
|
+
level: result.error ? 'error' : 'info',
|
|
21
|
+
message
|
|
22
|
+
}
|
|
23
|
+
}));
|
|
24
|
+
});
|
|
25
|
+
auth.on('error', ex => {
|
|
26
|
+
document.dispatchEvent(new CustomEvent('notify', {
|
|
27
|
+
detail: {
|
|
28
|
+
level: 'error',
|
|
29
|
+
message: ex.message
|
|
30
|
+
}
|
|
31
|
+
}));
|
|
32
|
+
});
|
|
33
|
+
}
|
|
34
|
+
//# sourceMappingURL=bootstrap.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bootstrap.js","sourceRoot":"","sources":["../client/bootstrap.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAA;AAErD,OAAO,EAAE,mBAAmB,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAA;AAChE,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAA;AAC7B,OAAO,WAAW,MAAM,iBAAiB,CAAA;AAEzC,MAAM,CAAC,OAAO,UAAU,SAAS;IAC/B,KAAK,CAAC,WAAW,CAAC;QAChB,IAAI,EAAE,WAAW;KAClB,CAAC,CAAA;IAEF,IAAI,CAAC,EAAE,CAAC,SAAS,EAAE,CAAC,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE,EAAE;QACrD,KAAK,CAAC,QAAQ,CACZ,mBAAmB,CAAC;YAClB,aAAa,EAAE,IAAI;SACpB,CAAQ,CACV,CAAA;QACD,KAAK,CAAC,QAAQ,CAAC,UAAU,CAAC,UAAU,CAAQ,CAAC,CAAA;QAC7C,KAAK,CAAC,QAAQ,CAAC,aAAa,CAAC,OAAO,EAAE,MAAM,CAAQ,CAAC,CAAA;IACvD,CAAC,CAAC,CAAA;IAEF,IAAI,CAAC,EAAE,CAAC,gBAAgB,EAAE,MAAM,CAAC,EAAE;QACjC,IAAI,OAAO,GAAG,MAAM,CAAC,OAAO,CAAA;QAE5B,QAAQ,CAAC,aAAa,CACpB,IAAI,WAAW,CAAC,QAAQ,EAAE;YACxB,MAAM,EAAE;gBACN,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM;gBACtC,OAAO;aACR;SACF,CAAC,CACH,CAAA;IACH,CAAC,CAAC,CAAA;IAEF,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,EAAE;QACpB,QAAQ,CAAC,aAAa,CACpB,IAAI,WAAW,CAAC,QAAQ,EAAE;YACxB,MAAM,EAAE;gBACN,KAAK,EAAE,OAAO;gBACd,OAAO,EAAE,EAAE,CAAC,OAAO;aACpB;SACF,CAAC,CACH,CAAA;IACH,CAAC,CAAC,CAAA;AACJ,CAAC","sourcesContent":["import { store, updateDomains } from '@operato/shell'\n\nimport { updateAuthenticated, updateUser } from './actions/auth'\nimport { auth } from './auth'\nimport reducerAuth from './reducers/auth'\n\nexport default function bootstrap() {\n store.addReducers({\n auth: reducerAuth\n })\n\n auth.on('profile', ({ credential, domains, domain }) => {\n store.dispatch(\n updateAuthenticated({\n authenticated: true\n }) as any\n )\n store.dispatch(updateUser(credential) as any)\n store.dispatch(updateDomains(domains, domain) as any)\n })\n\n auth.on('passwordchange', result => {\n let message = result.message\n\n document.dispatchEvent(\n new CustomEvent('notify', {\n detail: {\n level: result.error ? 'error' : 'info',\n message\n }\n })\n )\n })\n\n auth.on('error', ex => {\n document.dispatchEvent(\n new CustomEvent('notify', {\n detail: {\n level: 'error',\n message: ex.message\n }\n })\n )\n })\n}\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './auth';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../client/index.ts"],"names":[],"mappings":"AAAA,cAAc,QAAQ,CAAA","sourcesContent":["export * from './auth'\n"]}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
declare const auth: (state: {
|
|
2
|
+
authenticated: boolean;
|
|
3
|
+
accessToken: string;
|
|
4
|
+
user: null;
|
|
5
|
+
} | undefined, action: any) => {
|
|
6
|
+
authenticated: any;
|
|
7
|
+
accessToken: any;
|
|
8
|
+
user: null;
|
|
9
|
+
} | {
|
|
10
|
+
user: any;
|
|
11
|
+
authenticated: boolean;
|
|
12
|
+
accessToken: string;
|
|
13
|
+
};
|
|
14
|
+
export default auth;
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { SET_AUTH, SET_PROFILE } from '../actions/auth';
|
|
2
|
+
const INITIAL_STATE = {
|
|
3
|
+
authenticated: false,
|
|
4
|
+
accessToken: '',
|
|
5
|
+
user: null
|
|
6
|
+
};
|
|
7
|
+
const auth = (state = INITIAL_STATE, action) => {
|
|
8
|
+
switch (action.type) {
|
|
9
|
+
case SET_AUTH:
|
|
10
|
+
let auth = action.auth;
|
|
11
|
+
return Object.assign(Object.assign({}, state), { authenticated: auth.authenticated, accessToken: auth.accessToken });
|
|
12
|
+
case SET_PROFILE:
|
|
13
|
+
return Object.assign(Object.assign({}, state), { user: action.user });
|
|
14
|
+
default:
|
|
15
|
+
return state;
|
|
16
|
+
}
|
|
17
|
+
};
|
|
18
|
+
export default auth;
|
|
19
|
+
//# sourceMappingURL=auth.js.map
|