{"version":3,"file":"providers.mjs","sources":["../../../server/services/providers.js"],"sourcesContent":["'use strict';\n\n/**\n * Module dependencies\n */\n\n// Public node modules.\nconst _ = require('lodash');\nconst urlJoin = require('url-join');\n\nconst { getService, findValidUsername } = require('../utils');\n\nmodule.exports = ({ strapi }) => {\n  /**\n   * Helper to get profiles\n   *\n   * @param {String}   provider\n   */\n\n  const getProfile = async (provider, query) => {\n    const accessToken = query.access_token || query.code || query.oauth_token;\n\n    const providers = await strapi\n      .store({ type: 'plugin', name: 'users-permissions', key: 'grant' })\n      .get();\n\n    return getService('providers-registry').run({\n      provider,\n      query,\n      accessToken,\n      providers,\n    });\n  };\n\n  /**\n   * Connect thanks to a third-party provider.\n   *\n   *\n   * @param {String}    provider\n   * @param {String}    accessToken\n   *\n   * @return  {*}\n   */\n\n  const connect = async (provider, query) => {\n    const accessToken = query.access_token || query.code || query.oauth_token;\n\n    if (!accessToken) {\n      throw new Error('No access_token.');\n    }\n\n    // Get the profile.\n    const profile = await getProfile(provider, query);\n\n    const email = _.toLower(profile.email);\n\n    // We need at least the mail.\n    if (!email) {\n      throw new Error('Email was not available.');\n    }\n\n    const users = await strapi.db.query('plugin::users-permissions.user').findMany({\n      where: { email },\n    });\n\n    const advancedSettings = await strapi\n      .store({ type: 'plugin', name: 'users-permissions', key: 'advanced' })\n      .get();\n\n    const user = _.find(users, { provider });\n\n    if (_.isEmpty(user) && !advancedSettings.allow_register) {\n      throw new Error('Register action is actually not available.');\n    }\n\n    if (!_.isEmpty(user)) {\n      return user;\n    }\n\n    if (users.length && advancedSettings.unique_email) {\n      throw new Error('Email is already taken.');\n    }\n\n    // Retrieve default role.\n    const defaultRole = await strapi.db\n      .query('plugin::users-permissions.role')\n      .findOne({ where: { type: advancedSettings.default_role } });\n\n    // Username: prefer profile, else email prefix; findValidUsername ensures valid + unique\n    const base = (profile.username && profile.username.trim()) || email.split('@')[0];\n    const username = await findValidUsername(base);\n\n    // Create the new user.\n    const newUser = {\n      ...profile,\n      username, // use the generated or provided username\n      email, // overwrite with lowercased email\n      provider,\n      role: defaultRole.id,\n      confirmed: true,\n    };\n\n    const createdUser = await strapi.db\n      .query('plugin::users-permissions.user')\n      .create({ data: newUser });\n\n    return createdUser;\n  };\n\n  const buildRedirectUri = (provider = '') => {\n    const apiPrefix = strapi.config.get('api.rest.prefix');\n    return urlJoin(\n      strapi.config.get('server.absoluteUrl'),\n      apiPrefix,\n      'connect',\n      provider,\n      'callback'\n    );\n  };\n\n  return {\n    connect,\n    buildRedirectUri,\n  };\n};\n"],"names":["_","require$$0","urlJoin","require$$1","getService","findValidUsername","require$$2","providers","strapi","getProfile","provider","query","accessToken","access_token","code","oauth_token","store","type","name","key","get","run","connect","Error","profile","email","toLower","users","db","findMany","where","advancedSettings","user","find","isEmpty","allow_register","length","unique_email","defaultRole","findOne","default_role","base","username","trim","split","newUser","role","id","confirmed","createdUser","create","data","buildRedirectUri","apiPrefix","config"],"mappings":";;;;;;;;;AAEA;;AAEA;AAGA,IAAA,MAAMA,CAAAA,GAAIC,UAAAA;AACV,IAAA,MAAMC,OAAAA,GAAUC,UAAAA;AAEhB,IAAA,MAAM,EAAEC,UAAU,EAAEC,iBAAiB,EAAE,GAAGC,YAAAA,EAAAA;IAE1CC,SAAAA,GAAiB,CAAC,EAAEC,MAAM,EAAE,GAAA;AAC5B;;;;OAME,MAAMC,UAAAA,GAAa,OAAOC,QAAAA,EAAUC,KAAAA,GAAAA;YAClC,MAAMC,WAAAA,GAAcD,MAAME,YAAY,IAAIF,MAAMG,IAAI,IAAIH,MAAMI,WAAW;AAEzE,YAAA,MAAMR,SAAAA,GAAY,MAAMC,MAAAA,CACrBQ,KAAK,CAAC;gBAAEC,IAAAA,EAAM,QAAA;gBAAUC,IAAAA,EAAM,mBAAA;gBAAqBC,GAAAA,EAAK;AAAO,aAAA,CAAA,CAC/DC,GAAG,EAAA;YAEN,OAAOhB,UAAAA,CAAW,oBAAA,CAAA,CAAsBiB,GAAG,CAAC;AAC1CX,gBAAAA,QAAAA;AACAC,gBAAAA,KAAAA;AACAC,gBAAAA,WAAAA;AACAL,gBAAAA;AACN,aAAA,CAAA;AACA,QAAA,CAAA;AAEA;;;;;;;;OAUE,MAAMe,OAAAA,GAAU,OAAOZ,QAAAA,EAAUC,KAAAA,GAAAA;YAC/B,MAAMC,WAAAA,GAAcD,MAAME,YAAY,IAAIF,MAAMG,IAAI,IAAIH,MAAMI,WAAW;AAEzE,YAAA,IAAI,CAACH,WAAAA,EAAa;AAChB,gBAAA,MAAM,IAAIW,KAAAA,CAAM,kBAAA,CAAA;AACtB,YAAA;;YAGI,MAAMC,OAAAA,GAAU,MAAMf,UAAAA,CAAWC,QAAAA,EAAUC,KAAAA,CAAAA;AAE3C,YAAA,MAAMc,KAAAA,GAAQzB,CAAAA,CAAE0B,OAAO,CAACF,QAAQC,KAAK,CAAA;;AAGrC,YAAA,IAAI,CAACA,KAAAA,EAAO;AACV,gBAAA,MAAM,IAAIF,KAAAA,CAAM,0BAAA,CAAA;AACtB,YAAA;YAEI,MAAMI,KAAAA,GAAQ,MAAMnB,MAAAA,CAAOoB,EAAE,CAACjB,KAAK,CAAC,gCAAA,CAAA,CAAkCkB,QAAQ,CAAC;gBAC7EC,KAAAA,EAAO;AAAEL,oBAAAA;AAAK;AACpB,aAAA,CAAA;AAEI,YAAA,MAAMM,gBAAAA,GAAmB,MAAMvB,MAAAA,CAC5BQ,KAAK,CAAC;gBAAEC,IAAAA,EAAM,QAAA;gBAAUC,IAAAA,EAAM,mBAAA;gBAAqBC,GAAAA,EAAK;AAAU,aAAA,CAAA,CAClEC,GAAG,EAAA;AAEN,YAAA,MAAMY,IAAAA,GAAOhC,CAAAA,CAAEiC,IAAI,CAACN,KAAAA,EAAO;AAAEjB,gBAAAA;AAAQ,aAAA,CAAA;AAErC,YAAA,IAAIV,EAAEkC,OAAO,CAACF,SAAS,CAACD,gBAAAA,CAAiBI,cAAc,EAAE;AACvD,gBAAA,MAAM,IAAIZ,KAAAA,CAAM,4CAAA,CAAA;AACtB,YAAA;AAEI,YAAA,IAAI,CAACvB,CAAAA,CAAEkC,OAAO,CAACF,IAAAA,CAAAA,EAAO;gBACpB,OAAOA,IAAAA;AACb,YAAA;AAEI,YAAA,IAAIL,KAAAA,CAAMS,MAAM,IAAIL,gBAAAA,CAAiBM,YAAY,EAAE;AACjD,gBAAA,MAAM,IAAId,KAAAA,CAAM,yBAAA,CAAA;AACtB,YAAA;;YAGI,MAAMe,WAAAA,GAAc,MAAM9B,MAAAA,CAAOoB,EAAA,CAC9BjB,KAAK,CAAC,gCAAA,CAAA,CACN4B,OAAO,CAAC;gBAAET,KAAAA,EAAO;AAAEb,oBAAAA,IAAAA,EAAMc,iBAAiBS;AAAY;;;AAGzD,YAAA,MAAMC,IAAAA,GAAQjB,OAAAA,CAAQkB,QAAQ,IAAIlB,OAAAA,CAAQkB,QAAQ,CAACC,IAAI,MAAOlB,KAAAA,CAAMmB,KAAK,CAAC,GAAA,CAAI,CAAC,CAAA,CAAE;YACjF,MAAMF,QAAAA,GAAW,MAAMrC,iBAAAA,CAAkBoC,IAAAA,CAAAA;;AAGzC,YAAA,MAAMI,OAAAA,GAAU;AACd,gBAAA,GAAGrB,OAAO;AACVkB,gBAAAA,QAAAA;AACAjB,gBAAAA,KAAAA;AACAf,gBAAAA,QAAAA;AACAoC,gBAAAA,IAAAA,EAAMR,YAAYS,EAAE;gBACpBC,SAAAA,EAAW;AACjB,aAAA;YAEI,MAAMC,WAAAA,GAAc,MAAMzC,MAAAA,CAAOoB,EAAA,CAC9BjB,KAAK,CAAC,gCAAA,CAAA,CACNuC,MAAM,CAAC;gBAAEC,IAAAA,EAAMN;;YAElB,OAAOI,WAAAA;AACX,QAAA,CAAA;QAEE,MAAMG,gBAAAA,GAAmB,CAAC1C,QAAAA,GAAW,EAAE,GAAA;AACrC,YAAA,MAAM2C,SAAAA,GAAY7C,MAAAA,CAAO8C,MAAM,CAAClC,GAAG,CAAC,iBAAA,CAAA;YACpC,OAAOlB,OAAAA,CACLM,OAAO8C,MAAM,CAAClC,GAAG,CAAC,oBAAA,CAAA,EAClBiC,SAAAA,EACA,SAAA,EACA3C,QAAAA,EACA,UAAA,CAAA;AAEN,QAAA,CAAA;QAEE,OAAO;AACLY,YAAAA,OAAAA;AACA8B,YAAAA;AACJ,SAAA;AACA,IAAA,CAAA;;;;;;"}