A simple file sharing site with an easy to use API and online panel.
25'ten fazla konu seçemezsiniz Konular bir harf veya rakamla başlamalı, kısa çizgiler ('-') içerebilir ve en fazla 35 karakter uzunluğunda olabilir.

81 satır
2.6KB

  1. var fs = require('fs');
  2. var path = require('path');
  3. var express = require('express');
  4. var router = express.Router();
  5. var User = require('../models/User.js');
  6. var Invite = require('../models/Invite.js');
  7. var passport = require('passport');
  8. function checkInvite(code, callback) {
  9. Invite.findOne({code: code}, function (err, invite) {
  10. if (err) return callback(err);
  11. if (!invite || invite.used || invite.exp < new Date())
  12. callback(null, false);
  13. else
  14. callback(null, true, invite);
  15. });
  16. }
  17. function useInvite(code, username) {
  18. Invite.updateOne({code: code}, {recipient: username, used: new Date()}, function (err) {
  19. if (err) throw err;
  20. });
  21. }
  22. router.post('/register', function (req, res, next) {
  23. // Validate the invite code, then hand off to passport
  24. checkInvite(req.body.invite, function (err, valid, invite) {
  25. if (valid) {
  26. User.register(
  27. new User({username: req.body.username, scope: invite.scope, date: Date.now()}),
  28. req.body.password,
  29. function (err) {
  30. if (err) return res.status(403).json({'message': err.message});
  31. passport.authenticate('local')(req, res, function () {
  32. req.session.save(function(err) {
  33. if (err) return next(err);
  34. useInvite(req.body.invite, req.body.username);
  35. res.status(200).json({'message': 'Registered.'});
  36. });
  37. });
  38. }
  39. );
  40. } else {
  41. res.status(401).json({'message': 'Invalid invite code.'});
  42. }
  43. });
  44. });
  45. router.post('/login', function (req, res, next) {
  46. passport.authenticate('local', function(err, user, info) {
  47. if (err) return next(err);
  48. if (!user) return res.status(401).json({'message': info});
  49. req.logIn(user, function(err) {
  50. if (err) return next(err);
  51. res.status(200).json({'message': 'Logged in.'});
  52. });
  53. })(req, res, next);
  54. });
  55. router.get('/logout', function (req, res) {
  56. req.logout();
  57. res.status(200).json({'message': 'Logged out.'});
  58. });
  59. router.get('/session', function(req, res) {
  60. if (req.session.passport.user) {
  61. User.findOne({username: req.session.passport.user}, function(err, user) {
  62. res.status(200).json({
  63. user: user.username,
  64. scope: user.scope
  65. });
  66. });
  67. } else {
  68. res.status(401).json({'message': 'Unauthorized.'});
  69. }
  70. });
  71. module.exports = router;