@affinidi/cli 2.0.0-beta.9 → 2.1.0
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/README.md +139 -55
- package/dist/commands/generate/app.d.ts +5 -0
- package/dist/commands/generate/app.js +54 -59
- package/dist/commands/generate/app.js.map +1 -1
- package/dist/commands/iam/add-principal.js +8 -9
- package/dist/commands/iam/add-principal.js.map +1 -1
- package/dist/commands/iam/get-policies.js +8 -9
- package/dist/commands/iam/get-policies.js.map +1 -1
- package/dist/commands/iam/list-principals.js +1 -2
- package/dist/commands/iam/list-principals.js.map +1 -1
- package/dist/commands/iam/remove-principal.js +8 -9
- package/dist/commands/iam/remove-principal.js.map +1 -1
- package/dist/commands/iam/update-policies.js +18 -17
- package/dist/commands/iam/update-policies.js.map +1 -1
- package/dist/commands/login/add-user-to-group.d.ts +1 -1
- package/dist/commands/login/add-user-to-group.js +9 -10
- package/dist/commands/login/add-user-to-group.js.map +1 -1
- package/dist/commands/login/create-config.js +13 -14
- package/dist/commands/login/create-config.js.map +1 -1
- package/dist/commands/login/create-group.js +3 -4
- package/dist/commands/login/create-group.js.map +1 -1
- package/dist/commands/login/delete-config.js +5 -6
- package/dist/commands/login/delete-config.js.map +1 -1
- package/dist/commands/login/delete-group.js +5 -6
- package/dist/commands/login/delete-group.js.map +1 -1
- package/dist/commands/login/export-configs.d.ts +10 -0
- package/dist/commands/login/export-configs.js +67 -0
- package/dist/commands/login/export-configs.js.map +1 -0
- package/dist/commands/login/export-groups.d.ts +10 -0
- package/dist/commands/login/export-groups.js +64 -0
- package/dist/commands/login/export-groups.js.map +1 -0
- package/dist/commands/login/get-config.js +5 -6
- package/dist/commands/login/get-config.js.map +1 -1
- package/dist/commands/login/get-group.js +5 -6
- package/dist/commands/login/get-group.js.map +1 -1
- package/dist/commands/login/import-configs.d.ts +12 -0
- package/dist/commands/login/import-configs.js +70 -0
- package/dist/commands/login/import-configs.js.map +1 -0
- package/dist/commands/login/import-groups.d.ts +12 -0
- package/dist/commands/login/import-groups.js +51 -0
- package/dist/commands/login/import-groups.js.map +1 -0
- package/dist/commands/login/list-configs.js +1 -2
- package/dist/commands/login/list-configs.js.map +1 -1
- package/dist/commands/login/list-groups.js +1 -2
- package/dist/commands/login/list-groups.js.map +1 -1
- package/dist/commands/login/list-users-in-group.js +5 -6
- package/dist/commands/login/list-users-in-group.js.map +1 -1
- package/dist/commands/login/remove-user-from-group.d.ts +2 -2
- package/dist/commands/login/remove-user-from-group.js +10 -11
- package/dist/commands/login/remove-user-from-group.js.map +1 -1
- package/dist/commands/login/update-config.js +11 -12
- package/dist/commands/login/update-config.js.map +1 -1
- package/dist/commands/project/create-project.js +8 -9
- package/dist/commands/project/create-project.js.map +1 -1
- package/dist/commands/project/get-active-project.js +5 -6
- package/dist/commands/project/get-active-project.js.map +1 -1
- package/dist/commands/project/list-projects.js +2 -3
- package/dist/commands/project/list-projects.js.map +1 -1
- package/dist/commands/project/select-project.js +13 -20
- package/dist/commands/project/select-project.js.map +1 -1
- package/dist/commands/start.d.ts +0 -3
- package/dist/commands/start.js +17 -22
- package/dist/commands/start.js.map +1 -1
- package/dist/commands/stop.js +5 -4
- package/dist/commands/stop.js.map +1 -1
- package/dist/commands/token/create-token.d.ts +2 -2
- package/dist/commands/token/create-token.js +8 -9
- package/dist/commands/token/create-token.js.map +1 -1
- package/dist/commands/token/delete-token.js +5 -6
- package/dist/commands/token/delete-token.js.map +1 -1
- package/dist/commands/token/get-token.d.ts +2 -2
- package/dist/commands/token/get-token.js +5 -6
- package/dist/commands/token/get-token.js.map +1 -1
- package/dist/commands/token/list-tokens.d.ts +2 -2
- package/dist/commands/token/list-tokens.js +3 -4
- package/dist/commands/token/list-tokens.js.map +1 -1
- package/dist/commands/token/update-token.d.ts +2 -2
- package/dist/commands/token/update-token.js +8 -9
- package/dist/commands/token/update-token.js.map +1 -1
- package/dist/commands/whoami.d.ts +1 -4
- package/dist/commands/whoami.js +5 -22
- package/dist/commands/whoami.js.map +1 -1
- package/dist/common/constants.d.ts +5 -11
- package/dist/common/constants.js +7 -15
- package/dist/common/constants.js.map +1 -1
- package/dist/{helpers/generate-error-message.js → common/error-messages.js} +1 -1
- package/dist/common/error-messages.js.map +1 -0
- package/dist/{helpers/prompt-required-flags.js → common/prompts.js} +5 -5
- package/dist/common/prompts.js.map +1 -0
- package/dist/{helpers/input-length-validation.d.ts → common/validators.d.ts} +1 -1
- package/dist/{helpers/input-length-validation.js → common/validators.js} +4 -4
- package/dist/common/validators.js.map +1 -0
- package/dist/helpers/app.d.ts +11 -1
- package/dist/helpers/app.js +84 -10
- package/dist/helpers/app.js.map +1 -1
- package/dist/helpers/jwk.d.ts +2 -0
- package/dist/helpers/jwk.js +21 -1
- package/dist/helpers/jwk.js.map +1 -1
- package/dist/services/affinidi/auth/auth-result-page.d.ts +1 -0
- package/dist/services/affinidi/auth/{providers/error-login-page.js → auth-result-page.js} +6 -7
- package/dist/services/affinidi/auth/auth-result-page.js.map +1 -0
- package/dist/services/affinidi/auth/bff-auth-provider.d.ts +30 -0
- package/dist/services/affinidi/auth/bff-auth-provider.js +136 -0
- package/dist/services/affinidi/auth/bff-auth-provider.js.map +1 -0
- package/dist/services/affinidi/auth/types.d.ts +11 -0
- package/dist/services/affinidi/auth/types.js.map +1 -0
- package/dist/services/affinidi/bff-service.d.ts +32 -0
- package/dist/services/affinidi/bff-service.js +195 -0
- package/dist/services/affinidi/bff-service.js.map +1 -0
- package/dist/services/affinidi/bff-service.types.d.ts +38 -0
- package/dist/services/affinidi/{config.js → bff-service.types.js} +1 -1
- package/dist/services/affinidi/bff-service.types.js.map +1 -0
- package/dist/services/affinidi/{errors/index.js → errors.js} +18 -9
- package/dist/services/affinidi/errors.js.map +1 -0
- package/dist/services/affinidi/iam/iam.api.d.ts +120 -105
- package/dist/services/affinidi/iam/iam.api.js +39 -118
- package/dist/services/affinidi/iam/iam.api.js.map +1 -1
- package/dist/services/affinidi/iam/index.d.ts +15 -15
- package/dist/services/affinidi/iam/index.js +48 -120
- package/dist/services/affinidi/iam/index.js.map +1 -1
- package/dist/services/affinidi/logger/console-logger-adapter.js.map +1 -0
- package/dist/services/affinidi/logger/index.js.map +1 -0
- package/dist/services/affinidi/logger/logger-adapter.js.map +1 -0
- package/dist/services/affinidi/vp-adapter/index.d.ts +12 -12
- package/dist/services/affinidi/vp-adapter/index.js +49 -70
- package/dist/services/affinidi/vp-adapter/index.js.map +1 -1
- package/dist/services/affinidi/vp-adapter/vp-adapter.api.d.ts +314 -54
- package/dist/services/affinidi/vp-adapter/vp-adapter.api.js +81 -15
- package/dist/services/affinidi/vp-adapter/vp-adapter.api.js.map +1 -1
- package/dist/services/credentials-vault.d.ts +20 -0
- package/dist/services/credentials-vault.js +59 -0
- package/dist/services/credentials-vault.js.map +1 -0
- package/dist/services/env-config.d.ts +35 -0
- package/dist/services/env-config.js +39 -0
- package/dist/services/env-config.js.map +1 -0
- package/package.json +7 -15
- package/dist/helpers/generate-error-message.js.map +0 -1
- package/dist/helpers/index.d.ts +0 -3
- package/dist/helpers/index.js +0 -11
- package/dist/helpers/index.js.map +0 -1
- package/dist/helpers/input-length-validation.js.map +0 -1
- package/dist/helpers/prompt-required-flags.js.map +0 -1
- package/dist/hooks/check/check-version.d.ts +0 -17
- package/dist/hooks/check/check-version.js +0 -24
- package/dist/hooks/check/check-version.js.map +0 -1
- package/dist/services/affinidi/adapters/index.d.ts +0 -1
- package/dist/services/affinidi/adapters/index.js +0 -5
- package/dist/services/affinidi/adapters/index.js.map +0 -1
- package/dist/services/affinidi/adapters/logger/console-logger-adapter.js.map +0 -1
- package/dist/services/affinidi/adapters/logger/index.js.map +0 -1
- package/dist/services/affinidi/adapters/logger/logger-adapter.js.map +0 -1
- package/dist/services/affinidi/auth/index.d.ts +0 -62
- package/dist/services/affinidi/auth/index.js +0 -131
- package/dist/services/affinidi/auth/index.js.map +0 -1
- package/dist/services/affinidi/auth/providers/config.d.ts +0 -15
- package/dist/services/affinidi/auth/providers/config.js +0 -33
- package/dist/services/affinidi/auth/providers/config.js.map +0 -1
- package/dist/services/affinidi/auth/providers/error-login-page.d.ts +0 -1
- package/dist/services/affinidi/auth/providers/error-login-page.js.map +0 -1
- package/dist/services/affinidi/auth/providers/index.d.ts +0 -3
- package/dist/services/affinidi/auth/providers/index.js +0 -8
- package/dist/services/affinidi/auth/providers/index.js.map +0 -1
- package/dist/services/affinidi/auth/providers/ory-pkce.d.ts +0 -47
- package/dist/services/affinidi/auth/providers/ory-pkce.js +0 -216
- package/dist/services/affinidi/auth/providers/ory-pkce.js.map +0 -1
- package/dist/services/affinidi/auth/providers/ory.d.ts +0 -22
- package/dist/services/affinidi/auth/providers/ory.js +0 -154
- package/dist/services/affinidi/auth/providers/ory.js.map +0 -1
- package/dist/services/affinidi/auth/providers/successful-login-page.d.ts +0 -1
- package/dist/services/affinidi/auth/providers/successful-login-page.js +0 -110
- package/dist/services/affinidi/auth/providers/successful-login-page.js.map +0 -1
- package/dist/services/affinidi/auth/providers/types.d.ts +0 -10
- package/dist/services/affinidi/auth/providers/types.js.map +0 -1
- package/dist/services/affinidi/auth/token.d.ts +0 -54
- package/dist/services/affinidi/auth/token.js +0 -121
- package/dist/services/affinidi/auth/token.js.map +0 -1
- package/dist/services/affinidi/config.d.ts +0 -12
- package/dist/services/affinidi/config.js.map +0 -1
- package/dist/services/affinidi/errors/index.js.map +0 -1
- package/dist/services/affinidi/index.d.ts +0 -24
- package/dist/services/affinidi/index.js +0 -52
- package/dist/services/affinidi/index.js.map +0 -1
- package/dist/services/config/index.d.ts +0 -36
- package/dist/services/config/index.js +0 -160
- package/dist/services/config/index.js.map +0 -1
- package/dist/services/index.d.ts +0 -1
- package/dist/services/index.js +0 -6
- package/dist/services/index.js.map +0 -1
- package/dist/services/urls.d.ts +0 -2
- package/dist/services/urls.js +0 -12
- package/dist/services/urls.js.map +0 -1
- /package/dist/{helpers/generate-error-message.d.ts → common/error-messages.d.ts} +0 -0
- /package/dist/{helpers/prompt-required-flags.d.ts → common/prompts.d.ts} +0 -0
- /package/dist/services/affinidi/auth/{providers/types.js → types.js} +0 -0
- /package/dist/services/affinidi/{errors/index.d.ts → errors.d.ts} +0 -0
- /package/dist/services/affinidi/{adapters/logger → logger}/console-logger-adapter.d.ts +0 -0
- /package/dist/services/affinidi/{adapters/logger → logger}/console-logger-adapter.js +0 -0
- /package/dist/services/affinidi/{adapters/logger → logger}/index.d.ts +0 -0
- /package/dist/services/affinidi/{adapters/logger → logger}/index.js +0 -0
- /package/dist/services/affinidi/{adapters/logger → logger}/logger-adapter.d.ts +0 -0
- /package/dist/services/affinidi/{adapters/logger → logger}/logger-adapter.js +0 -0
|
@@ -1,131 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.Auth = void 0;
|
|
4
|
-
const tslib_1 = require("tslib");
|
|
5
|
-
const process_1 = tslib_1.__importDefault(require("process"));
|
|
6
|
-
const errors_1 = require("@oclif/core/lib/errors");
|
|
7
|
-
const chalk_1 = tslib_1.__importDefault(require("chalk"));
|
|
8
|
-
const providers_1 = require("./providers");
|
|
9
|
-
const token_1 = require("./token");
|
|
10
|
-
const iam_1 = require("../iam");
|
|
11
|
-
const DEFAULT_PROJECT_NAME = 'Default Project';
|
|
12
|
-
/**
|
|
13
|
-
* A class representing an authentication model that implements the AuthSDK interface.
|
|
14
|
-
* It provides functionalities to authenticate, fetch user projects, and log out.
|
|
15
|
-
*/
|
|
16
|
-
class Auth {
|
|
17
|
-
/**
|
|
18
|
-
* Construct an Auth instance.
|
|
19
|
-
*
|
|
20
|
-
* @param {AuthProviderConfig} config - The configuration object for the AuthProvider.
|
|
21
|
-
*/
|
|
22
|
-
constructor(config) {
|
|
23
|
-
this.logger = config.logger;
|
|
24
|
-
// Ory project for prod uses PKCE, meanwhile for dev - doesn't
|
|
25
|
-
this.authProvider =
|
|
26
|
-
process_1.default.env.AFFINIDI_CLI_ENVIRONMENT === 'dev' ? new providers_1.OryAuthenticator(config) : new providers_1.OryAuthenticatorPKCE(config);
|
|
27
|
-
}
|
|
28
|
-
async authenticate() {
|
|
29
|
-
this.logger.debug('Authenticating');
|
|
30
|
-
const accessToken = await this.authProvider.authenticate();
|
|
31
|
-
this.logger.debug(`Authenticated successfully!`);
|
|
32
|
-
return accessToken;
|
|
33
|
-
}
|
|
34
|
-
async fetchProjects(accessToken) {
|
|
35
|
-
this.logger.debug('Fetching the list of projects');
|
|
36
|
-
const projects = await iam_1.iamService.listProjects(accessToken);
|
|
37
|
-
this.logger.debug(`Successfully fetched the list of projects`);
|
|
38
|
-
this.logger.debug(`Projects: ${JSON.stringify(projects)}`);
|
|
39
|
-
return projects;
|
|
40
|
-
}
|
|
41
|
-
getActiveProject(projects) {
|
|
42
|
-
const savedProjectId = token_1.tokenService.getProjectToken()?.projectId;
|
|
43
|
-
this.logger.debug(`Saved projectId: ${savedProjectId}`);
|
|
44
|
-
const savedProject = savedProjectId && projects.find((project) => project.id === savedProjectId);
|
|
45
|
-
return savedProject || projects[0];
|
|
46
|
-
}
|
|
47
|
-
async createProject(accessToken) {
|
|
48
|
-
this.logger.debug(`User doesn't have any project. Creating a project with default name: ${DEFAULT_PROJECT_NAME}`);
|
|
49
|
-
const project = await iam_1.iamService.createProject(accessToken, {
|
|
50
|
-
name: DEFAULT_PROJECT_NAME,
|
|
51
|
-
});
|
|
52
|
-
this.logger.debug(`Default project successfully created: ${JSON.stringify(project)}`);
|
|
53
|
-
return project;
|
|
54
|
-
}
|
|
55
|
-
async createProjectScopedToken(accessToken, projectId) {
|
|
56
|
-
this.logger.debug(`Creating a project-scoped token for project ${chalk_1.default.underline(projectId)}`);
|
|
57
|
-
const projectScopedToken = await iam_1.iamService.createProjectScopedToken(accessToken, projectId);
|
|
58
|
-
this.logger.debug(`project-scoped token for project ${chalk_1.default.underline(projectId)} has been successfully created`);
|
|
59
|
-
return projectScopedToken;
|
|
60
|
-
}
|
|
61
|
-
/**
|
|
62
|
-
* Authenticate a user and return an object containing the user's active project,
|
|
63
|
-
* a list of the user's projects, the user's principalId, and a project-scoped token.
|
|
64
|
-
*
|
|
65
|
-
* @returns {Promise<AuthResult>} - A Promise that resolves to an AuthResult object.
|
|
66
|
-
* @throws Will throw an error if the authentication fails.
|
|
67
|
-
*/
|
|
68
|
-
async login(param) {
|
|
69
|
-
const { projectId, userAccessToken } = param;
|
|
70
|
-
const accessToken = (userAccessToken ?? (await this.authenticate()));
|
|
71
|
-
if (!param.hideProjectHints) {
|
|
72
|
-
this.logger.info('\nSetting your active project...');
|
|
73
|
-
}
|
|
74
|
-
const principal = await iam_1.iamService.whoAmI(accessToken);
|
|
75
|
-
let projects = await this.fetchProjects(accessToken);
|
|
76
|
-
let activeProject;
|
|
77
|
-
// check if specific projectId is provided
|
|
78
|
-
if (projectId) {
|
|
79
|
-
activeProject = projects.find((project) => project.id === projectId);
|
|
80
|
-
if (!activeProject) {
|
|
81
|
-
throw new errors_1.CLIError(`Cannot find project with id ${chalk_1.default.underline(projectId)}. Available projects are ${JSON.stringify(projects)}`);
|
|
82
|
-
}
|
|
83
|
-
}
|
|
84
|
-
// choose project from available list
|
|
85
|
-
// NOTE: Show project hints only if user has more than 1 project.
|
|
86
|
-
if (!activeProject && projects.length > 0) {
|
|
87
|
-
activeProject = this.getActiveProject(projects);
|
|
88
|
-
}
|
|
89
|
-
// no project available, creating one.
|
|
90
|
-
if (!activeProject) {
|
|
91
|
-
activeProject = await this.createProject(accessToken);
|
|
92
|
-
this.logger.info(`\nCreated default project with ID ${chalk_1.default.underline(activeProject.id)}`);
|
|
93
|
-
projects = [activeProject];
|
|
94
|
-
}
|
|
95
|
-
const projectScopedToken = await this.createProjectScopedToken(accessToken, activeProject.id);
|
|
96
|
-
token_1.tokenService.setProjectToken(projectScopedToken, activeProject.id, activeProject.name);
|
|
97
|
-
token_1.tokenService.setPrincipal(principal);
|
|
98
|
-
if (!param.hideProjectHints) {
|
|
99
|
-
this.logger.info(`\nYour active project has been set to the project ${chalk_1.default.underline(activeProject.name)} with ID ${chalk_1.default.underline(activeProject.id)}` +
|
|
100
|
-
'\n\nIf you want to change the active project, please follow these steps:' +
|
|
101
|
-
`\n\n💡 To list all your projects run: ${chalk_1.default.inverse('affinidi project list-projects')}` +
|
|
102
|
-
`\n\n💡 To change the active project run: ${chalk_1.default.inverse('affinidi project select-project -i <project-id>')}\n`);
|
|
103
|
-
}
|
|
104
|
-
return {
|
|
105
|
-
projectScopedToken: projectScopedToken.accessToken,
|
|
106
|
-
activeProject,
|
|
107
|
-
principal,
|
|
108
|
-
projects,
|
|
109
|
-
};
|
|
110
|
-
}
|
|
111
|
-
/**
|
|
112
|
-
* Logs out the user.
|
|
113
|
-
*
|
|
114
|
-
* @returns {Promise<void>} - A Promise that resolves when the logout operation has completed.
|
|
115
|
-
* @throws Will throw an error if the logout operation fails.
|
|
116
|
-
*/
|
|
117
|
-
async logout() {
|
|
118
|
-
return this.authProvider.logout();
|
|
119
|
-
}
|
|
120
|
-
/**
|
|
121
|
-
* Returns PrincipalId
|
|
122
|
-
*
|
|
123
|
-
* @returns {string} - A value of PrincipalId
|
|
124
|
-
*/
|
|
125
|
-
getPrincipalString() {
|
|
126
|
-
const principal = token_1.tokenService.getPrincipal();
|
|
127
|
-
return `${principal.principalType}/${principal.principalId}`;
|
|
128
|
-
}
|
|
129
|
-
}
|
|
130
|
-
exports.Auth = Auth;
|
|
131
|
-
//# sourceMappingURL=index.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/services/affinidi/auth/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
export declare const isOryAuthCallbackPortInUse: () => Promise<boolean>;
|
|
2
|
-
export declare const config: {
|
|
3
|
-
redirectHost: string;
|
|
4
|
-
expressPort: number;
|
|
5
|
-
redirectPath: string;
|
|
6
|
-
redirectTimeoutMs: number;
|
|
7
|
-
codeChallengeMethod: string;
|
|
8
|
-
stateBytes: number;
|
|
9
|
-
PKCEBytes: number;
|
|
10
|
-
scope: string;
|
|
11
|
-
getSSOMessage: (ssoUrl: string) => string;
|
|
12
|
-
successHTML: string;
|
|
13
|
-
erroredLoginPage: (title?: string, context?: string) => string;
|
|
14
|
-
oryAuthCallbackPortUnavailableMessage: string;
|
|
15
|
-
};
|
|
@@ -1,33 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.config = exports.isOryAuthCallbackPortInUse = void 0;
|
|
4
|
-
const tslib_1 = require("tslib");
|
|
5
|
-
const chalk_1 = tslib_1.__importDefault(require("chalk"));
|
|
6
|
-
const tcp_port_used_1 = require("tcp-port-used");
|
|
7
|
-
const error_login_page_1 = require("./error-login-page");
|
|
8
|
-
const successful_login_page_1 = require("./successful-login-page");
|
|
9
|
-
const oryAuthCallbackPort = 2777;
|
|
10
|
-
const isOryAuthCallbackPortInUse = async () => {
|
|
11
|
-
return (0, tcp_port_used_1.check)(oryAuthCallbackPort);
|
|
12
|
-
};
|
|
13
|
-
exports.isOryAuthCallbackPortInUse = isOryAuthCallbackPortInUse;
|
|
14
|
-
exports.config = {
|
|
15
|
-
redirectHost: 'http://127.0.0.1',
|
|
16
|
-
expressPort: oryAuthCallbackPort,
|
|
17
|
-
redirectPath: '/callback',
|
|
18
|
-
redirectTimeoutMs: 5 * 60 * 1000,
|
|
19
|
-
codeChallengeMethod: 'S256',
|
|
20
|
-
stateBytes: 32,
|
|
21
|
-
PKCEBytes: 64,
|
|
22
|
-
scope: 'openid offline_access',
|
|
23
|
-
getSSOMessage: (ssoUrl) => {
|
|
24
|
-
return (`\nAttempting to automatically open the SSO authorization page in your default browser.\n` +
|
|
25
|
-
`\nIf the browser doesn't open automatically, or if your default browser isn't Google Chrome, please open the following URL in the Chrome browser:\n` +
|
|
26
|
-
`\n${chalk_1.default.underline(ssoUrl)}\n`);
|
|
27
|
-
},
|
|
28
|
-
successHTML: successful_login_page_1.successfulLoginPage,
|
|
29
|
-
erroredLoginPage: error_login_page_1.erroredLoginPage,
|
|
30
|
-
oryAuthCallbackPortUnavailableMessage: `\n💥 Port [${oryAuthCallbackPort}] is unavailable. Affinidi CLI is currently relying on it.\n` +
|
|
31
|
-
`Please close the process that is using port [${oryAuthCallbackPort}] and try again.`,
|
|
32
|
-
};
|
|
33
|
-
//# sourceMappingURL=config.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../../../../src/services/affinidi/auth/providers/config.ts"],"names":[],"mappings":";;;;AAAA,0DAAyB;AACzB,iDAAqC;AACrC,yDAAqD;AACrD,mEAA6D;AAE7D,MAAM,mBAAmB,GAAG,IAAI,CAAA;AAEzB,MAAM,0BAA0B,GAAG,KAAK,IAAI,EAAE;IACnD,OAAO,IAAA,qBAAK,EAAC,mBAAmB,CAAC,CAAA;AACnC,CAAC,CAAA;AAFY,QAAA,0BAA0B,8BAEtC;AAEY,QAAA,MAAM,GAAG;IACpB,YAAY,EAAE,kBAAkB;IAChC,WAAW,EAAE,mBAAmB;IAChC,YAAY,EAAE,WAAW;IACzB,iBAAiB,EAAE,CAAC,GAAG,EAAE,GAAG,IAAI;IAEhC,mBAAmB,EAAE,MAAM;IAC3B,UAAU,EAAE,EAAE;IACd,SAAS,EAAE,EAAE;IACb,KAAK,EAAE,uBAAuB;IAE9B,aAAa,EAAE,CAAC,MAAc,EAAE,EAAE;QAChC,OAAO,CACL,0FAA0F;YAC1F,qJAAqJ;YACrJ,KAAK,eAAK,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CACjC,CAAA;IACH,CAAC;IACD,WAAW,EAAE,2CAAmB;IAChC,gBAAgB,EAAE,mCAAgB;IAClC,qCAAqC,EACnC,cAAc,mBAAmB,8DAA8D;QAC/F,gDAAgD,mBAAmB,kBAAkB;CACxF,CAAA"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export declare const erroredLoginPage: (title?: string, context?: string) => string;
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"error-login-page.js","sourceRoot":"","sources":["../../../../../src/services/affinidi/auth/providers/error-login-page.ts"],"names":[],"mappings":";;;AAAO,MAAM,gBAAgB,GAAG,CAAC,KAAK,GAAG,OAAO,EAAE,OAAO,GAAG,mBAAmB,EAAE,EAAE,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;YAgGxE,KAAK;;;UAGP,OAAO;;;;;;CAMhB,CAAA;AAzGY,QAAA,gBAAgB,oBAyG5B"}
|
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.OryAuthenticator = exports.OryAuthenticatorPKCE = void 0;
|
|
4
|
-
var ory_pkce_1 = require("./ory-pkce");
|
|
5
|
-
Object.defineProperty(exports, "OryAuthenticatorPKCE", { enumerable: true, get: function () { return ory_pkce_1.OryAuthenticatorPKCE; } });
|
|
6
|
-
var ory_1 = require("./ory");
|
|
7
|
-
Object.defineProperty(exports, "OryAuthenticator", { enumerable: true, get: function () { return ory_1.OryAuthenticator; } });
|
|
8
|
-
//# sourceMappingURL=index.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/services/affinidi/auth/providers/index.ts"],"names":[],"mappings":";;;AAAA,uCAAiD;AAAxC,gHAAA,oBAAoB,OAAA;AAC7B,6BAAwC;AAA/B,uGAAA,gBAAgB,OAAA"}
|
|
@@ -1,47 +0,0 @@
|
|
|
1
|
-
import { AuthProvider, AuthProviderConfig } from './types';
|
|
2
|
-
export declare class OryAuthenticatorPKCE implements AuthProvider {
|
|
3
|
-
private readonly clientId;
|
|
4
|
-
private readonly host;
|
|
5
|
-
private readonly logger;
|
|
6
|
-
private readonly pConfig;
|
|
7
|
-
private request;
|
|
8
|
-
constructor({ clientId, host, logger }: AuthProviderConfig);
|
|
9
|
-
private exchangeForToken;
|
|
10
|
-
/**
|
|
11
|
-
* Handles callback endpoint call.
|
|
12
|
-
* Covers 2 use cases:
|
|
13
|
-
* - user `Allow` request to access the personal data
|
|
14
|
-
* - user `Decline` request to access the personal data
|
|
15
|
-
* @param params
|
|
16
|
-
* @private
|
|
17
|
-
*/
|
|
18
|
-
private endpointHandler;
|
|
19
|
-
/**
|
|
20
|
-
* Handles `Allow` case when the user accepts
|
|
21
|
-
* the access to the personal data.
|
|
22
|
-
* This is the example of accept endpoint call:
|
|
23
|
-
* http://127.0.0.1:2777/callback?code=ory_ac_1234&scope=openid+offline_access&state=1234
|
|
24
|
-
* @param params
|
|
25
|
-
* @private
|
|
26
|
-
*/
|
|
27
|
-
private handleAllow;
|
|
28
|
-
/**
|
|
29
|
-
* Handles `Decline` case when the user rejects
|
|
30
|
-
* the access to the personal data
|
|
31
|
-
* This is the example of the reject endpoint call:
|
|
32
|
-
* http://127.0.0.1:2777/callback?error=access_denied&error_description=request_declined'
|
|
33
|
-
* @param params
|
|
34
|
-
* @private
|
|
35
|
-
*/
|
|
36
|
-
private handleDecline;
|
|
37
|
-
private generateErrorMessages;
|
|
38
|
-
private generateAuthRequest;
|
|
39
|
-
authenticate(): Promise<string>;
|
|
40
|
-
logout(): Promise<void>;
|
|
41
|
-
private static generateRandomString;
|
|
42
|
-
private static createPKCE;
|
|
43
|
-
private static createState;
|
|
44
|
-
private static sha256;
|
|
45
|
-
private static safeBase64UrlEncode;
|
|
46
|
-
private shutDownServer;
|
|
47
|
-
}
|
|
@@ -1,216 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.OryAuthenticatorPKCE = void 0;
|
|
4
|
-
const tslib_1 = require("tslib");
|
|
5
|
-
const crypto_1 = tslib_1.__importDefault(require("crypto"));
|
|
6
|
-
const core_1 = require("@oclif/core");
|
|
7
|
-
const axios_1 = tslib_1.__importDefault(require("axios"));
|
|
8
|
-
const express_1 = tslib_1.__importDefault(require("express"));
|
|
9
|
-
const open_1 = tslib_1.__importDefault(require("open"));
|
|
10
|
-
const config_1 = require("./config");
|
|
11
|
-
const token_1 = require("../token");
|
|
12
|
-
const CHARACTERS = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
|
|
13
|
-
class OryAuthenticatorPKCE {
|
|
14
|
-
constructor({ clientId, host, logger }) {
|
|
15
|
-
this.clientId = clientId;
|
|
16
|
-
this.host = host;
|
|
17
|
-
this.logger = logger;
|
|
18
|
-
this.pConfig = {
|
|
19
|
-
server: {
|
|
20
|
-
authUrl: `${this.host}/oauth2/auth`,
|
|
21
|
-
tokenUrl: `${this.host}/oauth2/token`,
|
|
22
|
-
},
|
|
23
|
-
client: {
|
|
24
|
-
clientId,
|
|
25
|
-
},
|
|
26
|
-
redirectUri: `${config_1.config.redirectHost}:${config_1.config.expressPort}${config_1.config.redirectPath}`,
|
|
27
|
-
};
|
|
28
|
-
}
|
|
29
|
-
async exchangeForToken({ code, pkce: { verifier } }) {
|
|
30
|
-
const form = new FormData();
|
|
31
|
-
form.append('grant_type', 'authorization_code');
|
|
32
|
-
form.append('client_id', this.pConfig.client.clientId);
|
|
33
|
-
form.append('redirect_uri', this.pConfig.redirectUri);
|
|
34
|
-
form.append('code_verifier', verifier);
|
|
35
|
-
form.append('code', code);
|
|
36
|
-
const { data } = await axios_1.default.post(this.pConfig.server.tokenUrl, form);
|
|
37
|
-
this.logger.debug(`User token has been received: ${JSON.stringify(data)}`);
|
|
38
|
-
return data;
|
|
39
|
-
}
|
|
40
|
-
/**
|
|
41
|
-
* Handles callback endpoint call.
|
|
42
|
-
* Covers 2 use cases:
|
|
43
|
-
* - user `Allow` request to access the personal data
|
|
44
|
-
* - user `Decline` request to access the personal data
|
|
45
|
-
* @param params
|
|
46
|
-
* @private
|
|
47
|
-
*/
|
|
48
|
-
async endpointHandler(params) {
|
|
49
|
-
const { resolve, reject, server, res, req, timeout } = params;
|
|
50
|
-
try {
|
|
51
|
-
await this.handleAllow({ resolve, res, req, timeout });
|
|
52
|
-
this.handleDecline({ reject, res, req, timeout });
|
|
53
|
-
}
|
|
54
|
-
catch (e) {
|
|
55
|
-
core_1.ux.action.stop('Failed to authenticate');
|
|
56
|
-
this.logger.error(e.toString());
|
|
57
|
-
reject(e);
|
|
58
|
-
}
|
|
59
|
-
finally {
|
|
60
|
-
this.shutDownServer(server);
|
|
61
|
-
}
|
|
62
|
-
}
|
|
63
|
-
/**
|
|
64
|
-
* Handles `Allow` case when the user accepts
|
|
65
|
-
* the access to the personal data.
|
|
66
|
-
* This is the example of accept endpoint call:
|
|
67
|
-
* http://127.0.0.1:2777/callback?code=ory_ac_1234&scope=openid+offline_access&state=1234
|
|
68
|
-
* @param params
|
|
69
|
-
* @private
|
|
70
|
-
*/
|
|
71
|
-
async handleAllow(params) {
|
|
72
|
-
const { res, req, resolve, timeout } = params;
|
|
73
|
-
if (req.query.code) {
|
|
74
|
-
const code = String(req.query.code);
|
|
75
|
-
this.logger.debug(`Callback request has been received. Code: ${code}\n----------------8<----------------------------\n`);
|
|
76
|
-
clearTimeout(timeout);
|
|
77
|
-
const token = await this.exchangeForToken({
|
|
78
|
-
code,
|
|
79
|
-
pkce: this.request.pkce,
|
|
80
|
-
});
|
|
81
|
-
token_1.tokenService.setUserToken(token);
|
|
82
|
-
core_1.ux.action.stop('Authenticated successfully!');
|
|
83
|
-
resolve(token.access_token);
|
|
84
|
-
res.end(config_1.config.successHTML);
|
|
85
|
-
}
|
|
86
|
-
}
|
|
87
|
-
/**
|
|
88
|
-
* Handles `Decline` case when the user rejects
|
|
89
|
-
* the access to the personal data
|
|
90
|
-
* This is the example of the reject endpoint call:
|
|
91
|
-
* http://127.0.0.1:2777/callback?error=access_denied&error_description=request_declined'
|
|
92
|
-
* @param params
|
|
93
|
-
* @private
|
|
94
|
-
*/
|
|
95
|
-
handleDecline(params) {
|
|
96
|
-
const { res, req, reject, timeout } = params;
|
|
97
|
-
const { error } = req.query;
|
|
98
|
-
const errorDescription = req.query.error_description;
|
|
99
|
-
if (error) {
|
|
100
|
-
clearTimeout(timeout);
|
|
101
|
-
const { errorMessage, errorPageTitle, errorPageContext } = this.generateErrorMessages(error, errorDescription);
|
|
102
|
-
core_1.ux.action.stop(`Authenticated failed!\n\n ${errorMessage}`);
|
|
103
|
-
reject(errorMessage);
|
|
104
|
-
res.end(config_1.config.erroredLoginPage(errorPageTitle, errorPageContext));
|
|
105
|
-
}
|
|
106
|
-
}
|
|
107
|
-
generateErrorMessages(error, errorDescription) {
|
|
108
|
-
const errorPageTitle = 'Login failed';
|
|
109
|
-
let errorMessage;
|
|
110
|
-
let errorPageContext;
|
|
111
|
-
switch (error) {
|
|
112
|
-
case 'access_denied':
|
|
113
|
-
errorMessage =
|
|
114
|
-
errorDescription === 'request_declined'
|
|
115
|
-
? 'You have declined a request to access your data.\n\n'
|
|
116
|
-
: `Access denied with the description: ${errorDescription}.\n\n`;
|
|
117
|
-
errorPageContext =
|
|
118
|
-
errorDescription === 'request_declined'
|
|
119
|
-
? `You have declined permission to access your data. Granting access to your data is necessary to avail our services.<br>Please, return to the command prompt or terminal if you wish to attempt once more.`
|
|
120
|
-
: `Access denied with the description: ${errorDescription}.\n\n`;
|
|
121
|
-
break;
|
|
122
|
-
default:
|
|
123
|
-
errorMessage = 'Unknown problem.\n\n';
|
|
124
|
-
errorPageContext = 'Specified error is unexpected';
|
|
125
|
-
}
|
|
126
|
-
return {
|
|
127
|
-
errorPageTitle,
|
|
128
|
-
errorMessage,
|
|
129
|
-
errorPageContext,
|
|
130
|
-
};
|
|
131
|
-
}
|
|
132
|
-
async generateAuthRequest(scope) {
|
|
133
|
-
const pkce = await OryAuthenticatorPKCE.createPKCE();
|
|
134
|
-
const state = OryAuthenticatorPKCE.createState();
|
|
135
|
-
const params = new URLSearchParams({
|
|
136
|
-
response_type: 'code',
|
|
137
|
-
client_id: this.pConfig.client.clientId,
|
|
138
|
-
redirect_uri: this.pConfig.redirectUri,
|
|
139
|
-
code_challenge: pkce.challenge,
|
|
140
|
-
code_challenge_method: config_1.config.codeChallengeMethod,
|
|
141
|
-
scope,
|
|
142
|
-
state,
|
|
143
|
-
});
|
|
144
|
-
return {
|
|
145
|
-
ssoUrl: `${this.pConfig.server.authUrl}?${params.toString()}`,
|
|
146
|
-
request: { state, pkce: { verifier: pkce.verifier } },
|
|
147
|
-
};
|
|
148
|
-
}
|
|
149
|
-
async authenticate() {
|
|
150
|
-
const isPortInUse = await (0, config_1.isOryAuthCallbackPortInUse)();
|
|
151
|
-
if (isPortInUse) {
|
|
152
|
-
throw new Error(config_1.config.oryAuthCallbackPortUnavailableMessage);
|
|
153
|
-
}
|
|
154
|
-
const { ssoUrl, request } = await this.generateAuthRequest(config_1.config.scope);
|
|
155
|
-
this.request = request;
|
|
156
|
-
return new Promise((resolve, reject) => {
|
|
157
|
-
this.logger.debug('Start express server');
|
|
158
|
-
const app = (0, express_1.default)();
|
|
159
|
-
const server = app.listen(config_1.config.expressPort, () => {
|
|
160
|
-
this.logger.debug(`Express server started listening on port ${config_1.config.expressPort}`);
|
|
161
|
-
});
|
|
162
|
-
const timeout = setTimeout(() => {
|
|
163
|
-
this.shutDownServer(server);
|
|
164
|
-
reject(new Error(`Authentication timeout (${config_1.config.redirectTimeoutMs / 1000}s) exceeded`));
|
|
165
|
-
}, config_1.config.redirectTimeoutMs);
|
|
166
|
-
app.get(config_1.config.redirectPath, async (req, res) => {
|
|
167
|
-
await this.endpointHandler({ req, res, resolve, reject, timeout, server });
|
|
168
|
-
});
|
|
169
|
-
this.logger.info(config_1.config.getSSOMessage(ssoUrl));
|
|
170
|
-
core_1.ux.action.start('Authenticating in browser');
|
|
171
|
-
// eslint-disable-next-line @typescript-eslint/no-floating-promises
|
|
172
|
-
(0, open_1.default)(ssoUrl);
|
|
173
|
-
});
|
|
174
|
-
}
|
|
175
|
-
async logout() {
|
|
176
|
-
return new Promise((resolve) => {
|
|
177
|
-
resolve();
|
|
178
|
-
});
|
|
179
|
-
}
|
|
180
|
-
static generateRandomString(length) {
|
|
181
|
-
return Array(length)
|
|
182
|
-
.fill(null)
|
|
183
|
-
.map(() => CHARACTERS.charAt(Math.floor(Math.random() * CHARACTERS.length)))
|
|
184
|
-
.join('');
|
|
185
|
-
}
|
|
186
|
-
static createPKCE() {
|
|
187
|
-
const verifier = this.generateRandomString(config_1.config.PKCEBytes);
|
|
188
|
-
const challenge = this.safeBase64UrlEncode(this.sha256(verifier));
|
|
189
|
-
return { verifier, challenge };
|
|
190
|
-
}
|
|
191
|
-
static createState() {
|
|
192
|
-
return this.generateRandomString(config_1.config.stateBytes);
|
|
193
|
-
}
|
|
194
|
-
static sha256(str) {
|
|
195
|
-
return crypto_1.default.createHash('sha256').update(str).digest();
|
|
196
|
-
}
|
|
197
|
-
static safeBase64UrlEncode(input) {
|
|
198
|
-
let byteString = '';
|
|
199
|
-
// eslint-disable-next-line no-plusplus
|
|
200
|
-
for (let i = 0; i < input.byteLength; i++) {
|
|
201
|
-
byteString += String.fromCharCode(input[i]);
|
|
202
|
-
}
|
|
203
|
-
return btoa(byteString).replace(/\+/g, '-').replace(/\//g, '_').replace(/=+$/, '');
|
|
204
|
-
}
|
|
205
|
-
shutDownServer(server) {
|
|
206
|
-
server.close((error) => {
|
|
207
|
-
if (error) {
|
|
208
|
-
this.logger.error(`Error while shutting down the express server: ${error.message}`);
|
|
209
|
-
return;
|
|
210
|
-
}
|
|
211
|
-
this.logger.debug('Express server has been successfully shut down');
|
|
212
|
-
});
|
|
213
|
-
}
|
|
214
|
-
}
|
|
215
|
-
exports.OryAuthenticatorPKCE = OryAuthenticatorPKCE;
|
|
216
|
-
//# sourceMappingURL=ory-pkce.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ory-pkce.js","sourceRoot":"","sources":["../../../../../src/services/affinidi/auth/providers/ory-pkce.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
import { AuthProvider } from './types';
|
|
2
|
-
import { LoggerAdapter } from '../../adapters';
|
|
3
|
-
export type AuthProviderConfig = {
|
|
4
|
-
clientId: string;
|
|
5
|
-
host: string;
|
|
6
|
-
logger: LoggerAdapter;
|
|
7
|
-
};
|
|
8
|
-
export declare class OryAuthenticator implements AuthProvider {
|
|
9
|
-
private readonly clientId;
|
|
10
|
-
private readonly host;
|
|
11
|
-
private readonly logger;
|
|
12
|
-
constructor({ clientId, host, logger }: AuthProviderConfig);
|
|
13
|
-
private createAuthorizationClient;
|
|
14
|
-
private exchangeForToken;
|
|
15
|
-
private endpointHandler;
|
|
16
|
-
private handleAllow;
|
|
17
|
-
private handleDecline;
|
|
18
|
-
private generateErrorMessages;
|
|
19
|
-
authenticate(): Promise<string>;
|
|
20
|
-
logout(): Promise<void>;
|
|
21
|
-
private shutDownServer;
|
|
22
|
-
}
|