@feathersjs/authentication-oauth 5.0.0-pre.6 → 5.0.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/lib/index.d.ts CHANGED
@@ -2,6 +2,4 @@ import { Application } from '@feathersjs/feathers';
2
2
  import { OAuthStrategy, OAuthProfile } from './strategy';
3
3
  import { OauthSetupSettings } from './utils';
4
4
  export { OauthSetupSettings, OAuthStrategy, OAuthProfile };
5
- export declare const setup: (options: OauthSetupSettings) => (app: Application) => void;
6
- export declare const express: (settings?: Partial<OauthSetupSettings>) => (app: Application) => void;
7
- export declare const expressOauth: (settings?: Partial<OauthSetupSettings>) => (app: Application) => void;
5
+ export declare const oauth: (settings?: Partial<OauthSetupSettings>) => (app: Application) => void;
package/lib/index.js CHANGED
@@ -1,71 +1,37 @@
1
1
  "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
2
  Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.expressOauth = exports.express = exports.setup = exports.OAuthStrategy = void 0;
7
- const merge_1 = __importDefault(require("lodash/merge"));
8
- const each_1 = __importDefault(require("lodash/each"));
9
- const omit_1 = __importDefault(require("lodash/omit"));
3
+ exports.oauth = exports.OAuthStrategy = void 0;
10
4
  const commons_1 = require("@feathersjs/commons");
5
+ const schema_1 = require("@feathersjs/schema");
11
6
  const strategy_1 = require("./strategy");
12
7
  Object.defineProperty(exports, "OAuthStrategy", { enumerable: true, get: function () { return strategy_1.OAuthStrategy; } });
13
- const express_1 = __importDefault(require("./express"));
8
+ const service_1 = require("./service");
14
9
  const utils_1 = require("./utils");
15
- const debug = commons_1.createDebug('@feathersjs/authentication-oauth');
16
- const setup = (options) => (app) => {
17
- const service = app.defaultAuthentication ? app.defaultAuthentication(options.authService) : null;
18
- if (!service) {
10
+ const debug = (0, commons_1.createDebug)('@feathersjs/authentication-oauth');
11
+ const oauth = (settings = {}) => (app) => {
12
+ const authService = app.defaultAuthentication ? app.defaultAuthentication(settings.authService) : null;
13
+ if (!authService) {
19
14
  throw new Error('An authentication service must exist before registering @feathersjs/authentication-oauth');
20
15
  }
21
- const { oauth } = service.configuration;
22
- if (!oauth) {
16
+ if (!authService.configuration.oauth) {
23
17
  debug('No oauth configuration found in authentication configuration. Skipping oAuth setup.');
24
18
  return;
25
19
  }
26
- const { strategyNames } = service;
27
- // Set up all the defaults
28
- const { prefix = '/oauth' } = oauth.defaults || {};
29
- const port = app.get('port');
30
- let host = app.get('host');
31
- let protocol = 'https';
32
- // Development environments commonly run on HTTP with an extended port
33
- if (app.get('env') === 'development') {
34
- protocol = 'http';
35
- if (String(port) !== '80') {
36
- host += `:${port}`;
37
- }
38
- }
39
- const grant = merge_1.default({
40
- defaults: {
41
- prefix,
42
- origin: `${protocol}://${host}`,
43
- transport: 'session',
44
- response: ['tokens', 'raw', 'profile']
45
- }
46
- }, omit_1.default(oauth, 'redirect'));
47
- const getUrl = (url) => {
48
- const { defaults } = grant;
49
- return `${defaults.origin}${prefix}/${url}`;
20
+ const oauthOptions = {
21
+ linkStrategy: 'jwt',
22
+ ...settings
50
23
  };
51
- each_1.default(grant, (value, name) => {
52
- if (name !== 'defaults') {
53
- value.callback = value.callback || getUrl(`${name}/authenticate`);
54
- value.redirect_uri = value.redirect_uri || getUrl(`${name}/callback`);
55
- if (!strategyNames.includes(name)) {
56
- debug(`Registering oAuth default strategy for '${name}'`);
57
- service.register(name, new strategy_1.OAuthStrategy());
58
- }
59
- }
24
+ const grantConfig = (0, utils_1.getGrantConfig)(authService);
25
+ const serviceOptions = (0, utils_1.authenticationServiceOptions)(authService, oauthOptions);
26
+ const servicePath = `${grantConfig.defaults.prefix || 'oauth'}/:provider`;
27
+ app.use(servicePath, new service_1.OAuthService(authService, oauthOptions), serviceOptions);
28
+ const oauthService = app.service(servicePath);
29
+ oauthService.hooks({
30
+ around: { all: [(0, schema_1.resolveDispatch)(), (0, service_1.redirectHook)()] }
60
31
  });
61
- app.set('grant', grant);
62
- };
63
- exports.setup = setup;
64
- const express = (settings = {}) => (app) => {
65
- const options = utils_1.getDefaultSettings(app, settings);
66
- app.configure(exports.setup(options));
67
- app.configure(express_1.default(options));
32
+ if (typeof oauthService.publish === 'function') {
33
+ app.service(servicePath).publish(() => null);
34
+ }
68
35
  };
69
- exports.express = express;
70
- exports.expressOauth = exports.express;
36
+ exports.oauth = oauth;
71
37
  //# sourceMappingURL=index.js.map
package/lib/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AACA,iDAAiD;AACjD,+CAAoD;AAEpD,yCAAwD;AAM3B,8FANpB,wBAAa,OAMoB;AAL1C,uCAAsD;AACtD,mCAA0F;AAE1F,MAAM,KAAK,GAAG,IAAA,qBAAW,EAAC,kCAAkC,CAAC,CAAA;AAItD,MAAM,KAAK,GAChB,CAAC,WAAwC,EAAE,EAAE,EAAE,CAC/C,CAAC,GAAgB,EAAE,EAAE;IACnB,MAAM,WAAW,GAAG,GAAG,CAAC,qBAAqB,CAAC,CAAC,CAAC,GAAG,CAAC,qBAAqB,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,IAAI,CAAA;IAEtG,IAAI,CAAC,WAAW,EAAE;QAChB,MAAM,IAAI,KAAK,CACb,0FAA0F,CAC3F,CAAA;KACF;IAED,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,KAAK,EAAE;QACpC,KAAK,CAAC,qFAAqF,CAAC,CAAA;QAC5F,OAAM;KACP;IAED,MAAM,YAAY,GAAG;QACnB,YAAY,EAAE,KAAK;QACnB,GAAG,QAAQ;KACZ,CAAA;IAED,MAAM,WAAW,GAAG,IAAA,sBAAc,EAAC,WAAW,CAAC,CAAA;IAC/C,MAAM,cAAc,GAAG,IAAA,oCAA4B,EAAC,WAAW,EAAE,YAAY,CAAC,CAAA;IAC9E,MAAM,WAAW,GAAG,GAAG,WAAW,CAAC,QAAQ,CAAC,MAAM,IAAI,OAAO,YAAY,CAAA;IAEzE,GAAG,CAAC,GAAG,CAAC,WAAW,EAAE,IAAI,sBAAY,CAAC,WAAW,EAAE,YAAY,CAAC,EAAE,cAAc,CAAC,CAAA;IAEjF,MAAM,YAAY,GAAG,GAAG,CAAC,OAAO,CAAC,WAAW,CAAC,CAAA;IAE7C,YAAY,CAAC,KAAK,CAAC;QACjB,MAAM,EAAE,EAAE,GAAG,EAAE,CAAC,IAAA,wBAAe,GAAE,EAAE,IAAA,sBAAY,GAAE,CAAC,EAAE;KACrD,CAAC,CAAA;IAEF,IAAI,OAAO,YAAY,CAAC,OAAO,KAAK,UAAU,EAAE;QAC9C,GAAG,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAA;KAC7C;AACH,CAAC,CAAA;AApCU,QAAA,KAAK,SAoCf"}
@@ -0,0 +1,36 @@
1
+ import { HookContext, NextFunction, Params } from '@feathersjs/feathers';
2
+ import { FeathersError } from '@feathersjs/errors';
3
+ import { AuthenticationService } from '@feathersjs/authentication';
4
+ import { OauthSetupSettings } from './utils';
5
+ export type GrantResponse = {
6
+ location: string;
7
+ session: any;
8
+ state: any;
9
+ };
10
+ export type OAuthParams = Omit<Params, 'route'> & {
11
+ session: any;
12
+ state: Record<string, any>;
13
+ route: {
14
+ provider: string;
15
+ };
16
+ };
17
+ export declare class OAuthError extends FeathersError {
18
+ location: string;
19
+ constructor(message: string, data: any, location: string);
20
+ }
21
+ export declare const redirectHook: () => (context: HookContext, next: NextFunction) => Promise<void>;
22
+ export declare class OAuthService {
23
+ service: AuthenticationService;
24
+ settings: OauthSetupSettings;
25
+ grant: any;
26
+ constructor(service: AuthenticationService, settings: OauthSetupSettings);
27
+ handler(method: string, params: OAuthParams, body?: any, override?: string): Promise<GrantResponse>;
28
+ authenticate(params: OAuthParams, result: GrantResponse): Promise<{
29
+ location: string;
30
+ }>;
31
+ find(params: OAuthParams): Promise<GrantResponse>;
32
+ get(override: string, params: OAuthParams): Promise<{
33
+ location: string;
34
+ }>;
35
+ create(data: any, params: OAuthParams): Promise<GrantResponse>;
36
+ }
package/lib/service.js ADDED
@@ -0,0 +1,143 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.OAuthService = exports.redirectHook = exports.OAuthError = void 0;
7
+ const commons_1 = require("@feathersjs/commons");
8
+ const errors_1 = require("@feathersjs/errors");
9
+ // eslint-disable-next-line @typescript-eslint/ban-ts-comment
10
+ //@ts-ignore
11
+ const grant_1 = __importDefault(require("grant/lib/grant"));
12
+ const utils_1 = require("./utils");
13
+ const debug = (0, commons_1.createDebug)('@feathersjs/authentication-oauth/services');
14
+ class OAuthError extends errors_1.FeathersError {
15
+ constructor(message, data, location) {
16
+ super(message, 'NotAuthenticated', 401, 'not-authenticated', data);
17
+ this.location = location;
18
+ }
19
+ }
20
+ exports.OAuthError = OAuthError;
21
+ const redirectHook = () => async (context, next) => {
22
+ try {
23
+ await next();
24
+ const { location } = context.result;
25
+ debug(`oAuth redirect to ${location}`);
26
+ if (location) {
27
+ context.http = {
28
+ ...context.http,
29
+ location
30
+ };
31
+ }
32
+ }
33
+ catch (error) {
34
+ if (error.location) {
35
+ context.http = {
36
+ ...context.http,
37
+ location: error.location
38
+ };
39
+ context.result = typeof error.toJSON === 'function' ? error.toJSON() : error;
40
+ }
41
+ else {
42
+ throw error;
43
+ }
44
+ }
45
+ };
46
+ exports.redirectHook = redirectHook;
47
+ class OAuthService {
48
+ constructor(service, settings) {
49
+ this.service = service;
50
+ this.settings = settings;
51
+ const config = (0, utils_1.getGrantConfig)(service);
52
+ this.grant = (0, grant_1.default)({ config });
53
+ }
54
+ async handler(method, params, body, override) {
55
+ const { session, state, query, route: { provider } } = params;
56
+ const result = await this.grant({
57
+ params: { provider, override },
58
+ state: state.grant,
59
+ session: session.grant,
60
+ query,
61
+ method,
62
+ body
63
+ });
64
+ session.grant = result.session;
65
+ state.grant = result.state;
66
+ return result;
67
+ }
68
+ async authenticate(params, result) {
69
+ var _a, _b;
70
+ const name = params.route.provider;
71
+ const { linkStrategy, authService } = this.settings;
72
+ const { accessToken, grant, headers, query = {}, redirect } = params.session;
73
+ const strategy = this.service.getStrategy(name);
74
+ const authParams = {
75
+ ...params,
76
+ headers,
77
+ authStrategies: [name],
78
+ authentication: accessToken
79
+ ? {
80
+ strategy: linkStrategy,
81
+ accessToken
82
+ }
83
+ : null,
84
+ query,
85
+ redirect
86
+ };
87
+ const payload = (grant === null || grant === void 0 ? void 0 : grant.response) || ((_a = result === null || result === void 0 ? void 0 : result.session) === null || _a === void 0 ? void 0 : _a.response) || ((_b = result === null || result === void 0 ? void 0 : result.state) === null || _b === void 0 ? void 0 : _b.response) || params.query;
88
+ const authentication = {
89
+ strategy: name,
90
+ ...payload
91
+ };
92
+ try {
93
+ debug(`Calling ${authService}.create authentication with strategy ${name}`);
94
+ const authResult = await this.service.create(authentication, authParams);
95
+ debug('Successful oAuth authentication, sending response');
96
+ const location = await strategy.getRedirect(authResult, authParams);
97
+ if (typeof params.session.destroy === 'function') {
98
+ await params.session.destroy();
99
+ }
100
+ return {
101
+ ...authResult,
102
+ location
103
+ };
104
+ }
105
+ catch (error) {
106
+ const location = await strategy.getRedirect(error, authParams);
107
+ const e = new OAuthError(error.message, error.data, location);
108
+ if (typeof params.session.destroy === 'function') {
109
+ await params.session.destroy();
110
+ }
111
+ e.stack = error.stack;
112
+ throw e;
113
+ }
114
+ }
115
+ async find(params) {
116
+ const { session, query, headers } = params;
117
+ const { feathers_token, redirect, ...restQuery } = query;
118
+ const handlerParams = {
119
+ ...params,
120
+ query: restQuery
121
+ };
122
+ if (feathers_token) {
123
+ debug('Got feathers_token query parameter to link accounts', feathers_token);
124
+ session.accessToken = feathers_token;
125
+ }
126
+ session.redirect = redirect;
127
+ session.query = restQuery;
128
+ session.headers = headers;
129
+ return this.handler('GET', handlerParams, {});
130
+ }
131
+ async get(override, params) {
132
+ const result = await this.handler('GET', params, {}, override);
133
+ if (override === 'callback') {
134
+ return this.authenticate(params, result);
135
+ }
136
+ return result;
137
+ }
138
+ async create(data, params) {
139
+ return this.handler('POST', params, data);
140
+ }
141
+ }
142
+ exports.OAuthService = OAuthService;
143
+ //# sourceMappingURL=service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"service.js","sourceRoot":"","sources":["../src/service.ts"],"names":[],"mappings":"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"}
package/lib/strategy.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import { AuthenticationRequest, AuthenticationBaseStrategy, AuthenticationResult } from '@feathersjs/authentication';
1
+ import { AuthenticationRequest, AuthenticationBaseStrategy, AuthenticationResult, AuthenticationParams } from '@feathersjs/authentication';
2
2
  import { Params } from '@feathersjs/feathers';
3
3
  export interface OAuthProfile {
4
4
  id?: string | number;
@@ -15,12 +15,13 @@ export declare class OAuthStrategy extends AuthenticationBaseStrategy {
15
15
  }>;
16
16
  getProfile(data: AuthenticationRequest, _params: Params): Promise<any>;
17
17
  getCurrentEntity(params: Params): Promise<any>;
18
- getRedirect(data: AuthenticationResult | Error, params?: Params): Promise<string | null>;
18
+ getAllowedOrigin(params?: Params): Promise<any>;
19
+ getRedirect(data: AuthenticationResult | Error, params?: AuthenticationParams): Promise<string | null>;
19
20
  findEntity(profile: OAuthProfile, params: Params): Promise<any>;
20
21
  createEntity(profile: OAuthProfile, params: Params): Promise<any>;
21
22
  updateEntity(entity: any, profile: OAuthProfile, params: Params): Promise<any[]>;
22
23
  getEntity(result: any, params: Params): Promise<any>;
23
- authenticate(authentication: AuthenticationRequest, originalParams: Params): Promise<{
24
+ authenticate(authentication: AuthenticationRequest, originalParams: AuthenticationParams): Promise<{
24
25
  [x: string]: any;
25
26
  authentication: {
26
27
  strategy: string;
package/lib/strategy.js CHANGED
@@ -1,154 +1,130 @@
1
1
  "use strict";
2
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
- return new (P || (P = Promise))(function (resolve, reject) {
5
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
- step((generator = generator.apply(thisArg, _arguments || [])).next());
9
- });
10
- };
11
- var __rest = (this && this.__rest) || function (s, e) {
12
- var t = {};
13
- for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
14
- t[p] = s[p];
15
- if (s != null && typeof Object.getOwnPropertySymbols === "function")
16
- for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
17
- if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
18
- t[p[i]] = s[p[i]];
19
- }
20
- return t;
21
- };
22
2
  var __importDefault = (this && this.__importDefault) || function (mod) {
23
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
24
4
  };
25
5
  Object.defineProperty(exports, "__esModule", { value: true });
26
6
  exports.OAuthStrategy = void 0;
27
- /* eslint-disable @typescript-eslint/no-unused-vars */
28
- // @ts-ignore
29
- const querystring_1 = __importDefault(require("querystring"));
30
7
  const authentication_1 = require("@feathersjs/authentication");
31
8
  const errors_1 = require("@feathersjs/errors");
32
9
  const commons_1 = require("@feathersjs/commons");
33
- const debug = commons_1.createDebug('@feathersjs/authentication-oauth/strategy');
10
+ const qs_1 = __importDefault(require("qs"));
11
+ const debug = (0, commons_1.createDebug)('@feathersjs/authentication-oauth/strategy');
34
12
  class OAuthStrategy extends authentication_1.AuthenticationBaseStrategy {
35
13
  get configuration() {
36
14
  const { entity, service, entityId, oauth } = this.authentication.configuration;
37
15
  const config = oauth[this.name];
38
- return Object.assign({ entity,
16
+ return {
17
+ entity,
39
18
  service,
40
- entityId }, config);
19
+ entityId,
20
+ ...config
21
+ };
41
22
  }
42
23
  get entityId() {
43
24
  const { entityService } = this;
44
25
  return this.configuration.entityId || (entityService && entityService.id);
45
26
  }
46
- getEntityQuery(profile, _params) {
47
- return __awaiter(this, void 0, void 0, function* () {
48
- return {
49
- [`${this.name}Id`]: profile.sub || profile.id
50
- };
51
- });
27
+ async getEntityQuery(profile, _params) {
28
+ return {
29
+ [`${this.name}Id`]: profile.sub || profile.id
30
+ };
52
31
  }
53
- getEntityData(profile, _existingEntity, _params) {
54
- return __awaiter(this, void 0, void 0, function* () {
55
- return {
56
- [`${this.name}Id`]: profile.sub || profile.id
57
- };
58
- });
32
+ async getEntityData(profile, _existingEntity, _params) {
33
+ return {
34
+ [`${this.name}Id`]: profile.sub || profile.id
35
+ };
59
36
  }
60
- getProfile(data, _params) {
61
- return __awaiter(this, void 0, void 0, function* () {
62
- return data.profile;
63
- });
37
+ async getProfile(data, _params) {
38
+ return data.profile;
64
39
  }
65
- getCurrentEntity(params) {
66
- return __awaiter(this, void 0, void 0, function* () {
67
- const { authentication } = params;
68
- const { entity } = this.configuration;
69
- if (authentication && authentication.strategy) {
70
- debug('getCurrentEntity with authentication', authentication);
71
- const { strategy } = authentication;
72
- const authResult = yield this.authentication
73
- .authenticate(authentication, params, strategy);
74
- return authResult[entity];
75
- }
76
- return null;
77
- });
40
+ async getCurrentEntity(params) {
41
+ const { authentication } = params;
42
+ const { entity } = this.configuration;
43
+ if (authentication && authentication.strategy) {
44
+ debug('getCurrentEntity with authentication', authentication);
45
+ const { strategy } = authentication;
46
+ const authResult = await this.authentication.authenticate(authentication, params, strategy);
47
+ return authResult[entity];
48
+ }
49
+ return null;
78
50
  }
79
- getRedirect(data, params) {
80
- return __awaiter(this, void 0, void 0, function* () {
81
- const queryRedirect = (params && params.redirect) || '';
82
- const { redirect } = this.authentication.configuration.oauth;
83
- if (!redirect) {
84
- return null;
51
+ async getAllowedOrigin(params) {
52
+ var _a;
53
+ const { redirect, origins = this.app.get('origins') } = this.authentication.configuration.oauth;
54
+ if (Array.isArray(origins)) {
55
+ const referer = ((_a = params === null || params === void 0 ? void 0 : params.headers) === null || _a === void 0 ? void 0 : _a.referer) || origins[0];
56
+ const allowedOrigin = origins.find((current) => referer.toLowerCase().startsWith(current.toLowerCase()));
57
+ if (!allowedOrigin) {
58
+ throw new errors_1.NotAuthenticated(`Referer "${referer}" is not allowed.`);
85
59
  }
86
- const redirectUrl = `${redirect}${queryRedirect}`;
87
- const separator = redirect.endsWith('?') ? '' :
88
- (redirect.indexOf('#') !== -1 ? '?' : '#');
89
- const authResult = data;
90
- const query = authResult.accessToken ? {
91
- access_token: authResult.accessToken
92
- } : {
93
- error: data.message || 'OAuth Authentication not successful'
94
- };
95
- return `${redirectUrl}${separator}${querystring_1.default.stringify(query)}`;
96
- });
60
+ return allowedOrigin;
61
+ }
62
+ return redirect;
97
63
  }
98
- findEntity(profile, params) {
99
- return __awaiter(this, void 0, void 0, function* () {
100
- const query = yield this.getEntityQuery(profile, params);
101
- debug('findEntity with query', query);
102
- const result = yield this.entityService.find(Object.assign(Object.assign({}, params), { query }));
103
- const [entity = null] = result.data ? result.data : result;
104
- debug('findEntity returning', entity);
105
- return entity;
106
- });
64
+ async getRedirect(data, params) {
65
+ const queryRedirect = (params && params.redirect) || '';
66
+ const redirect = await this.getAllowedOrigin(params);
67
+ if (!redirect) {
68
+ return null;
69
+ }
70
+ const redirectUrl = `${redirect}${queryRedirect}`;
71
+ const separator = redirect.endsWith('?') ? '' : redirect.indexOf('#') !== -1 ? '?' : '#';
72
+ const authResult = data;
73
+ const query = authResult.accessToken
74
+ ? { access_token: authResult.accessToken }
75
+ : { error: data.message || 'OAuth Authentication not successful' };
76
+ return `${redirectUrl}${separator}${qs_1.default.stringify(query)}`;
107
77
  }
108
- createEntity(profile, params) {
109
- return __awaiter(this, void 0, void 0, function* () {
110
- const data = yield this.getEntityData(profile, null, params);
111
- debug('createEntity with data', data);
112
- return this.entityService.create(data, commons_1._.omit(params, 'query'));
78
+ async findEntity(profile, params) {
79
+ const query = await this.getEntityQuery(profile, params);
80
+ debug('findEntity with query', query);
81
+ const result = await this.entityService.find({
82
+ ...params,
83
+ query
113
84
  });
85
+ const [entity = null] = result.data ? result.data : result;
86
+ debug('findEntity returning', entity);
87
+ return entity;
114
88
  }
115
- updateEntity(entity, profile, params) {
116
- return __awaiter(this, void 0, void 0, function* () {
117
- const id = entity[this.entityId];
118
- const data = yield this.getEntityData(profile, entity, params);
119
- debug(`updateEntity with id ${id} and data`, data);
120
- return this.entityService.patch(id, data, commons_1._.omit(params, 'query'));
121
- });
89
+ async createEntity(profile, params) {
90
+ const data = await this.getEntityData(profile, null, params);
91
+ debug('createEntity with data', data);
92
+ return this.entityService.create(data, commons_1._.omit(params, 'query'));
122
93
  }
123
- getEntity(result, params) {
124
- return __awaiter(this, void 0, void 0, function* () {
125
- const { entityService } = this;
126
- const { entityId = entityService.id, entity } = this.configuration;
127
- if (!entityId || result[entityId] === undefined) {
128
- throw new errors_1.NotAuthenticated('Could not get oAuth entity');
129
- }
130
- if (!params.provider) {
131
- return result;
132
- }
133
- return entityService.get(result[entityId], Object.assign(Object.assign({}, commons_1._.omit(params, 'query')), { [entity]: result }));
134
- });
94
+ async updateEntity(entity, profile, params) {
95
+ const id = entity[this.entityId];
96
+ const data = await this.getEntityData(profile, entity, params);
97
+ debug(`updateEntity with id ${id} and data`, data);
98
+ return this.entityService.patch(id, data, commons_1._.omit(params, 'query'));
135
99
  }
136
- authenticate(authentication, originalParams) {
137
- return __awaiter(this, void 0, void 0, function* () {
138
- const entity = this.configuration.entity;
139
- const { provider } = originalParams, params = __rest(originalParams, ["provider"]);
140
- const profile = yield this.getProfile(authentication, params);
141
- const existingEntity = (yield this.findEntity(profile, params))
142
- || (yield this.getCurrentEntity(params));
143
- debug('authenticate with (existing) entity', existingEntity);
144
- const authEntity = !existingEntity ? yield this.createEntity(profile, params)
145
- : yield this.updateEntity(existingEntity, profile, params);
146
- return {
147
- authentication: { strategy: this.name },
148
- [entity]: yield this.getEntity(authEntity, originalParams)
149
- };
100
+ async getEntity(result, params) {
101
+ const { entityService } = this;
102
+ const { entityId = entityService.id, entity } = this.configuration;
103
+ if (!entityId || result[entityId] === undefined) {
104
+ throw new errors_1.NotAuthenticated('Could not get oAuth entity');
105
+ }
106
+ if (!params.provider) {
107
+ return result;
108
+ }
109
+ return entityService.get(result[entityId], {
110
+ ...commons_1._.omit(params, 'query'),
111
+ [entity]: result
150
112
  });
151
113
  }
114
+ async authenticate(authentication, originalParams) {
115
+ const entity = this.configuration.entity;
116
+ const { provider, ...params } = originalParams;
117
+ const profile = await this.getProfile(authentication, params);
118
+ const existingEntity = (await this.findEntity(profile, params)) || (await this.getCurrentEntity(params));
119
+ debug('authenticate with (existing) entity', existingEntity);
120
+ const authEntity = !existingEntity
121
+ ? await this.createEntity(profile, params)
122
+ : await this.updateEntity(existingEntity, profile, params);
123
+ return {
124
+ authentication: { strategy: this.name },
125
+ [entity]: await this.getEntity(authEntity, originalParams)
126
+ };
127
+ }
152
128
  }
153
129
  exports.OAuthStrategy = OAuthStrategy;
154
130
  //# sourceMappingURL=strategy.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"strategy.js","sourceRoot":"","sources":["../src/strategy.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"strategy.js","sourceRoot":"","sources":["../src/strategy.ts"],"names":[],"mappings":"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"}