backend: initial log in dialog

This commit is contained in:
muerwre 2018-11-29 18:38:46 +07:00
parent 6f6e6ae6d7
commit 8bba2ff1ba
8 changed files with 83 additions and 7 deletions

View file

@ -25,6 +25,11 @@ app.use(express.urlencoded({ extended: false }));
app.use(cookieParser()); app.use(cookieParser());
app.use(lessMiddleware(path.join(__dirname, 'public'))); app.use(lessMiddleware(path.join(__dirname, 'public')));
app.use(express.static(path.join(__dirname, 'public'))); app.use(express.static(path.join(__dirname, 'public')));
app.use((req, res, next) => {
res.header('Access-Control-Allow-Origin', '*');
res.header('Access-Control-Allow-Headers', 'Origin, X-Requested-With, Content-Type, Accept');
next();
});
// app.use('/', indexRouter); // app.use('/', indexRouter);
// app.use('/users', usersRouter); // app.use('/users', usersRouter);

View file

@ -10,6 +10,11 @@ const UserSchema = new Schema({
enum: ['admin', 'guest', 'user', 'vk'], enum: ['admin', 'guest', 'user', 'vk'],
}, },
token: { type: String, required: true }, token: { type: String, required: true },
created_at: { type: Date, required: true, default: Date.now },
first_name: { type: String },
last_name: { type: String },
photo: { type: String },
}); });
const User = mongoose.model('User', UserSchema); const User = mongoose.model('User', UserSchema);

View file

@ -2,11 +2,13 @@ const express = require('express');
const guest = require('./auth/guest'); const guest = require('./auth/guest');
const list = require('./auth/list'); const list = require('./auth/list');
const check = require('./auth/check'); const check = require('./auth/check');
const vk = require('./auth/social/vk');
const router = express.Router(); const router = express.Router();
router.get('/', check); router.get('/', check);
router.get('/list', list); router.get('/list', list);
router.get('/guest', guest); router.get('/guest', guest);
router.get('/social/vk', vk);
module.exports = router; module.exports = router;

View file

@ -11,6 +11,8 @@ module.exports = async (req, res) => {
} }
const guest = await generateGuest(); const guest = await generateGuest();
return res.send({ success: false, ...guest, random_url }); return res.send({
success: false, error: 'user not found', error_code: 1231, ...guest, random_url
});
}; };

View file

@ -11,9 +11,8 @@ const generateGuestToken = () => {
}); });
}; };
const generateUser = id => { const generateUser = (id, role = 'guest') => {
const token = `seq:${genRandomSequence(32)}`; const token = `seq:${genRandomSequence(32)}`;
const role = 'guest';
return { id, token, role }; return { id, token, role };
}; };
@ -47,5 +46,7 @@ module.exports = async (req, res) => {
res.send({ success: true, ...user }); res.send({ success: true, ...user });
}; };
module.exports.generateUser = generateUser;
module.exports.generateGuest = generateGuest; module.exports.generateGuest = generateGuest;
module.exports.generateGuestToken = generateGuestToken;
module.exports.generateRandomUrl = generateRandomUrl; module.exports.generateRandomUrl = generateRandomUrl;

View file

@ -0,0 +1,58 @@
const { User } = require('../../../models/User');
const axios = require('axios');
const { generateGuest, generateRandomUrl, generateUser } = require('../guest');
//
// const generateTokenUrl = (host, code) => (
// `https://oauth.vk.com/access_token?client_id=5987644&redirect_uri=http://${host}/` +
// `auth/social/vk&client_secret=Z71DsxoMF7PS9kayLuks&code=${code}`
// );
const fetchUserData = async (req) => {
const { query: { code } } = req;
const host = req.get('host');
const { data: { access_token, user_id } } = await axios.get(
'https://oauth.vk.com/access_token',
{
params: {
client_id: 5987644,
client_secret: 'Z71DsxoMF7PS9kayLuks',
code,
redirect_uri: `http://${host}/auth/social/vk`,
}
}
).catch(() => ({ data: { } }));
const { data } = await axios.get(
'https://api.vk.com/method/users.get',
{
params: {
user_id,
fields: 'photo',
v: '5.67',
access_token,
}
}
).catch(() => ({ data: { response: [] } }));
return data;
};
module.exports = async (req, res) => {
const { response } = await fetchUserData(req);
const {
first_name = '', last_name = '', photo = '', id = ''
} = response[0];
const newUser = await generateUser(`vk:${id}`, 'vk');
const user = {
...newUser, first_name, last_name, photo
};
// todo: error handling
// console.log('USE', user);
res.send(user);
};

View file

@ -1,7 +1,7 @@
import React from 'react'; import React from 'react';
import { GuestButton } from '$components/user/GuestButton'; import { GuestButton } from '$components/user/GuestButton';
import { SERVER } from '$constants/api'; import { SERVER, TEST } from '$constants/api';
import { DEFAULT_USER, ROLES } from '$constants/auth'; import { DEFAULT_USER, ROLES } from '$constants/auth';
import { UserButton } from '$components/user/UserButton'; import { UserButton } from '$components/user/UserButton';
import { UserMenu } from '$components/user/UserMenu'; import { UserMenu } from '$components/user/UserMenu';
@ -60,7 +60,8 @@ export class Component extends React.PureComponent<Props, void> {
const left = (width - 700) / 2; const left = (width - 700) / 2;
window.open( window.open(
`https://oauth.vk.com/authorize?client_id=5987644&scope=&redirect_uri=${SERVER}/engine/oauthOrchid.php&response_type=code`, // `https://oauth.vk.com/authorize?client_id=5987644&scope=&redirect_uri=${SERVER}/engine/oauthOrchid.php&response_type=code`,
`https://oauth.vk.com/authorize?client_id=5987644&scope=&redirect_uri=${TEST}/auth/social/vk`,
'socialPopupWindow', 'socialPopupWindow',
`location=no,width=700,height=370,scrollbars=no,top=${top},left=${left},resizable=no` `location=no,width=700,height=370,scrollbars=no,top=${top},left=${left},resizable=no`
); );

View file

@ -1,8 +1,10 @@
export const SERVER = 'http://alpha-map.vault48.org'; export const SERVER = 'http://alpha-map.vault48.org';
export const TEST = 'http://localhost:3000';
export const API = { export const API = {
COMPOSE: `${SERVER}/engine/composerOrchid.php`, COMPOSE: `${SERVER}/engine/composerOrchid.php`,
GET_GUEST: `${SERVER}/engine/authOrchid.php`, GET_GUEST: `${TEST}/auth/guest`,
CHECK_TOKEN: `${SERVER}/engine/authOrchid.php`, CHECK_TOKEN: `${TEST}/auth`,
GET_MAP: `${SERVER}/engine/authOrchid.php`, GET_MAP: `${SERVER}/engine/authOrchid.php`,
POST_MAP: `${SERVER}/engine/authOrchid.php?action=store`, POST_MAP: `${SERVER}/engine/authOrchid.php?action=store`,
}; };