@fraym/auth 0.5.3 → 0.6.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/dist/config/config.d.ts +0 -2
- package/dist/config/config.js +1 -7
- package/dist/management/client.d.ts +0 -3
- package/dist/management/client.js +0 -15
- package/package.json +2 -5
- package/dist/cmd/auth.d.ts +0 -2
- package/dist/cmd/auth.js +0 -88
- package/dist/management/createScope.d.ts +0 -2
- package/dist/management/createScope.js +0 -17
- package/dist/management/deleteScope.d.ts +0 -2
- package/dist/management/deleteScope.js +0 -17
- package/dist/management/getScopes.d.ts +0 -2
- package/dist/management/getScopes.js +0 -18
package/dist/config/config.d.ts
CHANGED
package/dist/config/config.js
CHANGED
|
@@ -3,11 +3,9 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.useConfigDefaults = exports.getEnvConfig = void 0;
|
|
4
4
|
const dotenv_1 = require("dotenv");
|
|
5
5
|
const getEnvConfig = () => {
|
|
6
|
-
var _a
|
|
6
|
+
var _a;
|
|
7
7
|
(0, dotenv_1.config)();
|
|
8
8
|
const serverAddress = (_a = process.env.AUTH_SERVER_ADDRESS) !== null && _a !== void 0 ? _a : "";
|
|
9
|
-
const httpServerAddress = (_b = process.env.AUTH_HTTP_SERVER_ADDRESS) !== null && _b !== void 0 ? _b : "";
|
|
10
|
-
const httpApiToken = (_c = process.env.AUTH_HTTP_API_TOKEN) !== null && _c !== void 0 ? _c : "";
|
|
11
9
|
let keepaliveInterval;
|
|
12
10
|
let keepaliveTimeout;
|
|
13
11
|
const keepaliveIntervalString = process.env.AUTH_CONNECTION_KEEPALIVE_INTERVAL;
|
|
@@ -20,8 +18,6 @@ const getEnvConfig = () => {
|
|
|
20
18
|
}
|
|
21
19
|
return {
|
|
22
20
|
serverAddress,
|
|
23
|
-
httpServerAddress,
|
|
24
|
-
httpApiToken,
|
|
25
21
|
keepaliveInterval,
|
|
26
22
|
keepaliveTimeout,
|
|
27
23
|
};
|
|
@@ -34,8 +30,6 @@ const useConfigDefaults = (config) => {
|
|
|
34
30
|
}
|
|
35
31
|
return {
|
|
36
32
|
serverAddress: config.serverAddress,
|
|
37
|
-
httpServerAddress: config.httpServerAddress,
|
|
38
|
-
httpApiToken: config.httpApiToken,
|
|
39
33
|
keepaliveTimeout: (_a = config.keepaliveTimeout) !== null && _a !== void 0 ? _a : 3 * 1000,
|
|
40
34
|
keepaliveInterval: (_b = config.keepaliveInterval) !== null && _b !== void 0 ? _b : 40 * 1000,
|
|
41
35
|
};
|
|
@@ -4,9 +4,6 @@ import { Role } from "./getRoles";
|
|
|
4
4
|
import { User } from "./getUsers";
|
|
5
5
|
import { UpsertRoleScope } from "./upsertRole";
|
|
6
6
|
export interface ManagementClient {
|
|
7
|
-
createScope: (name: string, clientId?: string) => Promise<void>;
|
|
8
|
-
deleteScope: (name: string, clientId?: string) => Promise<void>;
|
|
9
|
-
getScopes: (clientId?: string) => Promise<string[]>;
|
|
10
7
|
upsertRole: (tenantId: string, allowedScopes: UpsertRoleScope[], id?: string) => Promise<string>;
|
|
11
8
|
deleteRole: (tenantId: string, id: string) => Promise<void>;
|
|
12
9
|
getRoles: (tenantId: string) => Promise<Role[]>;
|
|
@@ -4,13 +4,10 @@ exports.newManagementClient = void 0;
|
|
|
4
4
|
const auth_proto_1 = require("@fraym/auth-proto");
|
|
5
5
|
const grpc_js_1 = require("@grpc/grpc-js");
|
|
6
6
|
const config_1 = require("../config/config");
|
|
7
|
-
const createScope_1 = require("./createScope");
|
|
8
7
|
const createUser_1 = require("./createUser");
|
|
9
8
|
const deleteRole_1 = require("./deleteRole");
|
|
10
|
-
const deleteScope_1 = require("./deleteScope");
|
|
11
9
|
const deleteUser_1 = require("./deleteUser");
|
|
12
10
|
const getRoles_1 = require("./getRoles");
|
|
13
|
-
const getScopes_1 = require("./getScopes");
|
|
14
11
|
const getUsers_1 = require("./getUsers");
|
|
15
12
|
const updateUser_1 = require("./updateUser");
|
|
16
13
|
const upsertRole_1 = require("./upsertRole");
|
|
@@ -21,15 +18,6 @@ const newManagementClient = async (config) => {
|
|
|
21
18
|
"grpc.keepalive_timeout_ms": currentConfig.keepaliveTimeout,
|
|
22
19
|
"grpc.keepalive_permit_without_calls": 1,
|
|
23
20
|
});
|
|
24
|
-
const createScope = async (name, clientId = "") => {
|
|
25
|
-
await (0, createScope_1.createNewScope)(name, clientId, currentConfig);
|
|
26
|
-
};
|
|
27
|
-
const deleteScope = async (name, clientId = "") => {
|
|
28
|
-
await (0, deleteScope_1.deleteExistingScope)(name, clientId, currentConfig);
|
|
29
|
-
};
|
|
30
|
-
const getScopes = async (clientId = "") => {
|
|
31
|
-
return await (0, getScopes_1.getAllScopes)(clientId, currentConfig);
|
|
32
|
-
};
|
|
33
21
|
const upsertRole = async (tenantId, allowedScopes, id = "") => {
|
|
34
22
|
return await (0, upsertRole_1.createOrUpdateRole)(tenantId, id, allowedScopes, serviceClient);
|
|
35
23
|
};
|
|
@@ -55,9 +43,6 @@ const newManagementClient = async (config) => {
|
|
|
55
43
|
serviceClient.close();
|
|
56
44
|
};
|
|
57
45
|
return {
|
|
58
|
-
createScope,
|
|
59
|
-
deleteScope,
|
|
60
|
-
getScopes,
|
|
61
46
|
upsertRole,
|
|
62
47
|
deleteRole,
|
|
63
48
|
getRoles,
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@fraym/auth",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.6.0",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"homepage": "https://github.com/fraym/auth-nodejs",
|
|
6
6
|
"repository": {
|
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
"test": "echo \"Error: no test specified\" && exit 0",
|
|
13
13
|
"format": "prettier --write \"**/*.{ts,tsx,json}\"",
|
|
14
14
|
"lint": "prettier --check \"**/*.{ts,tsx,json}\"",
|
|
15
|
-
"build": "npm run clean && tsc
|
|
15
|
+
"build": "npm run clean && tsc",
|
|
16
16
|
"clean": "rm -rf dist",
|
|
17
17
|
"prepublishOnly": "npm test && npm run lint && npm run build",
|
|
18
18
|
"preversion": "npm run lint",
|
|
@@ -23,9 +23,6 @@
|
|
|
23
23
|
],
|
|
24
24
|
"main": "dist/index.js",
|
|
25
25
|
"types": "dist/index.d.ts",
|
|
26
|
-
"bin": {
|
|
27
|
-
"auth": "dist/cmd/auth.js"
|
|
28
|
-
},
|
|
29
26
|
"dependencies": {
|
|
30
27
|
"@fraym/auth-proto": "^0.6.0",
|
|
31
28
|
"@graphql-tools/graphql-file-loader": "^7.5.11",
|
package/dist/cmd/auth.d.ts
DELETED
package/dist/cmd/auth.js
DELETED
|
@@ -1,88 +0,0 @@
|
|
|
1
|
-
#! /usr/bin/env node
|
|
2
|
-
"use strict";
|
|
3
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
4
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
5
|
-
};
|
|
6
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
-
const yargs_1 = __importDefault(require("yargs/yargs"));
|
|
8
|
-
const helpers_1 = require("yargs/helpers");
|
|
9
|
-
const dotenv_1 = require("dotenv");
|
|
10
|
-
const graphql_file_loader_1 = require("@graphql-tools/graphql-file-loader");
|
|
11
|
-
const load_1 = require("@graphql-tools/load");
|
|
12
|
-
const graphql_1 = require("graphql");
|
|
13
|
-
const client_1 = require("../management/client");
|
|
14
|
-
const run = async () => {
|
|
15
|
-
(0, dotenv_1.config)();
|
|
16
|
-
const argv = await (0, yargs_1.default)((0, helpers_1.hideBin)(process.argv))
|
|
17
|
-
.config({
|
|
18
|
-
schemaGlob: "./src/**/*.graphql",
|
|
19
|
-
serverAddress: "127.0.0.1:9000",
|
|
20
|
-
httpServerAddress: "http://127.0.0.1",
|
|
21
|
-
httpApiToken: "",
|
|
22
|
-
})
|
|
23
|
-
.pkgConf("auth").argv;
|
|
24
|
-
let schemaGlob = argv.schemaGlob;
|
|
25
|
-
let serverAddress = argv.serverAddress;
|
|
26
|
-
let httpServerAddress = argv.httpServerAddress;
|
|
27
|
-
let httpApiToken = argv.httpApiToken;
|
|
28
|
-
if (process.env.AUTH_SCHEMA_GLOB) {
|
|
29
|
-
schemaGlob = process.env.AUTH_SCHEMA_GLOB;
|
|
30
|
-
}
|
|
31
|
-
if (process.env.AUTH_SERVER_ADDRESS) {
|
|
32
|
-
serverAddress = process.env.AUTH_SERVER_ADDRESS;
|
|
33
|
-
}
|
|
34
|
-
if (process.env.AUTH_HTTP_SERVER_ADDRESS) {
|
|
35
|
-
httpServerAddress = process.env.AUTH_HTTP_SERVER_ADDRESS;
|
|
36
|
-
}
|
|
37
|
-
if (process.env.AUTH_HTTP_API_TOKEN) {
|
|
38
|
-
httpApiToken = process.env.AUTH_HTTP_API_TOKEN;
|
|
39
|
-
}
|
|
40
|
-
const schema = await (0, load_1.loadSchema)(`${schemaGlob}`, {
|
|
41
|
-
loaders: [new graphql_file_loader_1.GraphQLFileLoader()],
|
|
42
|
-
});
|
|
43
|
-
const permissions = getSchemaPermissions(schema);
|
|
44
|
-
await migratePermissions(permissions, serverAddress, httpServerAddress, httpApiToken);
|
|
45
|
-
};
|
|
46
|
-
const getSchemaPermissions = (schema) => {
|
|
47
|
-
const permissions = [];
|
|
48
|
-
schema.toConfig().types.forEach(t => {
|
|
49
|
-
var _a, _b;
|
|
50
|
-
if (!(t instanceof graphql_1.GraphQLEnumType)) {
|
|
51
|
-
return;
|
|
52
|
-
}
|
|
53
|
-
const name = t.toString();
|
|
54
|
-
if (name !== "Permission") {
|
|
55
|
-
return;
|
|
56
|
-
}
|
|
57
|
-
(_b = (_a = t.astNode) === null || _a === void 0 ? void 0 : _a.values) === null || _b === void 0 ? void 0 : _b.forEach(value => {
|
|
58
|
-
permissions.push(value.name.value);
|
|
59
|
-
});
|
|
60
|
-
});
|
|
61
|
-
return permissions;
|
|
62
|
-
};
|
|
63
|
-
const migratePermissions = async (permissions, serverAddress, httpServerAddress, httpApiToken) => {
|
|
64
|
-
const managementClient = await (0, client_1.newManagementClient)({
|
|
65
|
-
serverAddress,
|
|
66
|
-
httpServerAddress,
|
|
67
|
-
httpApiToken,
|
|
68
|
-
});
|
|
69
|
-
const existingPermissions = (await managementClient.getScopes()).filter(permission => !permission.startsWith("FRAYM_"));
|
|
70
|
-
console.log("existingPermissions", existingPermissions);
|
|
71
|
-
const permissionsToCreate = permissions.filter(permission => !existingPermissions.includes(permission));
|
|
72
|
-
const permissionsToDelete = existingPermissions.filter(permission => !permissions.includes(permission));
|
|
73
|
-
if (permissionsToCreate.length > 0) {
|
|
74
|
-
console.log(`Creating ${permissionsToCreate.length} permissions: ${permissionsToCreate}...`);
|
|
75
|
-
for (let i = 0; i < permissionsToCreate.length; i++) {
|
|
76
|
-
await managementClient.createScope(permissionsToCreate[i]);
|
|
77
|
-
}
|
|
78
|
-
console.log(`Created ${permissionsToCreate.length} permissions`);
|
|
79
|
-
}
|
|
80
|
-
if (permissionsToDelete.length > 0) {
|
|
81
|
-
console.log(`Removing ${permissionsToDelete.length} permissions: ${permissionsToDelete}...`);
|
|
82
|
-
for (let i = 0; i < permissionsToDelete.length; i++) {
|
|
83
|
-
await managementClient.deleteScope(permissionsToDelete[i]);
|
|
84
|
-
}
|
|
85
|
-
console.log(`Removed ${permissionsToDelete.length} permissions`);
|
|
86
|
-
}
|
|
87
|
-
};
|
|
88
|
-
run();
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.createNewScope = void 0;
|
|
4
|
-
const createNewScope = async (name, clientId, config) => {
|
|
5
|
-
await fetch(`${config.httpServerAddress}/management/scopes`, {
|
|
6
|
-
method: "POST",
|
|
7
|
-
headers: {
|
|
8
|
-
Authorization: `Bearer ${config.httpApiToken}`,
|
|
9
|
-
"Content-Type": "application/json",
|
|
10
|
-
},
|
|
11
|
-
body: JSON.stringify({
|
|
12
|
-
clientId,
|
|
13
|
-
name,
|
|
14
|
-
}),
|
|
15
|
-
});
|
|
16
|
-
};
|
|
17
|
-
exports.createNewScope = createNewScope;
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.deleteExistingScope = void 0;
|
|
4
|
-
const deleteExistingScope = async (name, clientId, config) => {
|
|
5
|
-
await fetch(`${config.httpServerAddress}/management/scopes`, {
|
|
6
|
-
method: "DELETE",
|
|
7
|
-
headers: {
|
|
8
|
-
Authorization: `Bearer ${config.httpApiToken}`,
|
|
9
|
-
"Content-Type": "application/json",
|
|
10
|
-
},
|
|
11
|
-
body: JSON.stringify({
|
|
12
|
-
clientId,
|
|
13
|
-
name,
|
|
14
|
-
}),
|
|
15
|
-
});
|
|
16
|
-
};
|
|
17
|
-
exports.deleteExistingScope = deleteExistingScope;
|
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.getAllScopes = void 0;
|
|
4
|
-
const getAllScopes = async (clientId, config) => {
|
|
5
|
-
const response = await fetch(`${config.httpServerAddress}/management/scopes/list`, {
|
|
6
|
-
method: "POST",
|
|
7
|
-
headers: {
|
|
8
|
-
Authorization: `Bearer ${config.httpApiToken}`,
|
|
9
|
-
"Content-Type": "application/json",
|
|
10
|
-
},
|
|
11
|
-
body: JSON.stringify({
|
|
12
|
-
clientId,
|
|
13
|
-
}),
|
|
14
|
-
});
|
|
15
|
-
const data = await response.json();
|
|
16
|
-
return data.scopes;
|
|
17
|
-
};
|
|
18
|
-
exports.getAllScopes = getAllScopes;
|