Sfoglia il codice sorgente

Added GitHub/Discord authentication.

KrisVos130 8 anni fa
parent
commit
fa1aebbdc8
4 ha cambiato i file con 107 aggiunte e 21 eliminazioni
  1. 63 0
      backend/app.js
  2. 9 0
      backend/config/template.json
  3. 12 0
      backend/logic/expressHandler.js
  4. 23 21
      backend/package.json

+ 63 - 0
backend/app.js

@@ -17,6 +17,8 @@ const express          = require('express'),
       request          = require('request'),
       passport         = require('passport'),
       LocalStrategy    = require('passport-local').Strategy,
+      GitHubStrategy    = require('passport-github').Strategy,
+	  DiscordStrategy = require('passport-discord').Strategy,
       passportSocketIo = require("passport.socketio");
 
 // global module
@@ -104,6 +106,67 @@ function setupExpress() {
 		});
 	}));
 
+	passport.use(new GitHubStrategy({
+			clientID: config.get("apis.github.client"),
+			clientSecret: config.get("apis.github.secret"),
+			callbackURL: `${config.get("domain")}/users/github/callback`
+		},
+		function(accessToken, refreshToken, profile, done) {
+			console.log(accessToken, refreshToken, profile);
+			/*User.findOrCreate({ githubId: profile.id }, function (err, user) {
+				return cb(err, user);
+			});*/
+			global.db.user.findOne({"services.github.token": profile._json.id}, (err, user) => {
+				if (err) return done(err);
+				if (!user) {
+					let newUser = new global.db.user({
+						username: profile.username,
+						services: {
+							github: {
+								token: profile._json.id
+							}
+						}
+					});
+					newUser.save(function (err) {
+						if (err) throw err;
+						return done(null, newUser);
+					});
+				} else {
+					return done(null, user);
+				}
+			});
+		}
+	));
+
+	passport.use(new DiscordStrategy({
+			clientID: config.get("apis.discord.client"),
+			clientSecret: config.get("apis.discord.secret"),
+			callbackURL: `${config.get("domain")}/users/discord/callback`
+		},
+		function(accessToken, refreshToken, profile, done) {
+			console.log(accessToken, refreshToken, profile);
+			global.db.user.findOne({"services.discord.token": profile.id}, (err, user) => {
+				if (err) return done(err);
+				if (!user) {
+					let newUser = new global.db.user({
+						username: profile.username,
+						services: {
+							discord: {
+								token: profile.id
+							}
+						}
+					});
+					newUser.save(function (err) {
+						if (err) throw err;
+						return done(null, newUser);
+					});
+				} else {
+					return done(null, user);
+				}
+			});
+		}
+	));
+
 	app.use(bodyParser.json());
 	app.use(bodyParser.urlencoded({
 		extended: true

+ 9 - 0
backend/config/template.json

@@ -1,11 +1,20 @@
 {
 	"secret": "",
+	"domain": "http://dev.musare.com",
 	"apis": {
 		"youtube": {
 			"key": ""
 		},
 		"recapthca": {
 			"secret": ""
+		},
+		"github": {
+			"client": "",
+			"secret": ""
+		},
+		"discord": {
+			"client": "",
+			"secret": ""
 		}
 	}
 }

+ 12 - 0
backend/logic/expressHandler.js

@@ -22,6 +22,18 @@ module.exports = (core, app) => {
 		});
 	});
 
+	app.get('/users/github', passport.authenticate('github'));
+
+	app.get('/users/github/callback', passport.authenticate('github'), function (req, res) {
+		res.redirect('/');
+	});
+
+	app.get('/users/discord', passport.authenticate('discord', {scope: ['identify', 'email']}));
+
+	app.get('/users/discord/callback', passport.authenticate('discord'), function (req, res) {
+		res.redirect('/');
+	});
+
 	app.get('/stations', (req, res) => {
 		core['/stations'](result => {
 			res.send(JSON.stringify(result));

+ 23 - 21
backend/package.json

@@ -1,23 +1,25 @@
 {
-	"name": "musare-backend",
-	"version": "0.0.1",
-	"description": "A modern, open-source, collaborative music app https://musare.com",
-	"main": "app.js",
-	"author": "Musare Team",
-	"repository": "https://github.com/Musare/MusareNode",
-	"dependencies": {
-		"async": "2.0.1",
-		"body-parser": "^1.15.2",
-		"config": "^1.21.0",
-		"connect-mongo": "^1.3.2",
-		"cookie-parser": "^1.4.3",
-		"express": "^4.14.0",
-		"express-session": "^1.14.0",
-		"mongoose": "^4.6.0",
-		"passport": "^0.3.2",
-		"passport-local": "^1.0.0",
-		"passport.socketio": "^3.6.2",
-		"request": "^2.74.0",
-		"socket.io": "^1.4.8"
-	}
+  "name": "musare-backend",
+  "version": "0.0.1",
+  "description": "A modern, open-source, collaborative music app https://musare.com",
+  "main": "app.js",
+  "author": "Musare Team",
+  "repository": "https://github.com/Musare/MusareNode",
+  "dependencies": {
+    "async": "2.0.1",
+    "body-parser": "^1.15.2",
+    "config": "^1.21.0",
+    "connect-mongo": "^1.3.2",
+    "cookie-parser": "^1.4.3",
+    "express": "^4.14.0",
+    "express-session": "^1.14.0",
+    "mongoose": "^4.6.0",
+    "passport": "^0.3.2",
+    "passport-discord": "^0.1.1",
+    "passport-github": "^1.1.0",
+    "passport-local": "^1.0.0",
+    "passport.socketio": "^3.6.2",
+    "request": "^2.74.0",
+    "socket.io": "^1.4.8"
+  }
 }