Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- router.post(
- '/register',
- e(async (req, res, next) => {
- let username = null
- try {
- await request({
- method: 'post',
- uri: 'https://makerpassport.org/api/v4/users',
- headers: {
- Authorization: process.env.GITLAB_ADMIN_TOKEN,
- },
- body: {
- email: req.body.email,
- name: req.body.name,
- username: req.body.username,
- password: req.body.password,
- },
- json: true,
- })
- } catch (e) {
- if (e.statusCode === 409) {
- // user already exists
- const user = (await request({
- method: 'get',
- uri: `https://makerpassport.org/api/v4/users?search=${req.body.email}`,
- headers: {
- Authorization: process.env.GITLAB_ADMIN_TOKEN,
- },
- json: true,
- }))[0]
- if (user.email === req.body.email) {
- // make sure email is the same otherwise user could be impersonated
- // from account with email as name
- username = user.username
- }
- } else {
- console.error('could not register user', e.statusCode, e.message)
- return res.sendStatus(e.statusCode)
- }
- }
- let user = await User.findOne({ email: req.body.email })
- let userToken = null
- try {
- userToken = await request({
- method: 'post',
- uri: 'https://makerpassport.org/oauth/token',
- headers: {
- Authorization: process.env.GITLAB_ADMIN_TOKEN,
- },
- body: {
- grant_type: 'password',
- username: username || req.body.username,
- password: req.body.password,
- },
- json: true,
- })
- } catch (e) {
- if (user && user.covid) {
- return res.sendStatus(409)
- }
- console.error('could not login user in gitlab', e.statusCode, e.message)
- return res.sendStatus(e.statusCode)
- }
- const userData = {
- email: req.body.email,
- username: req.body.username,
- firstName: req.body.firstName,
- lastName: req.body.lastName,
- address: {
- city: req.body.city,
- postCode: req.body.postCode,
- line1: req.body.address,
- },
- covid: {
- userType: req.body.type,
- subtype: req.body.subtype,
- organization: req.body.organization,
- telephone: req.body.telephone,
- },
- }
- if (req.body.type === 'give') {
- userData.lab = await Lab.create({
- name: req.body.name,
- address: {
- city: req.body.city,
- postCode: req.body.postCode,
- line1: req.body.address,
- },
- contact: req.body.telephone,
- })
- }
- try {
- user = await register(userData)
- } catch (e) {
- if (e.message.includes('duplicate')) {
- Object.assign(user, userData)
- }
- }
- user.logins.push({
- date: new Date().getTime(),
- })
- await user.save()
- const token = generateToken(user._id)
- res.status(200).send({
- user,
- token,
- access_token: userToken.access_token,
- })
- })
- )
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement