@mondomob/gae-node-nestjs 8.2.1 → 9.0.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/.history/src/gcloud/storage.provider_20200522143909.ts +41 -0
- package/.history/src/gcloud/storage.provider_20200616175358.ts +41 -0
- package/CHANGELOG.md +57 -0
- package/README.md +14 -0
- package/dist/_test/mocks.js +11 -7
- package/dist/_test/mocks.js.map +1 -1
- package/dist/_test/request-scope-test-utils.js +5 -4
- package/dist/_test/request-scope-test-utils.js.map +1 -1
- package/dist/auth/auth-user.model.js +16 -16
- package/dist/auth/auth-user.model.js.map +1 -1
- package/dist/auth/auth.configurer.js +23 -23
- package/dist/auth/auth.configurer.js.map +1 -1
- package/dist/auth/auth.controller.js +137 -116
- package/dist/auth/auth.controller.js.map +1 -1
- package/dist/auth/auth.graphql.d.ts +36 -0
- package/dist/auth/auth.graphql.js +111 -0
- package/dist/auth/auth.graphql.js.map +1 -0
- package/dist/auth/auth.graphqls +21 -0
- package/dist/auth/auth.guard.js +20 -15
- package/dist/auth/auth.guard.js.map +1 -1
- package/dist/auth/auth.repository.js +10 -10
- package/dist/auth/auth.repository.js.map +1 -1
- package/dist/auth/auth.resolver.js +47 -46
- package/dist/auth/auth.resolver.js.map +1 -1
- package/dist/auth/auth.service.js +47 -45
- package/dist/auth/auth.service.js.map +1 -1
- package/dist/auth/auth.task.controller.js +24 -24
- package/dist/auth/auth.task.controller.js.map +1 -1
- package/dist/auth/auth.task.service.js +4 -4
- package/dist/auth/auth.task.service.js.map +1 -1
- package/dist/auth/csrf.interceptor.js +6 -4
- package/dist/auth/csrf.interceptor.js.map +1 -1
- package/dist/auth/invite-user.service.js +29 -28
- package/dist/auth/invite-user.service.js.map +1 -1
- package/dist/auth/login-identifier.repository.js +3 -3
- package/dist/auth/login-identifier.repository.js.map +1 -1
- package/dist/auth/password-reset.service.js +17 -17
- package/dist/auth/password-reset.service.js.map +1 -1
- package/dist/auth/user.service.js +21 -20
- package/dist/auth/user.service.js.map +1 -1
- package/dist/configure.js +4 -3
- package/dist/configure.js.map +1 -1
- package/dist/context/context-middleware.js +6 -6
- package/dist/context/context-middleware.js.map +1 -1
- package/dist/context/context-request-scope.js +5 -4
- package/dist/context/context-request-scope.js.map +1 -1
- package/dist/datastore/context.js +5 -3
- package/dist/datastore/context.js.map +1 -1
- package/dist/datastore/datastore.provider.js +5 -5
- package/dist/datastore/datastore.provider.js.map +1 -1
- package/dist/datastore/filters.js +4 -3
- package/dist/datastore/filters.js.map +1 -1
- package/dist/datastore/loader.js +5 -5
- package/dist/datastore/loader.js.map +1 -1
- package/dist/datastore/repository.js +9 -8
- package/dist/datastore/repository.js.map +1 -1
- package/dist/filter.js +3 -3
- package/dist/filter.js.map +1 -1
- package/dist/gcloud/logging.js +1 -1
- package/dist/gcloud/logging.js.map +1 -1
- package/dist/gcloud/storage.provider.js +5 -5
- package/dist/gcloud/storage.provider.js.map +1 -1
- package/dist/gcloud/tasks.js +2 -2
- package/dist/gcloud/tasks.js.map +1 -1
- package/dist/index.js +5 -5
- package/dist/index.js.map +1 -1
- package/dist/logging/logging-request-scope.js +7 -6
- package/dist/logging/logging-request-scope.js.map +1 -1
- package/dist/logging/logging.js +8 -7
- package/dist/logging/logging.js.map +1 -1
- package/dist/mail/gmail/gmail.configurer.js +6 -6
- package/dist/mail/gmail/gmail.configurer.js.map +1 -1
- package/dist/mail/gmail/gmail.controller.js +19 -17
- package/dist/mail/gmail/gmail.controller.js.map +1 -1
- package/dist/mail/gmail/gmail.sender.js +6 -6
- package/dist/mail/gmail/gmail.sender.js.map +1 -1
- package/dist/mail/gmail/stored.credentials.repository.js +3 -3
- package/dist/mail/gmail/stored.credentials.repository.js.map +1 -1
- package/dist/mail/mail-logging.sender.js +4 -4
- package/dist/mail/mail-logging.sender.js.map +1 -1
- package/dist/mail/mail-subject.sender.js +6 -6
- package/dist/mail/mail-subject.sender.js.map +1 -1
- package/dist/mail/mail-whitelist.sender.js +5 -5
- package/dist/mail/mail-whitelist.sender.js.map +1 -1
- package/dist/mail/mail.diverter.js +8 -8
- package/dist/mail/mail.diverter.js.map +1 -1
- package/dist/mail/smtp/smtp.sender.js +6 -6
- package/dist/mail/smtp/smtp.sender.js.map +1 -1
- package/dist/mail-templates/base.js +4 -2
- package/dist/mail-templates/base.js.map +1 -1
- package/dist/mail-templates/invite.js +4 -3
- package/dist/mail-templates/invite.js.map +1 -1
- package/dist/module.js +15 -13
- package/dist/module.js.map +1 -1
- package/dist/request-scope/request-scope.js +16 -10
- package/dist/request-scope/request-scope.js.map +1 -1
- package/dist/request-scope/request-scope.middleware.js +6 -6
- package/dist/request-scope/request-scope.middleware.js.map +1 -1
- package/dist/search/search.service.js +6 -6
- package/dist/search/search.service.js.map +1 -1
- package/dist/search/searchable.repository.js +2 -2
- package/dist/search/searchable.repository.js.map +1 -1
- package/dist/types.js +3 -2
- package/dist/types.js.map +1 -1
- package/dist/util/arrays.js +2 -1
- package/dist/util/arrays.js.map +1 -1
- package/dist/util/guards.js +2 -1
- package/dist/util/guards.js.map +1 -1
- package/dist/util/index.js +1 -1
- package/dist/util/index.js.map +1 -1
- package/dist/util/nestjs.js +2 -1
- package/dist/util/nestjs.js.map +1 -1
- package/dist/util/types.js +4 -2
- package/dist/util/types.js.map +1 -1
- package/dist/validator.js +1 -1
- package/dist/validator.js.map +1 -1
- package/package.json +32 -31
- package/server-start.js +17 -42
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { Inject, Injectable } from '@nestjs/common';
|
|
2
|
+
import { Configuration } from '../configuration';
|
|
3
|
+
import { Bucket, StorageOptions, Storage } from '@google-cloud/storage';
|
|
4
|
+
import { createLogger, Logger } from './logging';
|
|
5
|
+
|
|
6
|
+
@Injectable()
|
|
7
|
+
export class StorageProvider {
|
|
8
|
+
private readonly _storage: Storage;
|
|
9
|
+
private readonly _defaultBucket: Bucket;
|
|
10
|
+
private readonly logger: Logger;
|
|
11
|
+
|
|
12
|
+
constructor(@Inject('Configuration') private readonly configurationProvider: Configuration) {
|
|
13
|
+
this.logger = createLogger('storage');
|
|
14
|
+
const config: StorageOptions = {};
|
|
15
|
+
if (configurationProvider.isDevelopment()) {
|
|
16
|
+
this.logger.info(
|
|
17
|
+
'Application is running locally, using keyfile.json credentials to connect to Google Cloud Storage',
|
|
18
|
+
);
|
|
19
|
+
config.keyFilename = './keyfile.json';
|
|
20
|
+
}
|
|
21
|
+
this._storage = new Storage(config);
|
|
22
|
+
this.logger.info(`Default Google Cloud Storage bucket: ${configurationProvider.bucket}`);
|
|
23
|
+
this._defaultBucket = this.storage.bucket(configurationProvider.bucket);
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
get storage(): Storage {
|
|
27
|
+
return this._storage;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
get defaultBucket(): Bucket {
|
|
31
|
+
return this._defaultBucket;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
async getDefaultBucketResumableUploadUrl(fileId: string): Promise<string> {
|
|
35
|
+
const gcsFile = this._defaultBucket.file(fileId);
|
|
36
|
+
const urls = await gcsFile.createResumableUpload({
|
|
37
|
+
origin: this.configurationProvider.host,
|
|
38
|
+
});
|
|
39
|
+
return urls[0];
|
|
40
|
+
}
|
|
41
|
+
}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { Inject, Injectable } from '@nestjs/common';
|
|
2
|
+
// import { Configuration } from '../configuration';
|
|
3
|
+
import { Bucket, StorageOptions, Storage } from '@google-cloud/storage';
|
|
4
|
+
import { createLogger, Logger } from './logging';
|
|
5
|
+
|
|
6
|
+
@Injectable()
|
|
7
|
+
export class StorageProvider {
|
|
8
|
+
private readonly _storage: Storage;
|
|
9
|
+
private readonly _defaultBucket: Bucket;
|
|
10
|
+
private readonly logger: Logger;
|
|
11
|
+
|
|
12
|
+
constructor(@Inject('Configuration') private readonly configurationProvider: Configuration) {
|
|
13
|
+
this.logger = createLogger('storage');
|
|
14
|
+
const config: StorageOptions = {};
|
|
15
|
+
if (configurationProvider.isDevelopment()) {
|
|
16
|
+
this.logger.info(
|
|
17
|
+
'Application is running locally, using keyfile.json credentials to connect to Google Cloud Storage',
|
|
18
|
+
);
|
|
19
|
+
config.keyFilename = './keyfile.json';
|
|
20
|
+
}
|
|
21
|
+
this._storage = new Storage(config);
|
|
22
|
+
this.logger.info(`Default Google Cloud Storage bucket: ${configurationProvider.bucket}`);
|
|
23
|
+
this._defaultBucket = this.storage.bucket(configurationProvider.bucket);
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
get storage(): Storage {
|
|
27
|
+
return this._storage;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
get defaultBucket(): Bucket {
|
|
31
|
+
return this._defaultBucket;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
async getDefaultBucketResumableUploadUrl(fileId: string): Promise<string> {
|
|
35
|
+
const gcsFile = this._defaultBucket.file(fileId);
|
|
36
|
+
const urls = await gcsFile.createResumableUpload({
|
|
37
|
+
origin: this.configurationProvider.host,
|
|
38
|
+
});
|
|
39
|
+
return urls[0];
|
|
40
|
+
}
|
|
41
|
+
}
|
package/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,60 @@
|
|
|
1
|
+
## 9.0.1 (2023-08-17)
|
|
2
|
+
|
|
3
|
+
Minor change in the server-start script to remove use of 'localhost' when starting and listening for start of datastore emulator.
|
|
4
|
+
|
|
5
|
+
## 9.0.0 (2021-11-10)
|
|
6
|
+
|
|
7
|
+
- Update to NestJS 8
|
|
8
|
+
- Update to io-ts 2
|
|
9
|
+
- Update other non-breaking dependencies
|
|
10
|
+
- Update to TypeScript 4.4 (some dependencies required this to build)
|
|
11
|
+
|
|
12
|
+
### BREAKING CHANGES
|
|
13
|
+
|
|
14
|
+
#### NestJS 8:
|
|
15
|
+
This may not require any changes but please read official migration guide:
|
|
16
|
+
[https://docs.nestjs.com/migration-guide](https://docs.nestjs.com/migration-guide)
|
|
17
|
+
|
|
18
|
+
In general:
|
|
19
|
+
|
|
20
|
+
- Update all nest dependencies to latest
|
|
21
|
+
- Update rxjs to v7
|
|
22
|
+
|
|
23
|
+
#### IOTS 2:
|
|
24
|
+
A few changes likely required for this:
|
|
25
|
+
|
|
26
|
+
- Add `fp-ts` dependency
|
|
27
|
+
- Change any code using isLeft as example below
|
|
28
|
+
|
|
29
|
+
OLD:
|
|
30
|
+
```typescript
|
|
31
|
+
import { reporter } from 'io-ts-reporters';
|
|
32
|
+
import { ThrowReporter } from 'io-ts/lib/ThrowReporter';
|
|
33
|
+
...
|
|
34
|
+
|
|
35
|
+
const validationResult = schema.decode(inputValue);
|
|
36
|
+
|
|
37
|
+
if (validationResult.isLeft()) {
|
|
38
|
+
throw ThrowReporter.report(validationResult);
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
return validationResult.value;
|
|
42
|
+
```
|
|
43
|
+
NEW:
|
|
44
|
+
```typescript
|
|
45
|
+
import iotsReporter from 'io-ts-reporters';
|
|
46
|
+
import { isLeft } from 'fp-ts/lib/Either';
|
|
47
|
+
...
|
|
48
|
+
|
|
49
|
+
const validationResult = schema.decode(inputValue);
|
|
50
|
+
|
|
51
|
+
if (isLeft(validationResult)) {
|
|
52
|
+
throw new Error(iotsReporter.report(validationResult).join(', '));
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
return validationResult.right;
|
|
56
|
+
```
|
|
57
|
+
|
|
1
58
|
## 8.2.1 (2021-11-08)
|
|
2
59
|
|
|
3
60
|
- Add SearchableRespository reindex method to batch requests to cater for 200 max allowed for by GAE search service.
|
package/README.md
CHANGED
|
@@ -1,5 +1,19 @@
|
|
|
1
1
|
# gae-node-nestjs
|
|
2
|
+
## New package
|
|
3
|
+
Please note that while this package will have priority fixes for existing projects, our primary focus has moved to
|
|
4
|
+
our [gae-js](https://github.com/mondo-mob/gae-js) libraries.
|
|
2
5
|
|
|
6
|
+
While this library offers a lot of utilities and help for using `nestjs`, `graphql`, `datastore` the new libraries offer
|
|
7
|
+
more targeted libraries, with the following benefits:
|
|
8
|
+
|
|
9
|
+
- Not being tied to `nestjs` and easily used in `express`, `cloud functions`, or others of your choosing
|
|
10
|
+
- A library for using `firestore` natively
|
|
11
|
+
- A library for those still using `datastore` mode
|
|
12
|
+
- Other libraries for specifics. Please see the readme for details.
|
|
13
|
+
|
|
14
|
+
A lot of the underlying utilities have been ported across to the new libraries.
|
|
15
|
+
|
|
16
|
+
## About
|
|
3
17
|
Node framework using [nestjs](https://nestjs.com/) and integrating with Google App Engine, particularly Google Data Store.
|
|
4
18
|
|
|
5
19
|
|
package/dist/_test/mocks.js
CHANGED
|
@@ -3,21 +3,25 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.partialInstance = exports.isMock = exports.MockMailSender = exports.mockContext = exports.testConfiguration = void 0;
|
|
4
4
|
const ts_mockito_1 = require("ts-mockito");
|
|
5
5
|
const loader_1 = require("../datastore/loader");
|
|
6
|
-
|
|
6
|
+
const testConfiguration = (overrides) => (Object.assign({ auth: {}, bucket: 'required but not important for test', environment: 'required but not important for test', gmailUser: 'required but not important for test', host: 'required but not important for test', location: 'required but not important for test', projectId: 'required but not important for test', systemSecret: Buffer.from([]), isDevelopment() {
|
|
7
7
|
return true;
|
|
8
8
|
} }, overrides));
|
|
9
|
-
exports.
|
|
10
|
-
|
|
9
|
+
exports.testConfiguration = testConfiguration;
|
|
10
|
+
const mockContext = () => {
|
|
11
|
+
const datastoreLoader = (0, ts_mockito_1.mock)(loader_1.DatastoreLoader);
|
|
11
12
|
const context = {
|
|
12
|
-
datastore: ts_mockito_1.instance(datastoreLoader),
|
|
13
|
+
datastore: (0, ts_mockito_1.instance)(datastoreLoader),
|
|
13
14
|
};
|
|
14
|
-
ts_mockito_1.when(datastoreLoader.inTransaction(ts_mockito_1.anyFunction())).thenCall((cb) => cb(context));
|
|
15
|
+
(0, ts_mockito_1.when)(datastoreLoader.inTransaction((0, ts_mockito_1.anyFunction)())).thenCall((cb) => cb(context));
|
|
15
16
|
return context;
|
|
16
17
|
};
|
|
18
|
+
exports.mockContext = mockContext;
|
|
17
19
|
class MockMailSender {
|
|
18
20
|
async send(context, mailOptions) { }
|
|
19
21
|
}
|
|
20
22
|
exports.MockMailSender = MockMailSender;
|
|
21
|
-
|
|
22
|
-
exports.
|
|
23
|
+
const isMock = (obj) => '__tsmockitoMocker' in obj;
|
|
24
|
+
exports.isMock = isMock;
|
|
25
|
+
const partialInstance = (props = {}) => (Object.assign({}, props));
|
|
26
|
+
exports.partialInstance = partialInstance;
|
|
23
27
|
//# sourceMappingURL=mocks.js.map
|
package/dist/_test/mocks.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mocks.js","sourceRoot":"","sources":["../../src/_test/mocks.ts"],"names":[],"mappings":";;;AAAA,2CAA+D;AAC/D,gDAAsD;
|
|
1
|
+
{"version":3,"file":"mocks.js","sourceRoot":"","sources":["../../src/_test/mocks.ts"],"names":[],"mappings":";;;AAAA,2CAA+D;AAC/D,gDAAsD;AAI/C,MAAM,iBAAiB,GAAG,CAAC,SAAkC,EAAiB,EAAE,CAAC,iBACtF,IAAI,EAAE,EAAE,EACR,MAAM,EAAE,qCAAqC,EAC7C,WAAW,EAAE,qCAAqC,EAClD,SAAS,EAAE,qCAAqC,EAChD,IAAI,EAAE,qCAAqC,EAC3C,QAAQ,EAAE,qCAAqC,EAC/C,SAAS,EAAE,qCAAqC,EAChD,YAAY,EAAE,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,EAC7B,aAAa;QACX,OAAO,IAAI,CAAC;IACd,CAAC,IACE,SAAS,EACZ,CAAC;AAbU,QAAA,iBAAiB,qBAa3B;AAEI,MAAM,WAAW,GAAG,GAAG,EAAE;IAC9B,MAAM,eAAe,GAAG,IAAA,iBAAI,EAAC,wBAAe,CAAC,CAAC;IAE9C,MAAM,OAAO,GAAG;QACd,SAAS,EAAE,IAAA,qBAAQ,EAAC,eAAe,CAAC;KAC1B,CAAC;IAEb,IAAA,iBAAI,EAAC,eAAe,CAAC,aAAa,CAAC,IAAA,wBAAW,GAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAO,EAAE,EAAE,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC;IAEtF,OAAO,OAAO,CAAC;AACjB,CAAC,CAAC;AAVW,QAAA,WAAW,eAUtB;AAEF,MAAa,cAAc;IACzB,KAAK,CAAC,IAAI,CAAC,OAAgB,EAAE,WAAoB,IAAkB,CAAC;CACrE;AAFD,wCAEC;AAEM,MAAM,MAAM,GAAG,CAAC,GAAQ,EAAE,EAAE,CAAC,mBAAmB,IAAI,GAAG,CAAC;AAAlD,QAAA,MAAM,UAA4C;AAaxD,MAAM,eAAe,GAAG,CAAI,QAAoB,EAAE,EAAK,EAAE,CAAC,CAAC,kBAAK,KAAK,CAAQ,CAAA,CAAC;AAAxE,QAAA,eAAe,mBAAyD"}
|
|
@@ -4,14 +4,15 @@ exports.interceptorTest = void 0;
|
|
|
4
4
|
const ts_mockito_1 = require("ts-mockito");
|
|
5
5
|
const request_scope_middleware_1 = require("../request-scope/request-scope.middleware");
|
|
6
6
|
const mocks_1 = require("./mocks");
|
|
7
|
-
const configProvider = mocks_1.partialInstance({ requestScope: { enabled: true } });
|
|
8
|
-
|
|
9
|
-
const request = mocks_1.isMock(req) ? ts_mockito_1.instance(req) : req;
|
|
7
|
+
const configProvider = (0, mocks_1.partialInstance)({ requestScope: { enabled: true } });
|
|
8
|
+
const interceptorTest = (interceptor, req, testAssertions) => {
|
|
9
|
+
const request = (0, mocks_1.isMock)(req) ? (0, ts_mockito_1.instance)(req) : req;
|
|
10
10
|
let nextCalled = false;
|
|
11
|
-
new request_scope_middleware_1.RequestScopeMiddleware(configProvider, [interceptor]).use(request, ts_mockito_1.instance(ts_mockito_1.mock()), () => {
|
|
11
|
+
new request_scope_middleware_1.RequestScopeMiddleware(configProvider, [interceptor]).use(request, (0, ts_mockito_1.instance)((0, ts_mockito_1.mock)()), () => {
|
|
12
12
|
nextCalled = true;
|
|
13
13
|
testAssertions();
|
|
14
14
|
});
|
|
15
15
|
expect(nextCalled).toBe(true);
|
|
16
16
|
};
|
|
17
|
+
exports.interceptorTest = interceptorTest;
|
|
17
18
|
//# sourceMappingURL=request-scope-test-utils.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"request-scope-test-utils.js","sourceRoot":"","sources":["../../src/_test/request-scope-test-utils.ts"],"names":[],"mappings":";;;AAAA,2CAA4C;AAE5C,wFAAmF;AACnF,mCAAkD;AAIlD,MAAM,cAAc,GAAG,uBAAe,
|
|
1
|
+
{"version":3,"file":"request-scope-test-utils.js","sourceRoot":"","sources":["../../src/_test/request-scope-test-utils.ts"],"names":[],"mappings":";;;AAAA,2CAA4C;AAE5C,wFAAmF;AACnF,mCAAkD;AAIlD,MAAM,cAAc,GAAG,IAAA,uBAAe,EAAgB,EAAE,YAAY,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC;AAEpF,MAAM,eAAe,GAAG,CAC7B,WAAoC,EACpC,GAAM,EACN,cAA0B,EAC1B,EAAE;IACF,MAAM,OAAO,GAAG,IAAA,cAAM,EAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAA,qBAAQ,EAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;IAClD,IAAI,UAAU,GAAG,KAAK,CAAC;IACvB,IAAI,iDAAsB,CAAC,cAAc,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,EAAE,IAAA,qBAAQ,EAAC,IAAA,iBAAI,GAAY,CAAC,EAAE,GAAG,EAAE;QACtG,UAAU,GAAG,IAAI,CAAC;QAClB,cAAc,EAAE,CAAC;IACnB,CAAC,CAAC,CAAC;IACH,MAAM,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAChC,CAAC,CAAC;AAZW,QAAA,eAAe,mBAY1B"}
|
|
@@ -5,29 +5,29 @@ const tslib_1 = require("tslib");
|
|
|
5
5
|
const graphql_1 = require("@nestjs/graphql");
|
|
6
6
|
let Credentials = class Credentials {
|
|
7
7
|
};
|
|
8
|
-
tslib_1.__decorate([
|
|
9
|
-
graphql_1.Field(),
|
|
10
|
-
tslib_1.__metadata("design:type", String)
|
|
8
|
+
(0, tslib_1.__decorate)([
|
|
9
|
+
(0, graphql_1.Field)(),
|
|
10
|
+
(0, tslib_1.__metadata)("design:type", String)
|
|
11
11
|
], Credentials.prototype, "username", void 0);
|
|
12
|
-
tslib_1.__decorate([
|
|
13
|
-
graphql_1.Field(),
|
|
14
|
-
tslib_1.__metadata("design:type", String)
|
|
12
|
+
(0, tslib_1.__decorate)([
|
|
13
|
+
(0, graphql_1.Field)(),
|
|
14
|
+
(0, tslib_1.__metadata)("design:type", String)
|
|
15
15
|
], Credentials.prototype, "type", void 0);
|
|
16
|
-
Credentials = tslib_1.__decorate([
|
|
17
|
-
graphql_1.ObjectType()
|
|
16
|
+
Credentials = (0, tslib_1.__decorate)([
|
|
17
|
+
(0, graphql_1.ObjectType)()
|
|
18
18
|
], Credentials);
|
|
19
19
|
let AuthUser = class AuthUser {
|
|
20
20
|
};
|
|
21
|
-
tslib_1.__decorate([
|
|
22
|
-
graphql_1.Field(),
|
|
23
|
-
tslib_1.__metadata("design:type", Credentials)
|
|
21
|
+
(0, tslib_1.__decorate)([
|
|
22
|
+
(0, graphql_1.Field)(),
|
|
23
|
+
(0, tslib_1.__metadata)("design:type", Credentials)
|
|
24
24
|
], AuthUser.prototype, "credentials", void 0);
|
|
25
|
-
tslib_1.__decorate([
|
|
26
|
-
graphql_1.Field(() => [String]),
|
|
27
|
-
tslib_1.__metadata("design:type", Array)
|
|
25
|
+
(0, tslib_1.__decorate)([
|
|
26
|
+
(0, graphql_1.Field)(() => [String]),
|
|
27
|
+
(0, tslib_1.__metadata)("design:type", Array)
|
|
28
28
|
], AuthUser.prototype, "roles", void 0);
|
|
29
|
-
AuthUser = tslib_1.__decorate([
|
|
30
|
-
graphql_1.ObjectType()
|
|
29
|
+
AuthUser = (0, tslib_1.__decorate)([
|
|
30
|
+
(0, graphql_1.ObjectType)()
|
|
31
31
|
], AuthUser);
|
|
32
32
|
exports.AuthUser = AuthUser;
|
|
33
33
|
//# sourceMappingURL=auth-user.model.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth-user.model.js","sourceRoot":"","sources":["../../src/auth/auth-user.model.ts"],"names":[],"mappings":";;;;AAAA,6CAAoD;AAGpD,IAAM,WAAW,GAAjB,MAAM,WAAW;CAKhB,CAAA;AAHC;IADC,eAAK,
|
|
1
|
+
{"version":3,"file":"auth-user.model.js","sourceRoot":"","sources":["../../src/auth/auth-user.model.ts"],"names":[],"mappings":";;;;AAAA,6CAAoD;AAGpD,IAAM,WAAW,GAAjB,MAAM,WAAW;CAKhB,CAAA;AAHC;IADC,IAAA,eAAK,GAAE;;6CACS;AAEjB;IADC,IAAA,eAAK,GAAE;;yCACK;AAJT,WAAW;IADhB,IAAA,oBAAU,GAAE;GACP,WAAW,CAKhB;AAGD,IAAa,QAAQ,GAArB,MAAa,QAAQ;CAKpB,CAAA;AAHC;IADC,IAAA,eAAK,GAAE;2CACM,WAAW;6CAAC;AAE1B;IADC,IAAA,eAAK,EAAC,GAAG,EAAE,CAAC,CAAC,MAAO,CAAC,CAAC;;uCACE;AAJd,QAAQ;IADpB,IAAA,oBAAU,GAAE;GACA,QAAQ,CAKpB;AALY,4BAAQ"}
|
|
@@ -6,7 +6,6 @@ const common_1 = require("@nestjs/common");
|
|
|
6
6
|
const jsonwebtoken_1 = require("jsonwebtoken");
|
|
7
7
|
const lodash_1 = require("lodash");
|
|
8
8
|
const passport = require("passport");
|
|
9
|
-
const passport_1 = require("passport");
|
|
10
9
|
const passport_auth0_1 = require("passport-auth0");
|
|
11
10
|
const passport_google_oauth20_1 = require("passport-google-oauth20");
|
|
12
11
|
const passport_local_1 = require("passport-local");
|
|
@@ -31,15 +30,15 @@ let AuthConfigurer = class AuthConfigurer {
|
|
|
31
30
|
this.userService = userService;
|
|
32
31
|
this.authService = authService;
|
|
33
32
|
this.authCallbacks = authCallbacks;
|
|
34
|
-
this.validate = async (username, password, done) => this.validateAuth(done, () => this.authService.validateUser(context_1.newContext(this.datastore), username, password));
|
|
35
|
-
this.validateFakeLogin = async (req, username, password, done) => this.validateAuth(done, () => this.authService.validateFakeLogin(context_1.newContext(this.datastore), req.headers['x-fake-secret'], username, lodash_1.get(req, 'body.name', ''), lodash_1.get(req, 'body.roles', []), lodash_1.get(req, 'body.orgId', ''), lodash_1.get(req, 'body.props', {})));
|
|
36
|
-
this.validateGmail = async (accessToken, refreshToken, profile, done) => this.validateAuth(done, () => this.authService.validateUserGoogle(context_1.newContext(this.datastore), profile));
|
|
37
|
-
this.validateSaml = (profile, done) => this.validateAuth(done, () => this.authService.validateUserSaml(context_1.newContext(this.datastore), profile));
|
|
38
|
-
this.validateOidc = (_issuer, _sub, profile, _accessToken, _refreshToken, done) => this.validateAuth(done, () => this.authService.validateUserOidc(context_1.newContext(this.datastore), profile, !!this.configuration.auth.oidc.replaceAuth, this.configuration.auth.oidc.newUserRoles));
|
|
33
|
+
this.validate = async (username, password, done) => this.validateAuth(done, () => this.authService.validateUser((0, context_1.newContext)(this.datastore), username, password));
|
|
34
|
+
this.validateFakeLogin = async (req, username, password, done) => this.validateAuth(done, () => this.authService.validateFakeLogin((0, context_1.newContext)(this.datastore), req.headers['x-fake-secret'], username, (0, lodash_1.get)(req, 'body.name', ''), (0, lodash_1.get)(req, 'body.roles', []), (0, lodash_1.get)(req, 'body.orgId', ''), (0, lodash_1.get)(req, 'body.props', {})));
|
|
35
|
+
this.validateGmail = async (accessToken, refreshToken, profile, done) => this.validateAuth(done, () => this.authService.validateUserGoogle((0, context_1.newContext)(this.datastore), profile));
|
|
36
|
+
this.validateSaml = (profile, done) => this.validateAuth(done, () => this.authService.validateUserSaml((0, context_1.newContext)(this.datastore), profile));
|
|
37
|
+
this.validateOidc = (_issuer, _sub, profile, _accessToken, _refreshToken, done) => this.validateAuth(done, () => this.authService.validateUserOidc((0, context_1.newContext)(this.datastore), profile, !!this.configuration.auth.oidc.replaceAuth, this.configuration.auth.oidc.newUserRoles));
|
|
39
38
|
this.validateAuth0 = (accessToken, refreshToken, extraParams, profile, done) => this.validateAuth(done, () => {
|
|
40
|
-
const decoded = jsonwebtoken_1.decode(extraParams.id_token);
|
|
39
|
+
const decoded = (0, jsonwebtoken_1.decode)(extraParams.id_token);
|
|
41
40
|
const { email, name } = decoded;
|
|
42
|
-
const normalisedEmail = user_service_1.normaliseEmail(email);
|
|
41
|
+
const normalisedEmail = (0, user_service_1.normaliseEmail)(email);
|
|
43
42
|
const namespace = this.configuration.auth.auth0.namespace;
|
|
44
43
|
const roles = decoded[`${namespace}roles`];
|
|
45
44
|
const orgId = decoded[`${namespace}orgId`];
|
|
@@ -54,7 +53,7 @@ let AuthConfigurer = class AuthConfigurer {
|
|
|
54
53
|
if (!roles || !roles.length) {
|
|
55
54
|
this.logger.warn(`No roles were provided by auth0 for ${normalisedEmail}`);
|
|
56
55
|
}
|
|
57
|
-
return this.authService.validateUserAuth0(context_1.newContext(this.datastore), id, normalisedEmail, name, orgId, roles, props);
|
|
56
|
+
return this.authService.validateUserAuth0((0, context_1.newContext)(this.datastore), id, normalisedEmail, name, orgId, roles, props);
|
|
58
57
|
});
|
|
59
58
|
this.validateAuth = async (done, auth) => {
|
|
60
59
|
try {
|
|
@@ -70,12 +69,12 @@ let AuthConfigurer = class AuthConfigurer {
|
|
|
70
69
|
done(null, false, ex);
|
|
71
70
|
}
|
|
72
71
|
else {
|
|
73
|
-
done(new common_1.UnauthorizedException('Internal error'
|
|
72
|
+
done(new common_1.UnauthorizedException(ex, 'Internal error'), false);
|
|
74
73
|
}
|
|
75
74
|
}
|
|
76
75
|
};
|
|
77
76
|
this.datastore = datastoreProvider.datastore;
|
|
78
|
-
this.logger = logging_1.createLogger('auth');
|
|
77
|
+
this.logger = (0, logging_1.createLogger)('auth');
|
|
79
78
|
this.init();
|
|
80
79
|
}
|
|
81
80
|
init() {
|
|
@@ -86,7 +85,7 @@ let AuthConfigurer = class AuthConfigurer {
|
|
|
86
85
|
done(null, { id: user.id });
|
|
87
86
|
});
|
|
88
87
|
if (this.configuration.auth.local && this.configuration.auth.local.enabled) {
|
|
89
|
-
|
|
88
|
+
passport.use(LOCAL_SIGNIN, new passport_local_1.Strategy({}, this.validate));
|
|
90
89
|
}
|
|
91
90
|
if (this.configuration.auth.fake && this.configuration.auth.fake.enabled) {
|
|
92
91
|
if (!this.configuration.isDevelopment()) {
|
|
@@ -95,10 +94,10 @@ let AuthConfigurer = class AuthConfigurer {
|
|
|
95
94
|
}
|
|
96
95
|
this.logger.warn('Fake login is enabled');
|
|
97
96
|
}
|
|
98
|
-
|
|
97
|
+
passport.use(FAKE_SIGNIN, new passport_local_1.Strategy({ passReqToCallback: true }, this.validateFakeLogin));
|
|
99
98
|
}
|
|
100
99
|
if (this.configuration.auth.google && this.configuration.auth.google.enabled) {
|
|
101
|
-
|
|
100
|
+
passport.use(new passport_google_oauth20_1.Strategy({
|
|
102
101
|
clientID: this.configuration.auth.google.clientId,
|
|
103
102
|
clientSecret: this.configuration.auth.google.secret,
|
|
104
103
|
callbackURL: `${this.configuration.host}/auth/signin/google/callback`,
|
|
@@ -106,7 +105,7 @@ let AuthConfigurer = class AuthConfigurer {
|
|
|
106
105
|
}, this.validateGmail));
|
|
107
106
|
}
|
|
108
107
|
if (this.configuration.auth.saml && this.configuration.auth.saml.enabled) {
|
|
109
|
-
|
|
108
|
+
passport.use(SAML_SIGNIN, new passport_saml_1.Strategy({
|
|
110
109
|
entryPoint: this.configuration.auth.saml.identityProviderUrl,
|
|
111
110
|
callbackUrl: `${this.configuration.host}/auth/signin/saml/acs`,
|
|
112
111
|
issuer: this.configuration.host,
|
|
@@ -115,7 +114,7 @@ let AuthConfigurer = class AuthConfigurer {
|
|
|
115
114
|
}, this.validateSaml));
|
|
116
115
|
}
|
|
117
116
|
if (this.configuration.auth.auth0 && this.configuration.auth.auth0.enabled) {
|
|
118
|
-
|
|
117
|
+
passport.use(AUTH0_SIGNIN, new passport_auth0_1.Strategy({
|
|
119
118
|
domain: this.configuration.auth.auth0.domain,
|
|
120
119
|
clientID: this.configuration.auth.auth0.clientId,
|
|
121
120
|
clientSecret: this.configuration.auth.auth0.secret,
|
|
@@ -124,7 +123,7 @@ let AuthConfigurer = class AuthConfigurer {
|
|
|
124
123
|
}
|
|
125
124
|
if (this.configuration.auth.oidc && this.configuration.auth.oidc.enabled) {
|
|
126
125
|
const { authUrl, clientId, enabled, issuer, secret, tokenUrl, userInfoUrl } = this.configuration.auth.oidc;
|
|
127
|
-
|
|
126
|
+
passport.use(OIDC_SIGNIN, new passport_openidconnect_1.Strategy({
|
|
128
127
|
issuer,
|
|
129
128
|
authorizationURL: authUrl,
|
|
130
129
|
tokenURL: tokenUrl,
|
|
@@ -201,12 +200,13 @@ let AuthConfigurer = class AuthConfigurer {
|
|
|
201
200
|
return passport.authenticate(FAKE_SIGNIN, {});
|
|
202
201
|
}
|
|
203
202
|
};
|
|
204
|
-
AuthConfigurer = tslib_1.__decorate([
|
|
205
|
-
common_1.Injectable(),
|
|
206
|
-
tslib_1.__param(1, common_1.Inject('Configuration')),
|
|
207
|
-
tslib_1.__param(2, common_1.Inject(user_service_1.USER_SERVICE)),
|
|
208
|
-
tslib_1.__param(4,
|
|
209
|
-
|
|
203
|
+
AuthConfigurer = (0, tslib_1.__decorate)([
|
|
204
|
+
(0, common_1.Injectable)(),
|
|
205
|
+
(0, tslib_1.__param)(1, (0, common_1.Inject)('Configuration')),
|
|
206
|
+
(0, tslib_1.__param)(2, (0, common_1.Inject)(user_service_1.USER_SERVICE)),
|
|
207
|
+
(0, tslib_1.__param)(4, (0, common_1.Optional)()),
|
|
208
|
+
(0, tslib_1.__param)(4, (0, common_1.Inject)(auth_callbacks_1.AUTH_CALLBACKS)),
|
|
209
|
+
(0, tslib_1.__metadata)("design:paramtypes", [datastore_provider_1.DatastoreProvider, Object, Object, auth_service_1.AuthService, Object])
|
|
210
210
|
], AuthConfigurer);
|
|
211
211
|
exports.AuthConfigurer = AuthConfigurer;
|
|
212
212
|
//# sourceMappingURL=auth.configurer.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth.configurer.js","sourceRoot":"","sources":["../../src/auth/auth.configurer.ts"],"names":[],"mappings":";;;;AACA,2CAAqF;AAErF,+CAAsC;AACtC,mCAA6B;AAC7B,qCAAqC;AACrC,
|
|
1
|
+
{"version":3,"file":"auth.configurer.js","sourceRoot":"","sources":["../../src/auth/auth.configurer.ts"],"names":[],"mappings":"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"}
|