UNPKG

7.41 kBPlain TextView Raw
1/*
2 * Copyright 2020 Inrupt Inc.
3 *
4 * Permission is hereby granted, free of charge, to any person obtaining a copy
5 * of this software and associated documentation files (the "Software"), to deal in
6 * the Software without restriction, including without limitation the rights to use,
7 * copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the
8 * Software, and to permit persons to whom the Software is furnished to do so,
9 * subject to the following conditions:
10 *
11 * The above copyright notice and this permission notice shall be included in
12 * all copies or substantial portions of the Software.
13 *
14 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
15 * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
16 * PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
17 * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
18 * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
19 * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
20 */
21
22/**
23 * @hidden
24 * @packageDocumentation
25 */
26
27/**
28 * Top Level core document. Responsible for setting up the dependency graph
29 */
30import "reflect-metadata";
31import { container as emptyContainer } from "tsyringe";
32import {
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";
45import StorageUtilityBrowser from "./storage/StorageUtility";
46import ClientAuthentication from "./ClientAuthentication";
47import OidcLoginHandler from "./login/oidc/OidcLoginHandler";
48import AggregateOidcHandler from "./login/oidc/AggregateOidcHandler";
49import AuthorizationCodeOidcHandler from "./login/oidc/oidcHandlers/AuthorizationCodeOidcHandler";
50import AuthorizationCodeWithPkceOidcHandler from "./login/oidc/oidcHandlers/AuthorizationCodeWithPkceOidcHandler";
51import ClientCredentialsOidcHandler from "./login/oidc/oidcHandlers/ClientCredentialsOidcHandler";
52import PrimaryDeviceOidcHandler from "./login/oidc/oidcHandlers/PrimaryDeviceOidcHandler";
53import SecondaryDeviceOidcHandler from "./login/oidc/oidcHandlers/SecondaryDeviceOidcHandler";
54import LegacyImplicitFlowOidcHandler from "./login/oidc/oidcHandlers/LegacyImplicitFlowOidcHandler";
55import RefreshTokenOidcHandler from "./login/oidc/oidcHandlers/RefreshTokenOidcHandler";
56import IssuerConfigFetcher from "./login/oidc/IssuerConfigFetcher";
57import { ImplicitRedirectHandler } from "./login/oidc/redirectHandler/ImplicitRedirectHandler";
58import { FallbackRedirectHandler } from "./login/oidc/redirectHandler/FallbackRedirectHandler";
59import GeneralLogoutHandler from "./logout/GeneralLogoutHandler";
60import { SessionInfoManager } from "./sessionInfo/SessionInfoManager";
61import { AuthCodeRedirectHandler } from "./login/oidc/redirectHandler/AuthCodeRedirectHandler";
62import AggregateRedirectHandler from "./login/oidc/redirectHandler/AggregateRedirectHandler";
63import BrowserStorage from "./storage/BrowserStorage";
64import TokenSaver, {
65 ITokenSaver,
66} from "./login/oidc/redirectHandler/TokenSaver";
67import Redirector from "./login/oidc/Redirector";
68import PopUpLoginHandler from "./login/popUp/PopUpLoginHandler";
69import AggregatePostPopUpLoginHandler from "./login/popUp/AggregatePostPopUpLoginHandler";
70import ClientRegistrar from "./login/oidc/ClientRegistrar";
71import TokenRefresher, {
72 ITokenRefresher,
73} from "./login/oidc/refresh/TokenRefresher";
74import TokenRequester, { ITokenRequester } from "./login/oidc/TokenRequester";
75import { ISessionManager, SessionManager } from "./SessionManager";
76import AggregateLoginHandler from "./login/AggregateLoginHandler";
77
78const container = emptyContainer;
79
80container.register<IStorageUtility>("storageUtility", {
81 useClass: StorageUtilityBrowser,
82});
83
84// Session
85container.register<ISessionInfoManager>("sessionInfoManager", {
86 useClass: SessionInfoManager,
87});
88container.register<ISessionManager>("sessionManager", {
89 useClass: SessionManager,
90});
91
92// Login
93container.register<ILoginHandler>("loginHandler", {
94 useClass: AggregateLoginHandler,
95});
96container.register<ILoginHandler>("loginHandlers", {
97 useClass: PopUpLoginHandler,
98});
99container.register<ILoginHandler>("loginHandlers", {
100 useClass: OidcLoginHandler,
101});
102
103container.register<ILoginHandler>("postPopUpLoginHandler", {
104 useClass: AggregatePostPopUpLoginHandler,
105});
106container.register<ILoginHandler>("postPopUpLoginHandlers", {
107 useClass: OidcLoginHandler,
108});
109
110// Login/OIDC
111container.register<IOidcHandler>("oidcHandler", {
112 useClass: AggregateOidcHandler,
113});
114container.register<IOidcHandler>("oidcHandlers", {
115 useClass: RefreshTokenOidcHandler,
116});
117
118container.register<IOidcHandler>("oidcHandlers", {
119 useClass: AuthorizationCodeOidcHandler,
120});
121container.register<IOidcHandler>("oidcHandlers", {
122 useClass: AuthorizationCodeWithPkceOidcHandler,
123});
124container.register<IOidcHandler>("oidcHandlers", {
125 useClass: LegacyImplicitFlowOidcHandler,
126});
127
128container.register<IOidcHandler>("oidcHandlers", {
129 useClass: ClientCredentialsOidcHandler,
130});
131container.register<IOidcHandler>("oidcHandlers", {
132 useClass: PrimaryDeviceOidcHandler,
133});
134container.register<IOidcHandler>("oidcHandlers", {
135 useClass: SecondaryDeviceOidcHandler,
136});
137
138container.register<IRedirector>("redirector", {
139 useClass: Redirector,
140});
141container.register<IClientRegistrar>("clientRegistrar", {
142 useClass: ClientRegistrar,
143});
144container.register<ITokenRequester>("tokenRequester", {
145 useClass: TokenRequester,
146});
147
148// Login/OIDC/redirectHandler
149container.register<IRedirectHandler>("redirectHandler", {
150 useClass: AggregateRedirectHandler,
151});
152container.register<IRedirectHandler>("redirectHandlers", {
153 useClass: AuthCodeRedirectHandler,
154});
155container.register<IRedirectHandler>("redirectHandlers", {
156 useClass: ImplicitRedirectHandler,
157});
158container.register<ITokenSaver>("tokenSaver", {
159 useClass: TokenSaver,
160});
161// This catch-all class will always be able to handle the
162// redirect IRI, so it must be registered last in the container
163container.register<IRedirectHandler>("redirectHandlers", {
164 useClass: FallbackRedirectHandler,
165});
166
167// Login/OIDC/Issuer
168container.register<IIssuerConfigFetcher>("issuerConfigFetcher", {
169 useClass: IssuerConfigFetcher,
170});
171
172// Login/OIDC/Refresh
173container.register<ITokenRefresher>("tokenRefresher", {
174 useClass: TokenRefresher,
175});
176
177// Logout
178container.register<ILogoutHandler>("logoutHandler", {
179 useClass: GeneralLogoutHandler,
180});
181
182/**
183 *
184 * @param dependencies
185 * @deprecated This function will be removed from the external API in an upcoming release.
186 */
187export 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}