@multiplatform.one/keycloak 0.0.1 → 0.0.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/esm/Authenticated.js +8 -19
- package/esm/Authenticated.js.map +1 -1
- package/esm/authConfig.js +2 -2
- package/esm/authConfig.js.map +1 -1
- package/esm/expo/ExpoKeycloakContext.js +28 -0
- package/esm/expo/ExpoKeycloakContext.js.map +1 -0
- package/esm/expo/ExpoKeycloakProvider.js +113 -0
- package/esm/expo/ExpoKeycloakProvider.js.map +1 -0
- package/esm/expo/KeycloakContext.js +28 -0
- package/esm/expo/KeycloakContext.js.map +1 -0
- package/esm/expo/KeycloakProvider.js +142 -0
- package/esm/expo/KeycloakProvider.js.map +1 -0
- package/esm/expo/const.js +42 -0
- package/esm/expo/const.js.map +1 -0
- package/esm/expo/helpers.js +56 -0
- package/esm/expo/helpers.js.map +1 -0
- package/esm/expo/index.js +28 -0
- package/esm/expo/index.js.map +1 -0
- package/esm/expo/useExpoKeycloak.js +44 -0
- package/esm/expo/useExpoKeycloak.js.map +1 -0
- package/esm/expo/useTokenStorage.js +153 -0
- package/esm/expo/useTokenStorage.js.map +1 -0
- package/esm/hooks/useCurrentRouteName.js +2 -3
- package/esm/hooks/useCurrentRouteName.js.map +1 -1
- package/esm/hooks/useKeycloak/index.js +1 -1
- package/esm/hooks/useKeycloak/index.js.map +1 -1
- package/esm/hooks/useKeycloak/useKeycloak.js +17 -24
- package/esm/hooks/useKeycloak/useKeycloak.js.map +1 -1
- package/esm/hooks/useKeycloak/useKeycloak.native.js +60 -19
- package/esm/hooks/useKeycloak/useKeycloak.native.js.map +1 -1
- package/esm/hooks/useLogin.js +12 -30
- package/esm/hooks/useLogin.js.map +1 -1
- package/esm/provider/afterAuth.js +21 -39
- package/esm/provider/afterAuth.js.map +1 -1
- package/esm/provider/index.js +11 -28
- package/esm/provider/index.js.map +1 -1
- package/esm/provider/keycloakProvider.js +55 -100
- package/esm/provider/keycloakProvider.js.map +1 -1
- package/esm/provider/keycloakProvider.native.js +12 -11
- package/esm/provider/keycloakProvider.native.js.map +1 -1
- package/esm/state/index.js +2 -2
- package/esm/state/index.js.map +1 -1
- package/lib/Authenticated.js +38 -26
- package/lib/Authenticated.js.map +1 -1
- package/lib/authConfig.js +2 -4
- package/lib/authConfig.js.map +1 -1
- package/lib/expo/ExpoKeycloakContext.d.ts +32 -0
- package/lib/expo/ExpoKeycloakContext.js +47 -0
- package/lib/expo/ExpoKeycloakContext.js.map +1 -0
- package/lib/expo/ExpoKeycloakProvider.d.ts +37 -0
- package/lib/expo/ExpoKeycloakProvider.js +130 -0
- package/lib/expo/ExpoKeycloakProvider.js.map +1 -0
- package/lib/expo/KeycloakContext.d.ts +32 -0
- package/lib/expo/KeycloakContext.js +49 -0
- package/lib/expo/KeycloakContext.js.map +1 -0
- package/lib/expo/KeycloakProvider.d.ts +37 -0
- package/lib/expo/KeycloakProvider.js +138 -0
- package/lib/expo/KeycloakProvider.js.map +1 -0
- package/lib/expo/const.d.ts +33 -0
- package/lib/expo/const.js +66 -0
- package/lib/expo/const.js.map +1 -0
- package/lib/expo/helpers.d.ts +41 -0
- package/lib/expo/helpers.js +77 -0
- package/lib/expo/helpers.js.map +1 -0
- package/lib/expo/index.d.ts +26 -0
- package/lib/expo/index.js +50 -0
- package/lib/expo/index.js.map +1 -0
- package/lib/expo/useExpoKeycloak.d.ts +31 -0
- package/lib/expo/useExpoKeycloak.js +62 -0
- package/lib/expo/useExpoKeycloak.js.map +1 -0
- package/lib/expo/useTokenStorage.d.ts +36 -0
- package/lib/expo/useTokenStorage.js +166 -0
- package/lib/expo/useTokenStorage.js.map +1 -0
- package/lib/hooks/index.js +3 -9
- package/lib/hooks/index.js.map +1 -1
- package/lib/hooks/useAuthConfig.js +0 -2
- package/lib/hooks/useAuthConfig.js.map +1 -1
- package/lib/hooks/useCurrentRouteName.js +6 -8
- package/lib/hooks/useCurrentRouteName.js.map +1 -1
- package/lib/hooks/useKeycloak/index.d.ts +7 -4
- package/lib/hooks/useKeycloak/index.js +1 -7
- package/lib/hooks/useKeycloak/index.js.map +1 -1
- package/lib/hooks/useKeycloak/useKeycloak.js +45 -30
- package/lib/hooks/useKeycloak/useKeycloak.js.map +1 -1
- package/lib/hooks/useKeycloak/useKeycloak.native.d.ts +13 -3
- package/lib/hooks/useKeycloak/useKeycloak.native.js +61 -25
- package/lib/hooks/useKeycloak/useKeycloak.native.js.map +1 -1
- package/lib/hooks/useLogin.js +16 -25
- package/lib/hooks/useLogin.js.map +1 -1
- package/lib/index.js +4 -10
- package/lib/index.js.map +1 -1
- package/lib/provider/afterAuth.js +52 -52
- package/lib/provider/afterAuth.js.map +1 -1
- package/lib/provider/index.js +44 -43
- package/lib/provider/index.js.map +1 -1
- package/lib/provider/keycloakProvider.js +93 -114
- package/lib/provider/keycloakProvider.js.map +1 -1
- package/lib/provider/keycloakProvider.native.js +39 -15
- package/lib/provider/keycloakProvider.native.js.map +1 -1
- package/lib/state/index.js +3 -5
- package/lib/state/index.js.map +1 -1
- package/lib/tsconfig.build.tsbuildinfo +1 -1
- package/lib/types.js +2 -4
- package/lib/types.js.map +1 -1
- package/package.json +5 -4
- package/src/expo/ExpoKeycloakContext.ts +41 -0
- package/src/expo/ExpoKeycloakProvider.tsx +139 -0
- package/src/expo/NOTES +1 -0
- package/src/expo/const.ts +42 -0
- package/src/expo/helpers.ts +74 -0
- package/src/{@types/expoKeycloakAuth.d.ts → expo/index.ts} +6 -7
- package/src/expo/useExpoKeycloak.ts +44 -0
- package/src/expo/useTokenStorage.ts +168 -0
- package/src/hooks/useKeycloak/index.ts +11 -4
- package/src/hooks/useKeycloak/useKeycloak.native.ts +72 -8
- package/src/provider/keycloakProvider.native.tsx +8 -4
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* File Created: 08-11-2022 14:10:25
|
|
5
5
|
* Author: Clay Risser
|
|
6
6
|
* -----
|
|
7
|
-
* Last Modified:
|
|
7
|
+
* Last Modified: 26-11-2022 09:05:23
|
|
8
8
|
* Modified By: Clay Risser
|
|
9
9
|
* -----
|
|
10
10
|
* Risser Labs LLC (c) Copyright 2021 - 2022
|
|
@@ -22,27 +22,91 @@
|
|
|
22
22
|
* limitations under the License.
|
|
23
23
|
*/
|
|
24
24
|
|
|
25
|
-
import
|
|
26
|
-
import
|
|
25
|
+
import "core-js/actual/atob";
|
|
26
|
+
import "core-js/actual/escape";
|
|
27
|
+
import { AuthRequestPromptOptions, AuthSessionResult } from "expo-auth-session";
|
|
27
28
|
import { IKeycloak } from "./index";
|
|
29
|
+
import {
|
|
30
|
+
KeycloakResourceAccess,
|
|
31
|
+
KeycloakRoles,
|
|
32
|
+
KeycloakTokenParsed,
|
|
33
|
+
} from "keycloak-js";
|
|
34
|
+
import { MultiPlatform } from "multiplatform.one";
|
|
35
|
+
import { useExpoKeycloak } from "../../expo";
|
|
28
36
|
|
|
29
37
|
export function useKeycloak() {
|
|
30
38
|
if (MultiPlatform.isStorybook()) return { authenticated: true } as IKeycloak;
|
|
31
|
-
const { ready, login, isLoggedIn, token, logout } =
|
|
32
|
-
|
|
39
|
+
const { ready, login, isLoggedIn, token, logout, refreshToken } =
|
|
40
|
+
useExpoKeycloak();
|
|
41
|
+
const keycloak = new ExpoKeycloak(
|
|
42
|
+
ready,
|
|
43
|
+
isLoggedIn,
|
|
44
|
+
login,
|
|
45
|
+
logout,
|
|
46
|
+
token || undefined,
|
|
47
|
+
refreshToken || undefined
|
|
48
|
+
);
|
|
33
49
|
return keycloak as IKeycloak;
|
|
34
50
|
}
|
|
35
51
|
|
|
36
52
|
export class ExpoKeycloak implements IKeycloak {
|
|
37
53
|
authenticated?: boolean;
|
|
38
54
|
|
|
55
|
+
tokenParsed?: KeycloakTokenParsed;
|
|
56
|
+
|
|
57
|
+
refreshTokenParsed?: KeycloakTokenParsed;
|
|
58
|
+
|
|
59
|
+
subject?: string;
|
|
60
|
+
|
|
61
|
+
realmAccess?: KeycloakRoles;
|
|
62
|
+
|
|
63
|
+
resourceAccess?: KeycloakResourceAccess;
|
|
64
|
+
|
|
65
|
+
login: () => Promise<unknown> | unknown;
|
|
66
|
+
|
|
39
67
|
constructor(
|
|
40
68
|
ready: boolean,
|
|
41
|
-
isLoggedIn: boolean,
|
|
42
|
-
|
|
69
|
+
isLoggedIn: boolean | undefined,
|
|
70
|
+
login: (
|
|
71
|
+
options?: AuthRequestPromptOptions
|
|
72
|
+
) => Promise<AuthSessionResult | undefined>,
|
|
43
73
|
public logout: () => unknown,
|
|
44
|
-
public token?: string
|
|
74
|
+
public token?: string,
|
|
75
|
+
public refreshToken?: string
|
|
45
76
|
) {
|
|
46
77
|
if (ready) this.authenticated = isLoggedIn;
|
|
78
|
+
if (this.authenticated) {
|
|
79
|
+
if (this.token) this.tokenParsed = decodeToken(this.token);
|
|
80
|
+
if (this.refreshToken) {
|
|
81
|
+
this.refreshTokenParsed = decodeToken(this.refreshToken);
|
|
82
|
+
}
|
|
83
|
+
if (this.tokenParsed) {
|
|
84
|
+
this.subject = this.tokenParsed.sub;
|
|
85
|
+
this.realmAccess = this.tokenParsed.realm_access;
|
|
86
|
+
this.resourceAccess = this.tokenParsed.resource_access;
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
this.login = () => login();
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
function decodeToken(str: string) {
|
|
94
|
+
str = str.split(".")[1];
|
|
95
|
+
str = str.replace(/-/g, "+");
|
|
96
|
+
str = str.replace(/_/g, "/");
|
|
97
|
+
switch (str.length % 4) {
|
|
98
|
+
case 0:
|
|
99
|
+
break;
|
|
100
|
+
case 2:
|
|
101
|
+
str += "==";
|
|
102
|
+
break;
|
|
103
|
+
case 3:
|
|
104
|
+
str += "=";
|
|
105
|
+
break;
|
|
106
|
+
default:
|
|
107
|
+
throw "Invalid token";
|
|
47
108
|
}
|
|
109
|
+
str = decodeURIComponent(escape(atob(str)));
|
|
110
|
+
str = JSON.parse(str);
|
|
111
|
+
return str as unknown as KeycloakTokenParsed;
|
|
48
112
|
}
|
|
@@ -22,20 +22,24 @@
|
|
|
22
22
|
* limitations under the License.
|
|
23
23
|
*/
|
|
24
24
|
|
|
25
|
-
import { KeycloakProvider as ExpoKeycloakProvider } from "expo-keycloak-auth";
|
|
26
25
|
import React, { FC } from "react";
|
|
27
26
|
import type { KeycloakProviderProps } from "./keycloakProvider";
|
|
28
27
|
import { AfterAuth } from "./afterAuth";
|
|
28
|
+
import { ExpoKeycloakProvider } from "../expo";
|
|
29
|
+
import { KeycloakConfig } from "keycloak-js";
|
|
29
30
|
|
|
30
31
|
export const KeycloakProvider: FC<KeycloakProviderProps> = ({
|
|
31
32
|
children,
|
|
32
33
|
keycloakConfig,
|
|
33
|
-
}: KeycloakProviderProps
|
|
34
|
-
|
|
34
|
+
}: KeycloakProviderProps) => {
|
|
35
|
+
const clonedKeycloakConfig = {
|
|
36
|
+
...(keycloakConfig as Omit<KeycloakConfig, "baseUrl">),
|
|
37
|
+
url: keycloakConfig.baseUrl,
|
|
38
|
+
};
|
|
35
39
|
// @ts-ignore
|
|
36
40
|
delete keycloakConfig.baseUrl;
|
|
37
41
|
return (
|
|
38
|
-
<ExpoKeycloakProvider {...
|
|
42
|
+
<ExpoKeycloakProvider {...clonedKeycloakConfig}>
|
|
39
43
|
<AfterAuth>{children}</AfterAuth>
|
|
40
44
|
</ExpoKeycloakProvider>
|
|
41
45
|
);
|