UNPKG

chen-facebook

Version:
87 lines 3.5 kB
"use strict"; var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator.throw(value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments)).next()); }); }; const web_1 = require('chen/web'); const core_1 = require('chen/core'); const api_1 = require('./api'); const querystring = require('querystring'); /** * FacebookLogin class */ class FacebookLogin { /** * FacebookLogin constructor * @param {Facebook} private fb * @param {WebContext} private context * @param {string} private redirectUri */ constructor(fb, context, redirectUri) { this.fb = fb; this.context = context; let credentials = this.fb.getCredentials(); this.redirectUri = redirectUri || credentials.redirectUri; } /** * Login * @param {string} redirectUri * @return {RedirectResponse} */ login() { let credentials = this.fb.getCredentials(); let params = { client_id: credentials.appId, redirect_uri: this.redirectUri, scope: credentials.scope || [], state: Math.random().toString(36).substring(2) }; this.context.request.session.set(this.fb.getSessionKey('state'), params.state); return this.context.response.redirect(`https://www.facebook.com/dialog/oauth?${querystring.stringify(params)}`); } /** * Create access token from redirect * @return {string} */ createAccessToken() { return __awaiter(this, void 0, void 0, function* () { if (!(this.context instanceof web_1.Context)) return null; let token = null; let request = this.context.request; let session = request.session; let stateKey = this.fb.getSessionKey('state'); let credentials = this.fb.getCredentials(); if ((request.input.has('code') && request.input.has('state') && session.has(stateKey)) && session.flash(stateKey) == request.input.get('state')) { let params = { code: request.input.get('code'), client_id: credentials.appId, client_secret: credentials.appSecret, redirect_uri: this.redirectUri }; let res = yield (new web_1.HttpClient()).get(`${api_1.FacebookApi.BASE_URL}oauth/access_token?${querystring.stringify(params)}`); if (res.body) { let body; try { body = JSON.parse(res.body); } catch (e) { body = querystring.parse(res.body); } if (body.error) { throw new core_1.Exception(`facebook: ${body.error.message}`); } token = body.access_token; } } return token; }); } } exports.FacebookLogin = FacebookLogin; //# sourceMappingURL=auth.js.map