Introduce processor
This commit is contained in:
76
src/server/api/endpoints/auth/session/generate.ts
Normal file
76
src/server/api/endpoints/auth/session/generate.ts
Normal file
@ -0,0 +1,76 @@
|
||||
/**
|
||||
* Module dependencies
|
||||
*/
|
||||
import * as uuid from 'uuid';
|
||||
import $ from 'cafy';
|
||||
import App from '../../../models/app';
|
||||
import AuthSess from '../../../models/auth-session';
|
||||
import config from '../../../../../conf';
|
||||
|
||||
/**
|
||||
* @swagger
|
||||
* /auth/session/generate:
|
||||
* post:
|
||||
* summary: Generate a session
|
||||
* parameters:
|
||||
* -
|
||||
* name: app_secret
|
||||
* description: App Secret
|
||||
* in: formData
|
||||
* required: true
|
||||
* type: string
|
||||
*
|
||||
* responses:
|
||||
* 200:
|
||||
* description: OK
|
||||
* schema:
|
||||
* type: object
|
||||
* properties:
|
||||
* token:
|
||||
* type: string
|
||||
* description: Session Token
|
||||
* url:
|
||||
* type: string
|
||||
* description: Authentication form's URL
|
||||
* default:
|
||||
* description: Failed
|
||||
* schema:
|
||||
* $ref: "#/definitions/Error"
|
||||
*/
|
||||
|
||||
/**
|
||||
* Generate a session
|
||||
*
|
||||
* @param {any} params
|
||||
* @return {Promise<any>}
|
||||
*/
|
||||
module.exports = (params) => new Promise(async (res, rej) => {
|
||||
// Get 'app_secret' parameter
|
||||
const [appSecret, appSecretErr] = $(params.app_secret).string().$;
|
||||
if (appSecretErr) return rej('invalid app_secret param');
|
||||
|
||||
// Lookup app
|
||||
const app = await App.findOne({
|
||||
secret: appSecret
|
||||
});
|
||||
|
||||
if (app == null) {
|
||||
return rej('app not found');
|
||||
}
|
||||
|
||||
// Generate token
|
||||
const token = uuid.v4();
|
||||
|
||||
// Create session token document
|
||||
const doc = await AuthSess.insert({
|
||||
created_at: new Date(),
|
||||
app_id: app._id,
|
||||
token: token
|
||||
});
|
||||
|
||||
// Response
|
||||
res({
|
||||
token: doc.token,
|
||||
url: `${config.auth_url}/${doc.token}`
|
||||
});
|
||||
});
|
70
src/server/api/endpoints/auth/session/show.ts
Normal file
70
src/server/api/endpoints/auth/session/show.ts
Normal file
@ -0,0 +1,70 @@
|
||||
/**
|
||||
* Module dependencies
|
||||
*/
|
||||
import $ from 'cafy';
|
||||
import AuthSess, { pack } from '../../../models/auth-session';
|
||||
|
||||
/**
|
||||
* @swagger
|
||||
* /auth/session/show:
|
||||
* post:
|
||||
* summary: Show a session information
|
||||
* parameters:
|
||||
* -
|
||||
* name: token
|
||||
* description: Session Token
|
||||
* in: formData
|
||||
* required: true
|
||||
* type: string
|
||||
*
|
||||
* responses:
|
||||
* 200:
|
||||
* description: OK
|
||||
* schema:
|
||||
* type: object
|
||||
* properties:
|
||||
* created_at:
|
||||
* type: string
|
||||
* format: date-time
|
||||
* description: Date and time of the session creation
|
||||
* app_id:
|
||||
* type: string
|
||||
* description: Application ID
|
||||
* token:
|
||||
* type: string
|
||||
* description: Session Token
|
||||
* user_id:
|
||||
* type: string
|
||||
* description: ID of user who create the session
|
||||
* app:
|
||||
* $ref: "#/definitions/Application"
|
||||
* default:
|
||||
* description: Failed
|
||||
* schema:
|
||||
* $ref: "#/definitions/Error"
|
||||
*/
|
||||
|
||||
/**
|
||||
* Show a session
|
||||
*
|
||||
* @param {any} params
|
||||
* @param {any} user
|
||||
* @return {Promise<any>}
|
||||
*/
|
||||
module.exports = (params, user) => new Promise(async (res, rej) => {
|
||||
// Get 'token' parameter
|
||||
const [token, tokenErr] = $(params.token).string().$;
|
||||
if (tokenErr) return rej('invalid token param');
|
||||
|
||||
// Lookup session
|
||||
const session = await AuthSess.findOne({
|
||||
token: token
|
||||
});
|
||||
|
||||
if (session == null) {
|
||||
return rej('session not found');
|
||||
}
|
||||
|
||||
// Response
|
||||
res(await pack(session, user));
|
||||
});
|
109
src/server/api/endpoints/auth/session/userkey.ts
Normal file
109
src/server/api/endpoints/auth/session/userkey.ts
Normal file
@ -0,0 +1,109 @@
|
||||
/**
|
||||
* Module dependencies
|
||||
*/
|
||||
import $ from 'cafy';
|
||||
import App from '../../../models/app';
|
||||
import AuthSess from '../../../models/auth-session';
|
||||
import AccessToken from '../../../models/access-token';
|
||||
import { pack } from '../../../models/user';
|
||||
|
||||
/**
|
||||
* @swagger
|
||||
* /auth/session/userkey:
|
||||
* post:
|
||||
* summary: Get an access token(userkey)
|
||||
* parameters:
|
||||
* -
|
||||
* name: app_secret
|
||||
* description: App Secret
|
||||
* in: formData
|
||||
* required: true
|
||||
* type: string
|
||||
* -
|
||||
* name: token
|
||||
* description: Session Token
|
||||
* in: formData
|
||||
* required: true
|
||||
* type: string
|
||||
*
|
||||
* responses:
|
||||
* 200:
|
||||
* description: OK
|
||||
* schema:
|
||||
* type: object
|
||||
* properties:
|
||||
* userkey:
|
||||
* type: string
|
||||
* description: Access Token
|
||||
* user:
|
||||
* $ref: "#/definitions/User"
|
||||
* default:
|
||||
* description: Failed
|
||||
* schema:
|
||||
* $ref: "#/definitions/Error"
|
||||
*/
|
||||
|
||||
/**
|
||||
* Generate a session
|
||||
*
|
||||
* @param {any} params
|
||||
* @return {Promise<any>}
|
||||
*/
|
||||
module.exports = (params) => new Promise(async (res, rej) => {
|
||||
// Get 'app_secret' parameter
|
||||
const [appSecret, appSecretErr] = $(params.app_secret).string().$;
|
||||
if (appSecretErr) return rej('invalid app_secret param');
|
||||
|
||||
// Lookup app
|
||||
const app = await App.findOne({
|
||||
secret: appSecret
|
||||
});
|
||||
|
||||
if (app == null) {
|
||||
return rej('app not found');
|
||||
}
|
||||
|
||||
// Get 'token' parameter
|
||||
const [token, tokenErr] = $(params.token).string().$;
|
||||
if (tokenErr) return rej('invalid token param');
|
||||
|
||||
// Fetch token
|
||||
const session = await AuthSess
|
||||
.findOne({
|
||||
token: token,
|
||||
app_id: app._id
|
||||
});
|
||||
|
||||
if (session === null) {
|
||||
return rej('session not found');
|
||||
}
|
||||
|
||||
if (session.user_id == null) {
|
||||
return rej('this session is not allowed yet');
|
||||
}
|
||||
|
||||
// Lookup access token
|
||||
const accessToken = await AccessToken.findOne({
|
||||
app_id: app._id,
|
||||
user_id: session.user_id
|
||||
});
|
||||
|
||||
// Delete session
|
||||
|
||||
/* https://github.com/Automattic/monk/issues/178
|
||||
AuthSess.deleteOne({
|
||||
_id: session._id
|
||||
});
|
||||
*/
|
||||
AuthSess.remove({
|
||||
_id: session._id
|
||||
});
|
||||
|
||||
// Response
|
||||
res({
|
||||
access_token: accessToken.token,
|
||||
user: await pack(session.user_id, null, {
|
||||
detail: true
|
||||
})
|
||||
});
|
||||
});
|
Reference in New Issue
Block a user