UNPKG

dl

Version:

DreamLab Libs

106 lines (98 loc) 3.74 kB
var JsonRpcMethod = require('core').jsonrpc.JsonRpcMethod, Request = require('core').http.Request, Response = require('core').http.Response, Event = require('core').event.Event, BinaryData = require('core').data.BinaryData, OnetHeadersFilter = require('dl').utils.OnetHeadersFilter, UidManager = require('dl').uid.UidManager; var QueryMethod = function () { JsonRpcMethod.apply(this, arguments); }; QueryMethod.prototype = Object.create(JsonRpcMethod.prototype); QueryMethod.prototype.execute = function (params) { var request = new Request(params.request), response = new Response({ "headers": { "content-type": "application/json; charset=utf-8" } }), manager = new UidManager(request, response).setClientId('www.onet.pl'), error = request.getQueryParam('error'); if (error !== null) { this._handleError(request, response, error); } else if (request.getQueryParam('code') !== null) { this._handleAuth(request, response, manager); } else { this._handleProfile(request, response, manager); } }; QueryMethod.prototype._handleError = function (request, response, error) { switch (error) { case 'invalid_request': case 'unsupported_response_type': response.setStatusCode(400); break; case 'access_denied': response.setStatusCode(401); break; case 'temporarily_unavailable': response.setStatusCode(503); break; default: response.setStatusCode(500); } this._sendResponse(request, response, error); }; QueryMethod.prototype._handleAuth = function (request, response, manager) { var that = this; try { manager.oauthExchangeToken(function (err) { if (err) { response.setStatusCode(err.code == UidManager.Error.INVALID_CODE ? 400 : 503); that._sendResponse(request, response, err.toJson()); return; } that._handleProfile(request, response, manager); }); } catch (e) { response.setStatusCode(400); this._sendResponse(request, response, e.toString()); } }; QueryMethod.prototype._handleProfile = function (request, response, manager) { var that = this; try { manager.getProfile(request.getUrl(), function (err, data) { if (err) { if (err.code == UidManager.Error.INVALID_TOKEN) { // automatic redirection to OAuth 2.0 Authorization Endpoint that._sendResponse(request, response); return; } response.setStatusCode(503); that._sendResponse(request, response, err.toJson()); return; } response.setStatusCode(200); that._sendResponse(request, response, data); }); } catch (e) { if (e.message == UidManager.Exception.UNAUTHORIZED) { // automatic redirection to OAuth 2.0 Authorization Endpoint this._sendResponse(request, response); return; } response.setStatusCode(503); this._sendResponse(request, response, e.toString()); } }; QueryMethod.prototype._sendResponse = function (request, response, body) { if (body) { body = new BinaryData(JSON.stringify(body), BinaryData.Encoding.TEXT, BinaryData.CharacterEncoding.UTF8); response.setBody(body); response.setHeader("content-length", body.length()); } OnetHeadersFilter.filter(request, response); this.dispatchEvent(new Event(JsonRpcMethod.Event.OK, response.toJson())); }; exports.QueryMethod = QueryMethod;