mirror of
https://github.com/muerwre/orchidmap-front.git
synced 2025-04-25 19:16:41 +07:00
backend: initial log in dialog
This commit is contained in:
parent
6f6e6ae6d7
commit
8bba2ff1ba
8 changed files with 83 additions and 7 deletions
|
@ -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);
|
||||||
|
|
|
@ -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);
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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
|
||||||
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -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;
|
||||||
|
|
58
backend/routes/auth/social/vk.js
Normal file
58
backend/routes/auth/social/vk.js
Normal 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);
|
||||||
|
};
|
||||||
|
|
|
@ -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`
|
||||||
);
|
);
|
||||||
|
|
|
@ -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`,
|
||||||
};
|
};
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue