UNPKG

6.85 kBSource Map (JSON)View Raw
1{"version":3,"sources":["../../src/models/PassportModel.js"],"names":["PassportModel","collection","username","providerId","provider","toLowerCase","count","prefixusername","Math","random","Err","constructor","module","UserModel","findById","userId","params","object","toObject","Object","assign","jwt","sign","getIdentity","ctx","config","secret","token","verify","decodeToken","_id","Model","schema","type","Types","ObjectId","raw","profile","meta","fetchedAt","Date","String","required","refreshToken","lastError","lastErrorAt","status","options","model"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;AAAA;;AACA;;AACA;;AACA;;AACA;;;;;;IAEaA,a;;;;;;;;;;;;;4GAqEX,iBAAuBC,UAAvB;AAAA;AAAA;AAAA;AAAA;AAAA;AACE;AACIC,gBAAAA,QAFN,aAEoB,KAAKC,UAFzB,cAEuC,KAAKC,QAF5C;AAGEF,gBAAAA,QAAQ,GAAG,kCAAiBA,QAAQ,CAACG,WAAT,EAAjB,CAAX;;AAHF,oBAIOJ,UAJP;AAAA;AAAA;AAAA;;AAAA,iDAI0BC,QAJ1B;;AAAA;AAAA;AAAA,uBAKcD,UAAU,CAACK,KAAX,CAAiB;AAAEJ,kBAAAA,QAAQ,EAARA;AAAF,iBAAjB,CALd;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA,iDAKsDA,QALtD;;AAAA;AAMQK,gBAAAA,cANR,aAM4BL,QAN5B,QAQE;;AACAA,gBAAAA,QAAQ,GAAGK,cAAc,GAAIC,IAAI,CAACC,MAAL,KAAgB,GAA7C;AATF;AAAA,uBAUcR,UAAU,CAACK,KAAX,CAAiB;AAAEJ,kBAAAA,QAAQ,EAARA;AAAF,iBAAjB,CAVd;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA,iDAUsDA,QAVtD;;AAAA;AAYEA,gBAAAA,QAAQ,GAAGK,cAAc,GAAIC,IAAI,CAACC,MAAL,KAAgB,GAA7C;AAZF;AAAA,uBAacR,UAAU,CAACK,KAAX,CAAiB;AAAEJ,kBAAAA,QAAQ,EAARA;AAAF,iBAAjB,CAbd;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA,iDAasDA,QAbtD;;AAAA;AAAA,sBAeQ,IAAIQ,eAAJ,CAAQ,+BAAR,CAfR;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,O;;;;;;;;;;;mGAiBA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,uBAC0B,KAAKC,WAAL,CAAiBC,MAAjB,CAAwB,kBAAxB,CAD1B;;AAAA;AACQC,gBAAAA,SADR;AAAA,kDAESA,SAAS,CAACC,QAAV,CAAmB,KAAKC,MAAxB,CAFT;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,O;;;;;;;;;;WAKA,uBAAyB;AAAA,UAAbC,MAAa,uEAAJ,EAAI;AACvB,UAAMC,MAAM,GAAG,sBAAK,KAAKC,QAAL,EAAL,EAAsB,CAAC,KAAD,CAAtB,CAAf;AACA,aAAOC,MAAM,CAACC,MAAP,CAAcH,MAAd,EAAsBD,MAAtB,CAAP;AACD;;;WAED,uBAAcA,MAAd,EAAsB;AACpB,aAAOK,yBAAIC,IAAJ,CAAS,KAAKC,WAAL,CAAiBP,MAAjB,CAAT,EAAmCQ,GAAG,CAACC,MAAJ,CAAWJ,GAAX,CAAeK,MAAlD,CAAP;AACD;;;WAED,qBAAmBC,KAAnB,EAA0B;AACxB,aAAON,yBAAIO,MAAJ,CAAWD,KAAX,EAAkBH,GAAG,CAACC,MAAJ,CAAWJ,GAAX,CAAeK,MAAjC,CAAP;AACD;;;;sGAED,kBAAwBC,KAAxB;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA,oCACkB,KAAKE,WAAL,CAAiBF,KAAjB,CADlB,EACUG,GADV,qBACUA,GADV;AAAA,kDAES,KAAKhB,QAAL,CAAcgB,GAAd,CAFT;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,O;;;;;;;;;;EAxGiCC,kB;;;AAAtB/B,a,CACJgC,M,GAAS;AACdjB,EAAAA,MAAM,EAAE;AACNkB,IAAAA,IAAI,EAAEF,mBAAMG,KAAN,CAAYC,QADZ,CAEN;;AAFM,GADM;AAKd;AACAC,EAAAA,GAAG,EAAE;AACHH,IAAAA,IAAI,EAAEd,MADH;AAEH,eAAS;AAFN,GANS;AAUd;AACAkB,EAAAA,OAAO,EAAE;AACPJ,IAAAA,IAAI,EAAEd,MADC;AACO;AACd,eAAS;AAFF,GAXK;AAedmB,EAAAA,IAAI,EAAE;AACJL,IAAAA,IAAI,EAAEd;AADF,GAfQ;AAkBd;AACAoB,EAAAA,SAAS,EAAE;AACTN,IAAAA,IAAI,EAAEO,IADG;AAET,eAAS;AAFA,GAnBG;AAwBd;AACAP,EAAAA,IAAI,EAAE;AACJA,IAAAA,IAAI,EAAEQ;AADF,GAzBQ;AA4Bd;AACArC,EAAAA,QAAQ,EAAE;AACR6B,IAAAA,IAAI,EAAEQ,MADE;AAERC,IAAAA,QAAQ,EAAE;AAFF,GA7BI;AAiCd;AACAvC,EAAAA,UAAU,EAAE;AACV;AACA8B,IAAAA,IAAI,EAAEQ,MAFI;AAGVC,IAAAA,QAAQ,EAAE;AAHA,GAlCE;AAuCd;AACAf,EAAAA,KAAK,EAAE;AACLM,IAAAA,IAAI,EAAEQ;AADD,GAxCO;AA2CdE,EAAAA,YAAY,EAAE;AACZV,IAAAA,IAAI,EAAEQ;AADM,GA3CA;AA8CdG,EAAAA,SAAS,EAAE;AACTX,IAAAA,IAAI,EAAEd;AADG,GA9CG;AAiDd0B,EAAAA,WAAW,EAAE;AACXZ,IAAAA,IAAI,EAAEO;AADK,GAjDC;AAoDd;AACA;AACAM,EAAAA,MAAM,EAAE;AACNb,IAAAA,IAAI,EAAEQ,MADA;AAEN,YAAM,CAAC,IAAD,EAAO,OAAP,EAAgB,SAAhB,EAA2B,SAA3B,EAAsC,SAAtC,EAAiD,cAAjD,CAFA;AAGN,eAAS;AAHH;AAtDM,C;AADLzC,a,CA6DJ+C,O,GAAU;AACfC,EAAAA,KAAK,EAAE,eADQ;AAEf/C,EAAAA,UAAU,EAAE,UAFG,CAGf;AACA;AACA;;AALe,C;eAiDJD,a","sourcesContent":["import Model from '@lskjs/db/Model';\nimport Err from '@lskjs/err';\nimport canonizeUsername from '@lskjs/utils/canonizeUsername';\nimport jwt from 'jsonwebtoken';\nimport pick from 'lodash/pick';\n\nexport class PassportModel extends Model {\n static schema = {\n userId: {\n type: Model.Types.ObjectId,\n // ref: 'User',\n },\n // Сырые данные которые пришли из соц сети\n raw: {\n type: Object,\n default: {},\n },\n // Обработанные данные из соцсети\n profile: {\n type: Object, // по идее тут должна быть структура данных\n default: {},\n },\n meta: {\n type: Object,\n },\n // Дата последнего обновления данных\n fetchedAt: {\n type: Date,\n default: null,\n },\n\n // тип провадера\n type: {\n type: String,\n },\n // название соцсети из passport\n provider: {\n type: String,\n required: true,\n },\n // ID из соцсети\n providerId: {\n // link to social network\n type: String,\n required: true,\n },\n // token из соцсети\n token: {\n type: String,\n },\n refreshToken: {\n type: String,\n },\n lastError: {\n type: Object,\n },\n lastErrorAt: {\n type: Date,\n },\n // статус пасспорта: валиден или нет\n // пока не используется\n status: {\n type: String,\n enum: [null, 'valid', 'invalid', 'removed', 'expired', 'unauthorized'],\n default: null,\n },\n };\n static options = {\n model: 'PassportModel',\n collection: 'passport',\n // timestamps: true,\n // toJSON: { virtuals: true },\n // toObject: { virtuals: true },\n };\n\n async generateUsername(collection) {\n // const { User: UserModel } = ctx.models;\n let username = `${this.providerId}_${this.provider}`;\n username = canonizeUsername(username.toLowerCase());\n if (!collection) return username;\n if (!(await collection.count({ username }))) return username;\n const prefixusername = `${username}_`;\n\n // TODO!!!!!! убрать хуев китайский стайл цикл\n username = prefixusername + (Math.random() % 100);\n if (!(await collection.count({ username }))) return username;\n\n username = prefixusername + (Math.random() % 100);\n if (!(await collection.count({ username }))) return username;\n\n throw new Err('cant generate unique username');\n }\n async getUser() {\n const UserModel = await this.constructor.module('models.UserModel');\n return UserModel.findById(this.userId);\n }\n\n getIdentity(params = {}) {\n const object = pick(this.toObject(), ['_id']);\n return Object.assign(object, params);\n }\n\n generateToken(params) {\n return jwt.sign(this.getIdentity(params), ctx.config.jwt.secret);\n }\n\n static decodeToken(token) {\n return jwt.verify(token, ctx.config.jwt.secret);\n }\n\n static async getByToken(token) {\n const { _id } = this.decodeToken(token);\n return this.findById(_id);\n }\n}\n\nexport default PassportModel;\n"],"file":"PassportModel.js"}
\No newline at end of file