· 7 years ago · Jun 03, 2018, 08:56 PM
1const express = require('express')
2const jwt = require('jsonwebtoken')
3const router = express.Router()
4const User = require('../models/user')
5const Player = require('../models/player')
6const request = require('request');
7const mongoose = require('mongoose')
8const champions = require('../champions')
9const bcrypt = require('bcrypt-nodejs')
10const db = "mongodb://userazuh:okokyt@ds137600.mlab.com:37600/seekplayersdb"
11
12mongoose.connect(db, err => {
13 if (err) {
14 console.log('Error!' + err);
15 } else {
16 console.log('Connected to mongodb');
17 }
18})
19
20function verifyToken(req, res, next) {
21 if (!req.headers.authorization) {
22 return res.status(401).send('Unautorized request')
23 }
24 let token = req.headers.authorization.split(' ')[1]
25 if (token === 'null') {
26 return res.status(401).send('Unautorized request')
27 }
28 let payload = jwt.verify(token, 'secretKey')
29 if (!payload) {
30 return res.status(401).send('Unautorized request')
31 }
32 req.userId = payload.subject
33 next()
34}
35
36router.get('/', (req, res) => {
37 res.send('From API route')
38});
39
40router.get('/champions', (req, res) => {
41 res.json({ champions });
42})
43
44router.post('/register', (req, res) => {
45 let userData = req.body
46 userData.password = bcrypt.hashSync(userData.password, bcrypt.genSaltSync(8), null);
47 let user = new User(userData)
48 user.save((error, registeredUser) => {
49 if (error) {
50 res.status(400).json({message: "Your email is invalid"})
51 } else {
52 let payload = {
53 subject: registeredUser._id
54 }
55 let token = jwt.sign(payload, 'secretKey')
56 res.status(200).json({
57 token,
58 payload,
59 user: registeredUser
60 })
61 }
62 })
63})
64
65router.post('/login', (req, res) => {
66 let userData = req.body
67 User.findOne({
68 email: userData.email
69 }).populate('playercard').exec((error, user) => {
70 if (error) {
71 res.status(400).json({message: "Your email or password is invalid"})
72 } else {
73 if (!user) {
74 res.status(401).json({message: 'Invalid email'})
75 } else {
76 if (!bcrypt.compareSync(userData.password, user.password)) {
77 res.status(401).json({message: 'Invalid password'})
78 } else {
79 let payload = {
80 subject: user._id
81 }
82 let token = jwt.sign(payload, 'secretKey')
83 res.status(200).send({
84 token,
85 user
86 })
87 }
88 }
89 }
90 })
91})
92
93
94router.put('/account', (req, res) => {
95 let userData = req.body;
96 User.findOne({
97 _id: userData.id
98 }).exec((error, user) => {
99 if (error) {
100 res.status(401).json({message: 'User not found'})
101 } else {
102 user.email = userData.email;
103 user.password = bcrypt.hashSync(userData.password, bcrypt.genSaltSync(8), null);
104 user.save(function (err) {
105 if (err) {
106 return res.status(400).json({message: 'Invalid email'})
107 }
108 res.status(200).json({
109 message: 'Account updated'
110 })
111 })
112 }
113 })
114})
115
116router.put('/newuser', (req, res) => {
117 let newCardData = req.body;
118 Player.findOne({
119 creator: newCardData.creator
120 }, (err, player) => {
121 if (err) {
122 res.send(err);
123 } else {
124 player.pseudo = newCardData.pseudo;
125 player.rank = newCardData.rank;
126 player.server = newCardData.server;
127 player.mainchamp = newCardData.mainchamp;
128 player.role = newCardData.role;
129 player.save(function (error) {
130 if (error) {
131 res.send(error)
132 }
133 res.send({
134 message: 'Player updated'
135 })
136 })
137 }
138 })
139})
140
141
142router.delete('/account/:id', (req, res) => {
143 User.remove({
144 _id: req.params.id
145 }, function (err) {
146 if (err) {
147 console.log('error');
148 }
149 })
150})
151
152router.get('/players', (req, res) => {
153 Player.find(function (err, players) {
154 if (err) {
155 res.send(err)
156 }
157 res.json(players)
158 })
159})
160
161
162router.delete('/newuser/:id', (req, res) => {
163 let id = req.params.id;
164 Player.findOneAndRemove({
165 creator: id
166 }, function (err, player) {
167 if (err) {
168 res.send(err);
169 }
170 User.findOne({ playercard: player._id }, (err, user) => {
171 user.playercard = null;
172 user.save();
173 })
174 res.json({ success: true, message: 'Your card has been deleted' });
175 })
176})
177
178router.post('/newuser', (req, res) => {
179 let cardData = req.body
180 let player = new Player(cardData)
181 player.save((err, new_Player) => {
182 if (err) {
183 console.log(err);
184 } else {
185 User.findOne({
186 _id: cardData.creator
187 }, function (err, user) {
188 user.playercard = new_Player;
189 res.status(200).json({ user: user,
190 message: 'Your card has been created' })
191 user.save();
192 })
193 }
194 })
195})
196
197module.exports = router