1 |
|
2 |
|
3 |
|
4 |
|
5 |
|
6 |
|
7 |
|
8 |
|
9 |
|
10 |
|
11 |
|
12 |
|
13 |
|
14 |
|
15 |
|
16 |
|
17 |
|
18 |
|
19 |
|
20 |
|
21 |
|
22 |
|
23 |
|
24 |
|
25 |
|
26 |
|
27 |
|
28 |
|
29 |
|
30 | import "reflect-metadata";
|
31 | import { container as emptyContainer } from "tsyringe";
|
32 | import {
|
33 | IClientRegistrar,
|
34 | IIssuerConfigFetcher,
|
35 | ILoginHandler,
|
36 | ILogoutHandler,
|
37 | IOidcHandler,
|
38 | IRedirector,
|
39 | IRedirectHandler,
|
40 | IStorage,
|
41 | IStorageUtility,
|
42 | ISessionInfoManager,
|
43 | InMemoryStorage,
|
44 | } from "@inrupt/solid-client-authn-core";
|
45 | import StorageUtilityBrowser from "./storage/StorageUtility";
|
46 | import ClientAuthentication from "./ClientAuthentication";
|
47 | import OidcLoginHandler from "./login/oidc/OidcLoginHandler";
|
48 | import AggregateOidcHandler from "./login/oidc/AggregateOidcHandler";
|
49 | import AuthorizationCodeOidcHandler from "./login/oidc/oidcHandlers/AuthorizationCodeOidcHandler";
|
50 | import AuthorizationCodeWithPkceOidcHandler from "./login/oidc/oidcHandlers/AuthorizationCodeWithPkceOidcHandler";
|
51 | import ClientCredentialsOidcHandler from "./login/oidc/oidcHandlers/ClientCredentialsOidcHandler";
|
52 | import PrimaryDeviceOidcHandler from "./login/oidc/oidcHandlers/PrimaryDeviceOidcHandler";
|
53 | import SecondaryDeviceOidcHandler from "./login/oidc/oidcHandlers/SecondaryDeviceOidcHandler";
|
54 | import LegacyImplicitFlowOidcHandler from "./login/oidc/oidcHandlers/LegacyImplicitFlowOidcHandler";
|
55 | import RefreshTokenOidcHandler from "./login/oidc/oidcHandlers/RefreshTokenOidcHandler";
|
56 | import IssuerConfigFetcher from "./login/oidc/IssuerConfigFetcher";
|
57 | import { ImplicitRedirectHandler } from "./login/oidc/redirectHandler/ImplicitRedirectHandler";
|
58 | import { FallbackRedirectHandler } from "./login/oidc/redirectHandler/FallbackRedirectHandler";
|
59 | import GeneralLogoutHandler from "./logout/GeneralLogoutHandler";
|
60 | import { SessionInfoManager } from "./sessionInfo/SessionInfoManager";
|
61 | import { AuthCodeRedirectHandler } from "./login/oidc/redirectHandler/AuthCodeRedirectHandler";
|
62 | import AggregateRedirectHandler from "./login/oidc/redirectHandler/AggregateRedirectHandler";
|
63 | import BrowserStorage from "./storage/BrowserStorage";
|
64 | import TokenSaver, {
|
65 | ITokenSaver,
|
66 | } from "./login/oidc/redirectHandler/TokenSaver";
|
67 | import Redirector from "./login/oidc/Redirector";
|
68 | import PopUpLoginHandler from "./login/popUp/PopUpLoginHandler";
|
69 | import AggregatePostPopUpLoginHandler from "./login/popUp/AggregatePostPopUpLoginHandler";
|
70 | import ClientRegistrar from "./login/oidc/ClientRegistrar";
|
71 | import TokenRefresher, {
|
72 | ITokenRefresher,
|
73 | } from "./login/oidc/refresh/TokenRefresher";
|
74 | import TokenRequester, { ITokenRequester } from "./login/oidc/TokenRequester";
|
75 | import { ISessionManager, SessionManager } from "./SessionManager";
|
76 | import AggregateLoginHandler from "./login/AggregateLoginHandler";
|
77 |
|
78 | const container = emptyContainer;
|
79 |
|
80 | container.register<IStorageUtility>("storageUtility", {
|
81 | useClass: StorageUtilityBrowser,
|
82 | });
|
83 |
|
84 |
|
85 | container.register<ISessionInfoManager>("sessionInfoManager", {
|
86 | useClass: SessionInfoManager,
|
87 | });
|
88 | container.register<ISessionManager>("sessionManager", {
|
89 | useClass: SessionManager,
|
90 | });
|
91 |
|
92 |
|
93 | container.register<ILoginHandler>("loginHandler", {
|
94 | useClass: AggregateLoginHandler,
|
95 | });
|
96 | container.register<ILoginHandler>("loginHandlers", {
|
97 | useClass: PopUpLoginHandler,
|
98 | });
|
99 | container.register<ILoginHandler>("loginHandlers", {
|
100 | useClass: OidcLoginHandler,
|
101 | });
|
102 |
|
103 | container.register<ILoginHandler>("postPopUpLoginHandler", {
|
104 | useClass: AggregatePostPopUpLoginHandler,
|
105 | });
|
106 | container.register<ILoginHandler>("postPopUpLoginHandlers", {
|
107 | useClass: OidcLoginHandler,
|
108 | });
|
109 |
|
110 |
|
111 | container.register<IOidcHandler>("oidcHandler", {
|
112 | useClass: AggregateOidcHandler,
|
113 | });
|
114 | container.register<IOidcHandler>("oidcHandlers", {
|
115 | useClass: RefreshTokenOidcHandler,
|
116 | });
|
117 |
|
118 | container.register<IOidcHandler>("oidcHandlers", {
|
119 | useClass: AuthorizationCodeOidcHandler,
|
120 | });
|
121 | container.register<IOidcHandler>("oidcHandlers", {
|
122 | useClass: AuthorizationCodeWithPkceOidcHandler,
|
123 | });
|
124 | container.register<IOidcHandler>("oidcHandlers", {
|
125 | useClass: LegacyImplicitFlowOidcHandler,
|
126 | });
|
127 |
|
128 | container.register<IOidcHandler>("oidcHandlers", {
|
129 | useClass: ClientCredentialsOidcHandler,
|
130 | });
|
131 | container.register<IOidcHandler>("oidcHandlers", {
|
132 | useClass: PrimaryDeviceOidcHandler,
|
133 | });
|
134 | container.register<IOidcHandler>("oidcHandlers", {
|
135 | useClass: SecondaryDeviceOidcHandler,
|
136 | });
|
137 |
|
138 | container.register<IRedirector>("redirector", {
|
139 | useClass: Redirector,
|
140 | });
|
141 | container.register<IClientRegistrar>("clientRegistrar", {
|
142 | useClass: ClientRegistrar,
|
143 | });
|
144 | container.register<ITokenRequester>("tokenRequester", {
|
145 | useClass: TokenRequester,
|
146 | });
|
147 |
|
148 |
|
149 | container.register<IRedirectHandler>("redirectHandler", {
|
150 | useClass: AggregateRedirectHandler,
|
151 | });
|
152 | container.register<IRedirectHandler>("redirectHandlers", {
|
153 | useClass: AuthCodeRedirectHandler,
|
154 | });
|
155 | container.register<IRedirectHandler>("redirectHandlers", {
|
156 | useClass: ImplicitRedirectHandler,
|
157 | });
|
158 | container.register<ITokenSaver>("tokenSaver", {
|
159 | useClass: TokenSaver,
|
160 | });
|
161 |
|
162 |
|
163 | container.register<IRedirectHandler>("redirectHandlers", {
|
164 | useClass: FallbackRedirectHandler,
|
165 | });
|
166 |
|
167 |
|
168 | container.register<IIssuerConfigFetcher>("issuerConfigFetcher", {
|
169 | useClass: IssuerConfigFetcher,
|
170 | });
|
171 |
|
172 |
|
173 | container.register<ITokenRefresher>("tokenRefresher", {
|
174 | useClass: TokenRefresher,
|
175 | });
|
176 |
|
177 |
|
178 | container.register<ILogoutHandler>("logoutHandler", {
|
179 | useClass: GeneralLogoutHandler,
|
180 | });
|
181 |
|
182 |
|
183 |
|
184 |
|
185 |
|
186 |
|
187 | export function getClientAuthenticationWithDependencies(dependencies: {
|
188 | secureStorage?: IStorage;
|
189 | insecureStorage?: IStorage;
|
190 | }): ClientAuthentication {
|
191 | const secureStorage = dependencies.secureStorage || new InMemoryStorage();
|
192 | const insecureStorage = dependencies.insecureStorage || new BrowserStorage();
|
193 |
|
194 | const authenticatorContainer = container.createChildContainer();
|
195 | authenticatorContainer.register<IStorage>("secureStorage", {
|
196 | useValue: secureStorage,
|
197 | });
|
198 | authenticatorContainer.register<IStorage>("insecureStorage", {
|
199 | useValue: insecureStorage,
|
200 | });
|
201 | return authenticatorContainer.resolve(ClientAuthentication);
|
202 | }
|