oauth.js 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. const express = require('express')
  2. const fs = require('fs')
  3. const https = require('https')
  4. const passport = require('passport')
  5. const TwitterStrategy = require('passport-twitter').Strategy
  6. let config = require('./config.js')
  7. let storage = require('./storage.js')
  8. let oauth = {
  9. start: function() {
  10. let app = express()
  11. app.use(require('express-session')({
  12. secret: storage.data.sess_secret,
  13. resave: true,
  14. saveUninitialized: true
  15. }));
  16. app.use(passport.initialize())
  17. app.use(passport.session({ secret: storage.data.sess_secret }))
  18. passport.use(new TwitterStrategy({
  19. consumerKey: config.twitter_consumer_key,
  20. consumerSecret: config.twitter_consumer_secret,
  21. callbackURL: `${config.callback_url}${config.callback_path}`
  22. },
  23. (token, tokenSecret, profile, cb) => {
  24. storage.data.token = token
  25. storage.data.token_secret = tokenSecret
  26. storage.save()
  27. console.log("[INFO] Got tokens, restart!")
  28. }
  29. ))
  30. console.log('[INFO] Starting HTTPS webserver for OAuth')
  31. app.get('/', passport.authenticate('twitter'))
  32. app.get(config.callback_path, passport.authenticate('twitter', { failureRedirect: '/failed' }), (req, res) => {
  33. res.redirect("/success")
  34. })
  35. app.get('/failed', (req, res) => res.send('Authentication failed'))
  36. app.get('/success', (req, res) => res.send('Authentication success. Restart XTweet when it stops'))
  37. https.createServer({
  38. key: fs.readFileSync(config.key),
  39. cert: fs.readFileSync(config.cert),
  40. passphrase: config.passphrase
  41. }, app).listen(config.port, config.bind_ip)
  42. console.log(`[INFO] Server listening on ${config.bind_ip}:${config.port}`)
  43. }
  44. }
  45. module.exports = oauth;