@magda/typescript-common 1.2.1 → 2.0.0-alpha.1
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/OpaCompileResponseParser.d.ts +260 -36
- package/dist/OpaCompileResponseParser.js +697 -297
- package/dist/OpaCompileResponseParser.js.map +1 -1
- package/dist/SQLUtils.d.ts +70 -0
- package/dist/SQLUtils.js +263 -0
- package/dist/SQLUtils.js.map +1 -0
- package/dist/ServerError.d.ts +9 -0
- package/dist/ServerError.js +17 -0
- package/dist/ServerError.js.map +1 -0
- package/dist/authorization-api/authMiddleware.d.ts +60 -1
- package/dist/authorization-api/authMiddleware.js +155 -3
- package/dist/authorization-api/authMiddleware.js.map +1 -1
- package/dist/authorization-api/constants.d.ts +5 -0
- package/dist/authorization-api/constants.js +13 -0
- package/dist/authorization-api/constants.js.map +1 -0
- package/dist/authorization-api/model.d.ts +2 -7
- package/dist/express/getNoCacheHeaders.d.ts +6 -0
- package/dist/express/getNoCacheHeaders.js +9 -0
- package/dist/express/getNoCacheHeaders.js.map +1 -0
- package/dist/express/setResponseNoCache.d.ts +3 -0
- package/dist/express/setResponseNoCache.js +9 -0
- package/dist/express/setResponseNoCache.js.map +1 -0
- package/dist/generated/registry/api.d.ts +47 -2
- package/dist/generated/registry/api.js +197 -2
- package/dist/generated/registry/api.js.map +1 -1
- package/dist/getAbsoluteUrl.d.ts +3 -2
- package/dist/getAbsoluteUrl.js +2 -1
- package/dist/getAbsoluteUrl.js.map +1 -1
- package/dist/getStorageUrl.d.ts +34 -0
- package/dist/getStorageUrl.js +138 -0
- package/dist/getStorageUrl.js.map +1 -0
- package/dist/handleServerError.d.ts +2 -0
- package/dist/handleServerError.js +17 -0
- package/dist/handleServerError.js.map +1 -0
- package/dist/opa/AspectQuery.d.ts +71 -0
- package/dist/opa/AspectQuery.js +219 -0
- package/dist/opa/AspectQuery.js.map +1 -0
- package/dist/opa/AuthDecision.d.ts +51 -0
- package/dist/opa/AuthDecision.js +241 -0
- package/dist/opa/AuthDecision.js.map +1 -0
- package/dist/opa/AuthDecisionQueryClient.d.ts +23 -0
- package/dist/opa/AuthDecisionQueryClient.js +113 -0
- package/dist/opa/AuthDecisionQueryClient.js.map +1 -0
- package/dist/pgTypes.d.ts +1 -0
- package/dist/pgTypes.js +18 -0
- package/dist/pgTypes.js.map +1 -0
- package/dist/registry/AuthorizedRegistryClient.d.ts +1 -0
- package/dist/registry/AuthorizedRegistryClient.js +17 -0
- package/dist/registry/AuthorizedRegistryClient.js.map +1 -1
- package/dist/registry/RegistryClient.d.ts +11 -0
- package/dist/registry/RegistryClient.js +46 -0
- package/dist/registry/RegistryClient.js.map +1 -1
- package/dist/test/getAuthDecision.spec.js +2 -2
- package/dist/test/getAuthDecision.spec.js.map +1 -1
- package/dist/test/getStorageUrl.spec.d.ts +1 -0
- package/dist/test/getStorageUrl.spec.js +95 -0
- package/dist/test/getStorageUrl.spec.js.map +1 -0
- package/dist/test/sampleAuthDecisions/content.json +29 -0
- package/dist/test/sampleAuthDecisions/datasetPermissionWithOrgUnitConstraint.json +79 -0
- package/dist/test/sampleAuthDecisions/extraLargeResponse.json +2519 -0
- package/dist/test/sampleAuthDecisions/simple.json +29 -0
- package/dist/test/sampleAuthDecisions/singleTermAspectRef.json +39 -0
- package/dist/test/sampleAuthDecisions/unconditionalFalseSimple.json +6 -0
- package/dist/test/sampleAuthDecisions/unconditionalNotMacthed.json +6 -0
- package/dist/test/sampleAuthDecisions/unconditionalNotMacthedWithExtraRefs.json +6 -0
- package/dist/test/sampleAuthDecisions/unconditionalTrue.json +6 -0
- package/dist/test/sampleAuthDecisions/unconditionalTrueSimple.json +6 -0
- package/dist/test/sampleAuthDecisions/unconditionalTrueWithDefaultRule.json +6 -0
- package/dist/test/sampleAuthDecisions/withDefaultRule.json +6 -0
- package/dist/test/{sampleOpaResponse.json → sampleOpaResponses/content.json} +0 -0
- package/dist/test/sampleOpaResponses/datasetPermissionWithOrgUnitConstraint.json +341 -0
- package/dist/test/sampleOpaResponses/extraLargeResponse.json +104869 -0
- package/dist/test/{sampleOpaResponseSimple.json → sampleOpaResponses/simple.json} +0 -0
- package/dist/test/sampleOpaResponses/singleTermAspectRef.json +233 -0
- package/dist/test/sampleOpaResponses/unconditionalFalseSimple.json +3 -0
- package/dist/test/sampleOpaResponses/unconditionalNotMacthed.json +73 -0
- package/dist/test/sampleOpaResponses/unconditionalNotMacthedWithExtraRefs.json +155 -0
- package/dist/test/{sampleOpaResponseUnconditionalTrue.json → sampleOpaResponses/unconditionalTrue.json} +0 -0
- package/dist/test/sampleOpaResponses/unconditionalTrueSimple.json +48 -0
- package/dist/test/{sampleOpaResponseUnconditionalTrueWithDefaultRule.json → sampleOpaResponses/unconditionalTrueWithDefaultRule.json} +0 -0
- package/dist/test/{sampleOpaResponseWithDefaultRule.json → sampleOpaResponses/withDefaultRule.json} +0 -0
- package/dist/test/testOpaCompileResponseParser.spec.js +212 -20
- package/dist/test/testOpaCompileResponseParser.spec.js.map +1 -1
- package/package.json +9 -3
|
@@ -0,0 +1,219 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
|
|
5
|
+
}) : (function(o, m, k, k2) {
|
|
6
|
+
if (k2 === undefined) k2 = k;
|
|
7
|
+
o[k2] = m[k];
|
|
8
|
+
}));
|
|
9
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
10
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
11
|
+
}) : function(o, v) {
|
|
12
|
+
o["default"] = v;
|
|
13
|
+
});
|
|
14
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
15
|
+
if (mod && mod.__esModule) return mod;
|
|
16
|
+
var result = {};
|
|
17
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
18
|
+
__setModuleDefault(result, mod);
|
|
19
|
+
return result;
|
|
20
|
+
};
|
|
21
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
22
|
+
exports.AspectQueryGroup = exports.AspectQueryValueInArray = exports.AspectQueryArrayNotEmpty = exports.AspectQueryWithValue = exports.AspectQueryExists = exports.AspectQueryFalse = exports.AspectQueryTrue = exports.AspectQuery = exports.AspectQueryValue = void 0;
|
|
23
|
+
const sql_syntax_1 = __importStar(require("sql-syntax"));
|
|
24
|
+
const SQLUtils_1 = require("../SQLUtils");
|
|
25
|
+
class AspectQueryValue {
|
|
26
|
+
constructor(value) {
|
|
27
|
+
this.value = value;
|
|
28
|
+
switch (typeof value) {
|
|
29
|
+
case "number":
|
|
30
|
+
this.postgresType = sql_syntax_1.sqls `NUMERIC`;
|
|
31
|
+
break;
|
|
32
|
+
case "boolean":
|
|
33
|
+
this.postgresType = sql_syntax_1.sqls `BOOL`;
|
|
34
|
+
break;
|
|
35
|
+
case "string":
|
|
36
|
+
this.postgresType = sql_syntax_1.sqls `TEXT`;
|
|
37
|
+
break;
|
|
38
|
+
default:
|
|
39
|
+
throw new Error("getPostgresValueTypeCastStr: unsupported data type: `${" +
|
|
40
|
+
typeof value +
|
|
41
|
+
"}`");
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
exports.AspectQueryValue = AspectQueryValue;
|
|
46
|
+
class AspectQuery {
|
|
47
|
+
constructor(aspectId, path = [], negated = false) {
|
|
48
|
+
this.aspectId = aspectId;
|
|
49
|
+
this.path = path;
|
|
50
|
+
this.negated = negated;
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Public interface of all types of AspectQuery. Call this method to covert AspectQuery to SQL statement.
|
|
54
|
+
* Sub-class might choose to override this method to alter generic logic.
|
|
55
|
+
*
|
|
56
|
+
* @param {AspectQueryToSqlConfig} config
|
|
57
|
+
* @return {SQLSyntax}
|
|
58
|
+
* @memberof AspectQuery
|
|
59
|
+
*/
|
|
60
|
+
toSql(config) {
|
|
61
|
+
if (!this.aspectId) {
|
|
62
|
+
throw new Error("Invalid AspectQuery: aspectId cannot be empty.");
|
|
63
|
+
}
|
|
64
|
+
const sqlQuery = this.sqlQueries(config);
|
|
65
|
+
if (this.negated) {
|
|
66
|
+
return sql_syntax_1.sqls `NOT ${sqlQuery}`;
|
|
67
|
+
}
|
|
68
|
+
else {
|
|
69
|
+
return sqlQuery;
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
exports.AspectQuery = AspectQuery;
|
|
74
|
+
class AspectQueryTrue extends AspectQuery {
|
|
75
|
+
constructor() {
|
|
76
|
+
super(undefined);
|
|
77
|
+
}
|
|
78
|
+
sqlQueries(config) {
|
|
79
|
+
return sql_syntax_1.sqls `TRUE`;
|
|
80
|
+
}
|
|
81
|
+
// override default toSql as we don't need any validation logic
|
|
82
|
+
toSql(config) {
|
|
83
|
+
return this.sqlQueries(config);
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
exports.AspectQueryTrue = AspectQueryTrue;
|
|
87
|
+
class AspectQueryFalse extends AspectQuery {
|
|
88
|
+
constructor() {
|
|
89
|
+
super(undefined);
|
|
90
|
+
}
|
|
91
|
+
sqlQueries(config) {
|
|
92
|
+
return sql_syntax_1.sqls `FALSE`;
|
|
93
|
+
}
|
|
94
|
+
// override default toSql as we don't need any validation logic
|
|
95
|
+
toSql(config) {
|
|
96
|
+
return this.sqlQueries(config);
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
exports.AspectQueryFalse = AspectQueryFalse;
|
|
100
|
+
class AspectQueryExists extends AspectQuery {
|
|
101
|
+
sqlQueries(config) {
|
|
102
|
+
var _a;
|
|
103
|
+
const fieldRef = SQLUtils_1.getTableColumnName(this.aspectId, config.tableRef, config.useLowerCaseColumnName);
|
|
104
|
+
if ((_a = this.path) === null || _a === void 0 ? void 0 : _a.length) {
|
|
105
|
+
return sql_syntax_1.sqls `(${fieldRef} #> string_to_array(${this.path.join(",")}, ',')) IS NOT NULL`;
|
|
106
|
+
}
|
|
107
|
+
else {
|
|
108
|
+
return fieldRef.isNotNull();
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
exports.AspectQueryExists = AspectQueryExists;
|
|
113
|
+
class AspectQueryWithValue extends AspectQuery {
|
|
114
|
+
constructor(value, operator, placeReferenceFirst, aspectId, path = [], negated = false) {
|
|
115
|
+
super(aspectId, path, negated);
|
|
116
|
+
this.value = value;
|
|
117
|
+
this.operator = operator;
|
|
118
|
+
this.placeReferenceFirst = placeReferenceFirst;
|
|
119
|
+
}
|
|
120
|
+
sqlQueries(config) {
|
|
121
|
+
var _a;
|
|
122
|
+
const fieldRef = SQLUtils_1.getTableColumnName(this.aspectId, config.tableRef, config.useLowerCaseColumnName);
|
|
123
|
+
const tableDataRef = !((_a = this.path) === null || _a === void 0 ? void 0 : _a.length)
|
|
124
|
+
? sql_syntax_1.sqls `${fieldRef}::${this.value.postgresType}`
|
|
125
|
+
: sql_syntax_1.sqls `(${fieldRef} #>> string_to_array(${this.path.join(",")}, ','))::${this.value.postgresType}`;
|
|
126
|
+
return this.placeReferenceFirst
|
|
127
|
+
? sql_syntax_1.sqls `COALESCE(${tableDataRef} ${this.operator} ${this.value.value}::${this.value.postgresType}, false)`
|
|
128
|
+
: sql_syntax_1.sqls `COALESCE(${this.value.value}::${this.value.postgresType} ${this.operator} ${tableDataRef}, false)`;
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
exports.AspectQueryWithValue = AspectQueryWithValue;
|
|
132
|
+
class AspectQueryArrayNotEmpty extends AspectQuery {
|
|
133
|
+
sqlQueries(config) {
|
|
134
|
+
var _a;
|
|
135
|
+
const fieldRef = SQLUtils_1.getTableColumnName(this.aspectId, config.tableRef, config.useLowerCaseColumnName);
|
|
136
|
+
const tableDataRef = !((_a = this.path) === null || _a === void 0 ? void 0 : _a.length)
|
|
137
|
+
? sql_syntax_1.sqls `(${fieldRef} #> string_to_array('0',','))`
|
|
138
|
+
: sql_syntax_1.sqls `(${fieldRef} #>> string_to_array(${[...this.path, "0"].join(",")}, ','))`;
|
|
139
|
+
return tableDataRef.isNotNull();
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
exports.AspectQueryArrayNotEmpty = AspectQueryArrayNotEmpty;
|
|
143
|
+
class AspectQueryValueInArray extends AspectQuery {
|
|
144
|
+
constructor(value, aspectId, path = [], negated = false) {
|
|
145
|
+
super(aspectId, path, negated);
|
|
146
|
+
this.value = value;
|
|
147
|
+
}
|
|
148
|
+
sqlQueries(config) {
|
|
149
|
+
var _a;
|
|
150
|
+
const fieldRef = SQLUtils_1.getTableColumnName(this.aspectId, config.tableRef, config.useLowerCaseColumnName);
|
|
151
|
+
const tableDataRef = !((_a = this.path) === null || _a === void 0 ? void 0 : _a.length)
|
|
152
|
+
? sql_syntax_1.sqls `COALESCE(
|
|
153
|
+
(
|
|
154
|
+
(${fieldRef}::JSONB #> string_to_array('0',','))::JSONB
|
|
155
|
+
) @> to_json(${this.value.value})::JSONB,
|
|
156
|
+
FALSE
|
|
157
|
+
)`
|
|
158
|
+
: sql_syntax_1.sqls `COALESCE(
|
|
159
|
+
(
|
|
160
|
+
(${fieldRef}::JSONB #> string_to_array(${this.path.join(",")}, ','))::JSONB
|
|
161
|
+
) @> to_json(${this.value.value})::JSONB,
|
|
162
|
+
FALSE
|
|
163
|
+
)`;
|
|
164
|
+
return tableDataRef;
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
exports.AspectQueryValueInArray = AspectQueryValueInArray;
|
|
168
|
+
class AspectQueryGroup {
|
|
169
|
+
constructor(queries, joinWithAnd = true, negated = false) {
|
|
170
|
+
this.queries = queries;
|
|
171
|
+
this.joinWithAnd = joinWithAnd;
|
|
172
|
+
this.negated = negated;
|
|
173
|
+
}
|
|
174
|
+
toSql(config) {
|
|
175
|
+
var _a;
|
|
176
|
+
if (!((_a = this.queries) === null || _a === void 0 ? void 0 : _a.length)) {
|
|
177
|
+
return sql_syntax_1.default.empty;
|
|
178
|
+
}
|
|
179
|
+
let result;
|
|
180
|
+
if (this.joinWithAnd) {
|
|
181
|
+
if (this.queries.findIndex((item) => item instanceof AspectQueryFalse) !== -1) {
|
|
182
|
+
result = sql_syntax_1.sqls `FALSE`;
|
|
183
|
+
}
|
|
184
|
+
else {
|
|
185
|
+
result = sql_syntax_1.default.joinWithAnd(this.queries.map((q) => {
|
|
186
|
+
if (q instanceof AspectQueryTrue) {
|
|
187
|
+
return sql_syntax_1.default.empty;
|
|
188
|
+
}
|
|
189
|
+
else {
|
|
190
|
+
return q.toSql(config);
|
|
191
|
+
}
|
|
192
|
+
}));
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
else {
|
|
196
|
+
if (this.queries.findIndex((item) => item instanceof AspectQueryTrue) !== -1) {
|
|
197
|
+
result = sql_syntax_1.sqls `TRUE`;
|
|
198
|
+
}
|
|
199
|
+
else {
|
|
200
|
+
result = sql_syntax_1.default.joinWithOr(this.queries.map((q) => {
|
|
201
|
+
if (q instanceof AspectQueryFalse) {
|
|
202
|
+
return sql_syntax_1.default.empty;
|
|
203
|
+
}
|
|
204
|
+
else {
|
|
205
|
+
return q.toSql(config);
|
|
206
|
+
}
|
|
207
|
+
}));
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
if (this.negated) {
|
|
211
|
+
return sql_syntax_1.sqls `NOT ${result}`;
|
|
212
|
+
}
|
|
213
|
+
else {
|
|
214
|
+
return result;
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
exports.AspectQueryGroup = AspectQueryGroup;
|
|
219
|
+
//# sourceMappingURL=AspectQuery.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AspectQuery.js","sourceRoot":"","sources":["../../src/opa/AspectQuery.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import { AspectQueryValue, AspectQuery, AspectQueryGroup, AspectQueryToSqlConfig } from "./AspectQuery";
|
|
2
|
+
import SQLSyntax from "sql-syntax";
|
|
3
|
+
declare type PlainObject = {
|
|
4
|
+
[key: string]: any;
|
|
5
|
+
};
|
|
6
|
+
export default class AuthDecision {
|
|
7
|
+
readonly hasResidualRules: boolean;
|
|
8
|
+
readonly result?: any;
|
|
9
|
+
readonly residualRules?: ConciseRule[];
|
|
10
|
+
readonly hasWarns: boolean;
|
|
11
|
+
readonly warns: string[];
|
|
12
|
+
readonly unknowns?: string[];
|
|
13
|
+
constructor(hasResidualRules: boolean, residualRules?: ConciseRule[], result?: any, hasWarns?: boolean, warns?: string[], unknowns?: string[]);
|
|
14
|
+
static fromJson(data: PlainObject): AuthDecision;
|
|
15
|
+
toAspectQueryGroups(prefixes: string[]): AspectQueryGroup[];
|
|
16
|
+
toSql(config: AspectQueryToSqlConfig): SQLSyntax;
|
|
17
|
+
}
|
|
18
|
+
export declare function isTrueEquivalent(value: any): any;
|
|
19
|
+
export declare const UnconditionalTrueDecision: AuthDecision;
|
|
20
|
+
export declare const UnconditionalFalseDecision: AuthDecision;
|
|
21
|
+
export declare class ConciseRule {
|
|
22
|
+
readonly default: boolean;
|
|
23
|
+
readonly value: any;
|
|
24
|
+
readonly fullName: string;
|
|
25
|
+
readonly name: string;
|
|
26
|
+
readonly expressions: ConciseExpression[];
|
|
27
|
+
constructor(fullName: string, name: string, value: any, expressions: ConciseExpression[], isDefault?: boolean);
|
|
28
|
+
static fromJson(data: PlainObject): ConciseRule;
|
|
29
|
+
toAspectQueryGroup(prefixes: string[]): AspectQueryGroup;
|
|
30
|
+
}
|
|
31
|
+
export declare class ConciseExpression {
|
|
32
|
+
readonly negated: boolean;
|
|
33
|
+
readonly operator?: string;
|
|
34
|
+
readonly operands: ConciseOperand[];
|
|
35
|
+
constructor(operands: ConciseOperand[], operator?: string, negated?: boolean);
|
|
36
|
+
static fromJson(data: PlainObject): ConciseExpression;
|
|
37
|
+
getSqlOperator(): SQLSyntax;
|
|
38
|
+
toAspectQuery(prefixes: string[]): AspectQuery;
|
|
39
|
+
}
|
|
40
|
+
export declare class ConciseOperand {
|
|
41
|
+
isRef: boolean;
|
|
42
|
+
value: any;
|
|
43
|
+
constructor(isRef: boolean, value: any);
|
|
44
|
+
static fromJson(data: any): ConciseOperand;
|
|
45
|
+
refString(): string;
|
|
46
|
+
isCollectionRef(): boolean;
|
|
47
|
+
refStringWithoutPrefixes(prefixes: string[]): string;
|
|
48
|
+
extractAspectIdAndPath(prefixes: string[]): [string, string[], boolean];
|
|
49
|
+
toAspectQueryValue(): AspectQueryValue;
|
|
50
|
+
}
|
|
51
|
+
export {};
|
|
@@ -0,0 +1,241 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
|
|
5
|
+
}) : (function(o, m, k, k2) {
|
|
6
|
+
if (k2 === undefined) k2 = k;
|
|
7
|
+
o[k2] = m[k];
|
|
8
|
+
}));
|
|
9
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
10
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
11
|
+
}) : function(o, v) {
|
|
12
|
+
o["default"] = v;
|
|
13
|
+
});
|
|
14
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
15
|
+
if (mod && mod.__esModule) return mod;
|
|
16
|
+
var result = {};
|
|
17
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
18
|
+
__setModuleDefault(result, mod);
|
|
19
|
+
return result;
|
|
20
|
+
};
|
|
21
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
22
|
+
exports.ConciseOperand = exports.ConciseExpression = exports.ConciseRule = exports.UnconditionalFalseDecision = exports.UnconditionalTrueDecision = exports.isTrueEquivalent = void 0;
|
|
23
|
+
const AspectQuery_1 = require("./AspectQuery");
|
|
24
|
+
const sql_syntax_1 = __importStar(require("sql-syntax"));
|
|
25
|
+
class AuthDecision {
|
|
26
|
+
constructor(hasResidualRules, residualRules, result, hasWarns = false, warns = [], unknowns) {
|
|
27
|
+
if (typeof hasResidualRules !== "boolean") {
|
|
28
|
+
throw new Error("Failed to create AuthDecision: invalid hasResidualRules type");
|
|
29
|
+
}
|
|
30
|
+
if (hasResidualRules && !(residualRules === null || residualRules === void 0 ? void 0 : residualRules.length)) {
|
|
31
|
+
throw new Error("Failed to create AuthDecision: residualRules must have at least one item when hasResidualRules == true");
|
|
32
|
+
}
|
|
33
|
+
this.hasResidualRules = hasResidualRules;
|
|
34
|
+
this.result = result;
|
|
35
|
+
this.residualRules = residualRules;
|
|
36
|
+
this.hasWarns = hasWarns;
|
|
37
|
+
this.warns = warns;
|
|
38
|
+
this.unknowns = unknowns;
|
|
39
|
+
}
|
|
40
|
+
static fromJson(data) {
|
|
41
|
+
var _a;
|
|
42
|
+
return new AuthDecision(data === null || data === void 0 ? void 0 : data.hasResidualRules, (_a = data === null || data === void 0 ? void 0 : data.residualRules) === null || _a === void 0 ? void 0 : _a.map((item) => ConciseRule.fromJson(item)), data === null || data === void 0 ? void 0 : data.result, (data === null || data === void 0 ? void 0 : data.hasWarns) ? true : false, data === null || data === void 0 ? void 0 : data.warns, data === null || data === void 0 ? void 0 : data.unknowns);
|
|
43
|
+
}
|
|
44
|
+
toAspectQueryGroups(prefixes) {
|
|
45
|
+
if (this.hasResidualRules) {
|
|
46
|
+
return this.residualRules.map((item) => item.toAspectQueryGroup(prefixes));
|
|
47
|
+
}
|
|
48
|
+
else {
|
|
49
|
+
if (isTrueEquivalent(this.result)) {
|
|
50
|
+
// unconditional true
|
|
51
|
+
return [new AspectQuery_1.AspectQueryGroup([new AspectQuery_1.AspectQueryTrue()])];
|
|
52
|
+
}
|
|
53
|
+
else {
|
|
54
|
+
return [new AspectQuery_1.AspectQueryGroup([new AspectQuery_1.AspectQueryFalse()])];
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
toSql(config) {
|
|
59
|
+
return sql_syntax_1.default.joinWithOr(this.toAspectQueryGroups(config.prefixes).map((item) => item.toSql(config))).roundBracket();
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
exports.default = AuthDecision;
|
|
63
|
+
function isTrueEquivalent(value) {
|
|
64
|
+
const typeStr = typeof value;
|
|
65
|
+
if (typeStr === "boolean") {
|
|
66
|
+
return value;
|
|
67
|
+
}
|
|
68
|
+
else if (typeStr === "undefined") {
|
|
69
|
+
return false;
|
|
70
|
+
}
|
|
71
|
+
else if (typeof (value === null || value === void 0 ? void 0 : value.length) !== "undefined") {
|
|
72
|
+
return !!value.length;
|
|
73
|
+
}
|
|
74
|
+
else {
|
|
75
|
+
return !!value;
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
exports.isTrueEquivalent = isTrueEquivalent;
|
|
79
|
+
exports.UnconditionalTrueDecision = new AuthDecision(false, undefined, true);
|
|
80
|
+
exports.UnconditionalFalseDecision = new AuthDecision(false, undefined, false);
|
|
81
|
+
class ConciseRule {
|
|
82
|
+
constructor(fullName, name, value, expressions, isDefault = false) {
|
|
83
|
+
if (!isDefault && !(expressions === null || expressions === void 0 ? void 0 : expressions.length)) {
|
|
84
|
+
throw new Error("Invalid ConciseRule data: it must contain at least one ConciseExpression item unless it's a default rule.");
|
|
85
|
+
}
|
|
86
|
+
this.default = isDefault ? true : false;
|
|
87
|
+
this.fullName = fullName;
|
|
88
|
+
this.name = name;
|
|
89
|
+
this.value = value;
|
|
90
|
+
this.expressions = (expressions === null || expressions === void 0 ? void 0 : expressions.length) ? expressions : [];
|
|
91
|
+
}
|
|
92
|
+
static fromJson(data) {
|
|
93
|
+
var _a;
|
|
94
|
+
return new ConciseRule(data === null || data === void 0 ? void 0 : data.fullName, data === null || data === void 0 ? void 0 : data.name, data === null || data === void 0 ? void 0 : data.value, (_a = data === null || data === void 0 ? void 0 : data.expressions) === null || _a === void 0 ? void 0 : _a.map((item) => ConciseExpression.fromJson(item)));
|
|
95
|
+
}
|
|
96
|
+
toAspectQueryGroup(prefixes) {
|
|
97
|
+
var _a;
|
|
98
|
+
return new AspectQuery_1.AspectQueryGroup((_a = this.expressions) === null || _a === void 0 ? void 0 : _a.map((item) => item.toAspectQuery(prefixes)), true, !isTrueEquivalent(this.value));
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
exports.ConciseRule = ConciseRule;
|
|
102
|
+
class ConciseExpression {
|
|
103
|
+
constructor(operands, operator, negated = false) {
|
|
104
|
+
var _a, _b;
|
|
105
|
+
this.negated = negated ? true : false;
|
|
106
|
+
this.operands = operands;
|
|
107
|
+
this.operator = operator;
|
|
108
|
+
if (!((_a = this.operands) === null || _a === void 0 ? void 0 : _a.length)) {
|
|
109
|
+
throw new Error("invalid ConciseExpression data: it must have at least one operand.");
|
|
110
|
+
}
|
|
111
|
+
if (((_b = this.operands) === null || _b === void 0 ? void 0 : _b.length) > 1 && typeof operator !== "string") {
|
|
112
|
+
throw new Error("invalid ConciseExpression data: when operands number > 1, operator must be a valid string value.");
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
static fromJson(data) {
|
|
116
|
+
var _a;
|
|
117
|
+
return new ConciseExpression((_a = data === null || data === void 0 ? void 0 : data.operands) === null || _a === void 0 ? void 0 : _a.map((item) => ConciseOperand.fromJson(item)), data === null || data === void 0 ? void 0 : data.operator, data === null || data === void 0 ? void 0 : data.negated);
|
|
118
|
+
}
|
|
119
|
+
getSqlOperator() {
|
|
120
|
+
switch (this.operator) {
|
|
121
|
+
case "=":
|
|
122
|
+
return sql_syntax_1.sqls `=`;
|
|
123
|
+
case ">":
|
|
124
|
+
return sql_syntax_1.sqls `>`;
|
|
125
|
+
case "<":
|
|
126
|
+
return sql_syntax_1.sqls `<`;
|
|
127
|
+
case ">=":
|
|
128
|
+
return sql_syntax_1.sqls `>=`;
|
|
129
|
+
case "<=":
|
|
130
|
+
return sql_syntax_1.sqls `<=`;
|
|
131
|
+
default:
|
|
132
|
+
throw new Error(`Failed to convert auth decision operator to SQL operator: unsupported operator: ${this.operator}`);
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
toAspectQuery(prefixes) {
|
|
136
|
+
var _a, _b;
|
|
137
|
+
if (((_a = this.operands) === null || _a === void 0 ? void 0 : _a.length) == 1) {
|
|
138
|
+
const [aspectId, path, isCollection] = this.operands[0].extractAspectIdAndPath(prefixes);
|
|
139
|
+
if (isCollection) {
|
|
140
|
+
return new AspectQuery_1.AspectQueryArrayNotEmpty(aspectId, path, this.negated);
|
|
141
|
+
}
|
|
142
|
+
else {
|
|
143
|
+
return new AspectQuery_1.AspectQueryExists(aspectId, path, this.negated);
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
else if (((_b = this.operands) === null || _b === void 0 ? void 0 : _b.length) == 2) {
|
|
147
|
+
const refOperand = this.operands.find((item) => item.isRef);
|
|
148
|
+
const valOperand = this.operands.find((item) => !item.isRef);
|
|
149
|
+
if (!valOperand) {
|
|
150
|
+
throw new Error("Failed to convert auth decision expression to AspectQuery: " +
|
|
151
|
+
`expression with both terms are references is currently not supported. Expression: ${this}`);
|
|
152
|
+
}
|
|
153
|
+
if (!refOperand) {
|
|
154
|
+
// it's unlikely both terms are values as our decision API has already done the evaluation for this case.
|
|
155
|
+
throw new Error("Failed to convert auth decision expression to AspectQuery: " +
|
|
156
|
+
`Terms shouldn't be both value. Expression: ${this}`);
|
|
157
|
+
}
|
|
158
|
+
const [aspectId, path, isCollection] = refOperand.extractAspectIdAndPath(prefixes);
|
|
159
|
+
if (isCollection && this.operator != "=") {
|
|
160
|
+
throw new Error("Failed to convert auth decision expression to AspectQuery: " +
|
|
161
|
+
`Only \`=\` operator is supported for collection reference. Expression: ${this}`);
|
|
162
|
+
}
|
|
163
|
+
if (isCollection && this.operator == "=") {
|
|
164
|
+
return new AspectQuery_1.AspectQueryValueInArray(valOperand.toAspectQueryValue(), aspectId, path, this.negated);
|
|
165
|
+
}
|
|
166
|
+
else {
|
|
167
|
+
return new AspectQuery_1.AspectQueryWithValue(valOperand.toAspectQueryValue(), this.getSqlOperator(), this.operands[0].isRef, aspectId, path, this.negated);
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
else {
|
|
171
|
+
throw new Error(`Failed to convert auth decision expression to AspectQuery: more than 2 operands found. Expression: ${this}`);
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
exports.ConciseExpression = ConciseExpression;
|
|
176
|
+
class ConciseOperand {
|
|
177
|
+
constructor(isRef, value) {
|
|
178
|
+
if (typeof isRef !== "boolean") {
|
|
179
|
+
throw new Error("Invalid ConciseOperand data: isRef must be a boolean value.");
|
|
180
|
+
}
|
|
181
|
+
this.isRef = isRef;
|
|
182
|
+
if (isRef && typeof value !== "string") {
|
|
183
|
+
throw new Error("Invalid ConciseOperand data: when `isRef`== true, `value` must be a string value (ref string).");
|
|
184
|
+
}
|
|
185
|
+
this.value = value;
|
|
186
|
+
}
|
|
187
|
+
static fromJson(data) {
|
|
188
|
+
return new ConciseOperand(data === null || data === void 0 ? void 0 : data.isRef, data === null || data === void 0 ? void 0 : data.value);
|
|
189
|
+
}
|
|
190
|
+
refString() {
|
|
191
|
+
if (!this.isRef) {
|
|
192
|
+
throw new Error("Cannot convert non-ref term to a ref string");
|
|
193
|
+
}
|
|
194
|
+
else {
|
|
195
|
+
if (typeof this.value === "string") {
|
|
196
|
+
return this.value;
|
|
197
|
+
}
|
|
198
|
+
else {
|
|
199
|
+
throw new Error(`ref term has non-string type value: ${this.value}`);
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
isCollectionRef() {
|
|
204
|
+
return this.refString().endsWith("[_]");
|
|
205
|
+
}
|
|
206
|
+
refStringWithoutPrefixes(prefixes) {
|
|
207
|
+
const sortedPrefixes = prefixes.sort((a, b) => b.length - a.length);
|
|
208
|
+
return sortedPrefixes.reduce((ref, prefix) => {
|
|
209
|
+
if (ref.startsWith(prefix)) {
|
|
210
|
+
return ref.substring(prefix.length);
|
|
211
|
+
}
|
|
212
|
+
else {
|
|
213
|
+
return ref;
|
|
214
|
+
}
|
|
215
|
+
}, this.refString());
|
|
216
|
+
}
|
|
217
|
+
extractAspectIdAndPath(prefixes) {
|
|
218
|
+
// make it work for both "input.object.record" & "input.object.record." prefixe input
|
|
219
|
+
// we remove the first leading `.` char (if any)
|
|
220
|
+
let ref = this.refStringWithoutPrefixes(prefixes).replace(/^\./, "");
|
|
221
|
+
const isCollection = this.isCollectionRef();
|
|
222
|
+
if (isCollection) {
|
|
223
|
+
ref = ref.replace(/\[_\]$/, "");
|
|
224
|
+
}
|
|
225
|
+
const parts = ref.split(".").filter((item) => item);
|
|
226
|
+
if (parts.length < 2) {
|
|
227
|
+
return [ref, [], isCollection];
|
|
228
|
+
}
|
|
229
|
+
else {
|
|
230
|
+
return [parts[0], parts.slice(1, parts.length), isCollection];
|
|
231
|
+
}
|
|
232
|
+
}
|
|
233
|
+
toAspectQueryValue() {
|
|
234
|
+
if (this.isRef) {
|
|
235
|
+
throw new Error(`Attempt to covert reference \`Operand\` to \`AspectQueryValue\`: ${this}`);
|
|
236
|
+
}
|
|
237
|
+
return new AspectQuery_1.AspectQueryValue(this.value);
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
exports.ConciseOperand = ConciseOperand;
|
|
241
|
+
//# sourceMappingURL=AuthDecision.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AuthDecision.js","sourceRoot":"","sources":["../../src/opa/AuthDecision.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import AuthDecision from "./AuthDecision";
|
|
2
|
+
export declare type AuthDecisionReqConfig = {
|
|
3
|
+
operationUri: string;
|
|
4
|
+
resourceUri?: string;
|
|
5
|
+
unknowns?: string[];
|
|
6
|
+
rawAst?: boolean;
|
|
7
|
+
explain?: string;
|
|
8
|
+
pretty?: boolean;
|
|
9
|
+
humanReadable?: boolean;
|
|
10
|
+
concise?: boolean;
|
|
11
|
+
input?: {
|
|
12
|
+
[key: string]: any;
|
|
13
|
+
};
|
|
14
|
+
};
|
|
15
|
+
declare class AuthDecisionQueryClient {
|
|
16
|
+
private readonly authApiBaseUrl;
|
|
17
|
+
readonly skipQuery: boolean;
|
|
18
|
+
static fetchOptions: RequestInit;
|
|
19
|
+
fetchOptions: RequestInit;
|
|
20
|
+
constructor(authApiBaseUrl: string, skipQuery?: boolean);
|
|
21
|
+
getAuthDecision(config: AuthDecisionReqConfig, jwtToken?: string): Promise<AuthDecision>;
|
|
22
|
+
}
|
|
23
|
+
export default AuthDecisionQueryClient;
|