| 17 | Reject->Error on findOne() or save() |
| 18 | */ |
| 19 | async upsertUserWithProvider(appId, accessList, provider, providerUserId, providerAccessToken, providerAccessSecret) { |
| 20 | const deferred = q.defer(); |
| 21 | |
| 22 | try { |
| 23 | const isMasterKey = true; |
| 24 | const collectionName = 'User'; |
| 25 | const select = {}; |
| 26 | const sort = {}; |
| 27 | const skip = 0; |
| 28 | |
| 29 | const query = {}; |
| 30 | query.$include = []; |
| 31 | query.$includeList = []; |
| 32 | query.socialAuth = { |
| 33 | $elemMatch: { |
| 34 | provider, |
| 35 | id: providerUserId, |
| 36 | }, |
| 37 | }; |
| 38 | let document = await customService.findOne(appId, collectionName, query, select, sort, skip, accessList, isMasterKey); |
| 39 | if (document) { |
| 40 | for (let i = 0; i < document.socialAuth.length; ++i) { |
| 41 | if (document.socialAuth[i].provider === provider && document.socialAuth[i].id === providerUserId) { |
| 42 | document.socialAuth[i].accessToken = providerAccessToken; |
| 43 | } |
| 44 | } |
| 45 | document._modifiedColumns = ['socialAuth']; |
| 46 | } else { |
| 47 | document = {}; |
| 48 | document._version = 0; |
| 49 | |
| 50 | document.ACL = {}; |
| 51 | document.ACL.read = { allow: { user: ['all'], role: [] }, deny: { user: [], role: [] } }; // by default allow read access to "all" |
| 52 | document.ACL.write = { allow: { user: ['all'], role: [] }, deny: { user: [], role: [] } }; // by default allow write access to "all" |
| 53 | document.ACL.parent = null; |
| 54 | |
| 55 | document.createdAt = new Date(); |
| 56 | document.updatedAt = new Date(); |
| 57 | document.expires = null; |
| 58 | |
| 59 | document.verified = true; |
| 60 | document.socialAuth = [{ |
| 61 | provider, |
| 62 | id: providerUserId, |
| 63 | accessToken: providerAccessToken, |
| 64 | accessSecret: providerAccessSecret, |
| 65 | }]; |
| 66 | |
| 67 | document._modifiedColumns = ['createdAt', 'updatedAt', 'ACL', 'expires', 'verified', 'socialAuth']; |
| 68 | } |
| 69 | |
| 70 | document._isModified = true; |
| 71 | document._tableName = collectionName; |
| 72 | document._type = 'user'; |
| 73 | |
| 74 | const result = await customService.save(appId, collectionName, document, accessList, isMasterKey); |
| 75 | deferred.resolve(result); |
| 76 | } catch (err) { |