1 | "use strict";
|
2 | Object.defineProperty(exports, "__esModule", { value: true });
|
3 | var tslib_1 = require("tslib");
|
4 | var server_1 = require("@accounts/server");
|
5 | var AccountsOauth = (function () {
|
6 | function AccountsOauth(options) {
|
7 | this.serviceName = 'oauth';
|
8 | this.options = options;
|
9 | }
|
10 | AccountsOauth.prototype.setStore = function (store) {
|
11 | this.db = store;
|
12 | };
|
13 | AccountsOauth.prototype.authenticate = function (params) {
|
14 | return tslib_1.__awaiter(this, void 0, void 0, function () {
|
15 | var userProvider, oauthUser, user, userId, e_1;
|
16 | return tslib_1.__generator(this, function (_a) {
|
17 | switch (_a.label) {
|
18 | case 0:
|
19 | if (!params.provider || !this.options[params.provider]) {
|
20 | throw new Error('Invalid provider');
|
21 | }
|
22 | userProvider = this.options[params.provider];
|
23 | if (typeof userProvider.authenticate !== 'function') {
|
24 | throw new Error('Invalid provider');
|
25 | }
|
26 | return [4 , userProvider.authenticate(params)];
|
27 | case 1:
|
28 | oauthUser = _a.sent();
|
29 | return [4 , this.db.findUserByServiceId(params.provider, oauthUser.id)];
|
30 | case 2:
|
31 | user = _a.sent();
|
32 | if (!(!user && oauthUser.email)) return [3 , 4];
|
33 | return [4 , this.db.findUserByEmail(oauthUser.email)];
|
34 | case 3:
|
35 | user = _a.sent();
|
36 | _a.label = 4;
|
37 | case 4:
|
38 | if (!!user) return [3 , 13];
|
39 | _a.label = 5;
|
40 | case 5:
|
41 | _a.trys.push([5, 10, , 13]);
|
42 | return [4 , this.db.createUser({
|
43 | email: oauthUser.email,
|
44 | })];
|
45 | case 6:
|
46 | userId = _a.sent();
|
47 | return [4 , this.db.findUserById(userId)];
|
48 | case 7:
|
49 | user = (_a.sent());
|
50 | if (!this.server) return [3 , 9];
|
51 | return [4 , this.server.getHooks().emit(server_1.ServerHooks.CreateUserSuccess, user)];
|
52 | case 8:
|
53 | _a.sent();
|
54 | _a.label = 9;
|
55 | case 9: return [3 , 13];
|
56 | case 10:
|
57 | e_1 = _a.sent();
|
58 | if (!this.server) return [3 , 12];
|
59 | return [4 , this.server.getHooks().emit(server_1.ServerHooks.CreateUserError, user)];
|
60 | case 11:
|
61 | _a.sent();
|
62 | _a.label = 12;
|
63 | case 12: throw e_1;
|
64 | case 13: return [4 , this.db.setService(user.id, params.provider, oauthUser)];
|
65 | case 14:
|
66 | _a.sent();
|
67 | return [2 , user];
|
68 | }
|
69 | });
|
70 | });
|
71 | };
|
72 | AccountsOauth.prototype.unlink = function (userId, provider) {
|
73 | return tslib_1.__awaiter(this, void 0, void 0, function () {
|
74 | return tslib_1.__generator(this, function (_a) {
|
75 | switch (_a.label) {
|
76 | case 0:
|
77 | if (!provider || !this.options[provider]) {
|
78 | throw new Error('Invalid provider');
|
79 | }
|
80 | return [4 , this.db.setService(userId, provider, null)];
|
81 | case 1:
|
82 | _a.sent();
|
83 | return [2 ];
|
84 | }
|
85 | });
|
86 | });
|
87 | };
|
88 | return AccountsOauth;
|
89 | }());
|
90 | exports.AccountsOauth = AccountsOauth;
|
91 |
|
\ | No newline at end of file |