private room but socketio not ready
This commit is contained in:
parent
c652958324
commit
36e6596c78
11 changed files with 5019 additions and 0 deletions
28
backend/service-privateroom/auth.js
Normal file
28
backend/service-privateroom/auth.js
Normal file
|
|
@ -0,0 +1,28 @@
|
||||||
|
const request = require('request');
|
||||||
|
|
||||||
|
function getSession (req, callback) {
|
||||||
|
if(typeof req.headers.cookie !== 'undefined'){
|
||||||
|
request.post({
|
||||||
|
headers: {'content-type' : 'application/x-www-form-urlencoded'},
|
||||||
|
url: 'http://127.0.0.1:3000/verify:token',
|
||||||
|
body: 'sessionid='+req.headers.cookie.replace('SESSIONID=','')
|
||||||
|
},function (error, response, body) {
|
||||||
|
const bodyJson = JSON.parse(body);
|
||||||
|
if (bodyJson && bodyJson.status && bodyJson.data) {
|
||||||
|
if (bodyJson.status === 'ok') {
|
||||||
|
return callback(bodyJson.data.token);
|
||||||
|
} else {
|
||||||
|
return callback(bodyJson.data.reason);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
return callback(undefined);
|
||||||
|
}
|
||||||
|
module.exports.getSession = getSession;
|
||||||
|
|
||||||
|
function getUsername(session) {
|
||||||
|
if (typeof session === 'undefined' || typeof session.username === 'undefined') return -1;
|
||||||
|
return session.username;
|
||||||
|
}
|
||||||
|
module.exports.getUsername = getUsername;
|
||||||
13
backend/service-privateroom/config.js
Normal file
13
backend/service-privateroom/config.js
Normal file
|
|
@ -0,0 +1,13 @@
|
||||||
|
const config = {
|
||||||
|
mongodbDatabase: 'chat',
|
||||||
|
mongodbHost: 'mongodb://127.0.0.1:27017/',
|
||||||
|
charset: 'utf8',
|
||||||
|
mongodbLogin: '',
|
||||||
|
mongodbPassword: '',
|
||||||
|
|
||||||
|
mongodbPrivatedMessages: 'privatedMessages'
|
||||||
|
};
|
||||||
|
module.exports = config;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
1
backend/service-privateroom/index.js
Normal file
1
backend/service-privateroom/index.js
Normal file
|
|
@ -0,0 +1 @@
|
||||||
|
const io = require("socket.io")
|
||||||
12
backend/service-privateroom/models/Conversation.js
Normal file
12
backend/service-privateroom/models/Conversation.js
Normal file
|
|
@ -0,0 +1,12 @@
|
||||||
|
const mongoose = require("mongoose")
|
||||||
|
|
||||||
|
const ConversationSchema = new mongoose.Schema(
|
||||||
|
{
|
||||||
|
members: {
|
||||||
|
type: Array
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{ timestamps: true }
|
||||||
|
);
|
||||||
|
|
||||||
|
module.exports = mongoose.model("Conversation", ConversationSchema);
|
||||||
21
backend/service-privateroom/models/Message.js
Normal file
21
backend/service-privateroom/models/Message.js
Normal file
|
|
@ -0,0 +1,21 @@
|
||||||
|
const mongoose = require("mongoose")
|
||||||
|
|
||||||
|
const MessageSchema = new mongoose.Schema(
|
||||||
|
{
|
||||||
|
conversationId: {
|
||||||
|
type: String
|
||||||
|
},
|
||||||
|
sender: {
|
||||||
|
type: String
|
||||||
|
},
|
||||||
|
text: {
|
||||||
|
type: String
|
||||||
|
},
|
||||||
|
date:{
|
||||||
|
type: Date,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{ timestamps: true }
|
||||||
|
);
|
||||||
|
|
||||||
|
module.exports = mongoose.model("PrivatedMessage", MessageSchema);
|
||||||
37
backend/service-privateroom/mongodb-message.js
Normal file
37
backend/service-privateroom/mongodb-message.js
Normal file
|
|
@ -0,0 +1,37 @@
|
||||||
|
const config = require('./config');
|
||||||
|
const mongoose = require( 'mongoose' );
|
||||||
|
const url = config.mongodbHost+config.mongodbDatabase;
|
||||||
|
|
||||||
|
mongoose.connect(url,({useNewUrlParser: true, useUnifiedTopology: true})).then( function(){
|
||||||
|
console.log('mongodb-message connected '+mongoose.connection.readyState);
|
||||||
|
}).catch(function(err){
|
||||||
|
console.log('error : '+err);
|
||||||
|
});
|
||||||
|
|
||||||
|
const schemaMessage = mongoose.Schema({
|
||||||
|
username:{
|
||||||
|
type: String,
|
||||||
|
required: true
|
||||||
|
},
|
||||||
|
date:{
|
||||||
|
type: Date,
|
||||||
|
required: true
|
||||||
|
},
|
||||||
|
channel:{
|
||||||
|
type: String,
|
||||||
|
required: true
|
||||||
|
},
|
||||||
|
message:{
|
||||||
|
type: String,
|
||||||
|
required: true
|
||||||
|
}
|
||||||
|
},{ versionKey: false });
|
||||||
|
|
||||||
|
const messages = mongoose.model(config.mongodbMessages, schemaMessage);
|
||||||
|
|
||||||
|
// messages.find({},(err, messages) => {
|
||||||
|
// if(err) throw err;
|
||||||
|
// console.log(messages);
|
||||||
|
// });
|
||||||
|
|
||||||
|
module.exports = messages;
|
||||||
4752
backend/service-privateroom/package-lock.json
generated
Normal file
4752
backend/service-privateroom/package-lock.json
generated
Normal file
File diff suppressed because it is too large
Load diff
28
backend/service-privateroom/package.json
Normal file
28
backend/service-privateroom/package.json
Normal file
|
|
@ -0,0 +1,28 @@
|
||||||
|
{
|
||||||
|
"name": "service-privateroom",
|
||||||
|
"version": "1.0.0",
|
||||||
|
"description": "",
|
||||||
|
"main": "server.js",
|
||||||
|
"scripts": {
|
||||||
|
"test": "echo \"Error: no test specified\" && exit 1",
|
||||||
|
"start": "node server.js"
|
||||||
|
},
|
||||||
|
"author": "Van Khai PHAN",
|
||||||
|
"license": "ISC",
|
||||||
|
"dependencies": {
|
||||||
|
"body-parser": "^1.19.0",
|
||||||
|
"cookie-parser": "^1.4.5",
|
||||||
|
"cors": "^2.8.5",
|
||||||
|
"express": "^4.17.1",
|
||||||
|
"fs": "^0.0.1-security",
|
||||||
|
"http": "^0.0.1-security",
|
||||||
|
"jsonwebtoken": "^8.5.1",
|
||||||
|
"mongodb": "^3.6.9",
|
||||||
|
"mongoose": "^5.12.12",
|
||||||
|
"nodemon": "^2.0.7",
|
||||||
|
"socket.io": "^4.1.2"
|
||||||
|
},
|
||||||
|
"devDependencies": {
|
||||||
|
"request": "^2.88.2"
|
||||||
|
}
|
||||||
|
}
|
||||||
30
backend/service-privateroom/routes/conversations.js
Normal file
30
backend/service-privateroom/routes/conversations.js
Normal file
|
|
@ -0,0 +1,30 @@
|
||||||
|
const router = require("express").Router();
|
||||||
|
const Conversation = require("../models/Conversation");
|
||||||
|
|
||||||
|
// new conv
|
||||||
|
router.post("/", async (req, res) => {
|
||||||
|
const newConversation = new Conversation({
|
||||||
|
members: [req.body.senderId, req.body.receiverId]
|
||||||
|
});
|
||||||
|
|
||||||
|
try{
|
||||||
|
const savedConversation = await newConversation.save();
|
||||||
|
res.status(200).json(savedConversation);
|
||||||
|
}catch (err){
|
||||||
|
res.status(500).json(err)
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
// get conv
|
||||||
|
router.get("/:userId", async (req, res) => {
|
||||||
|
try {
|
||||||
|
const conversation = await Conversation.find({
|
||||||
|
members: { $in: [req.params.userId] },
|
||||||
|
});
|
||||||
|
res.status(200).json(conversation);
|
||||||
|
}catch (err){
|
||||||
|
res.status(500).json(err)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
module.exports = router;
|
||||||
29
backend/service-privateroom/routes/messages.js
Normal file
29
backend/service-privateroom/routes/messages.js
Normal file
|
|
@ -0,0 +1,29 @@
|
||||||
|
const router = require("express").Router();
|
||||||
|
const Messages = require("../models/Message");
|
||||||
|
|
||||||
|
// add
|
||||||
|
router.post("/", async (req, res) => {
|
||||||
|
let newMessage = new Messages(req.body);
|
||||||
|
const date = Date.now();
|
||||||
|
newMessage["date"] = date;
|
||||||
|
// res.status(200).json(newMessage);
|
||||||
|
try{
|
||||||
|
const savedMessage = await newMessage.save();
|
||||||
|
res.status(200).json(savedMessage);
|
||||||
|
}catch (err){
|
||||||
|
res.status(500).json(err)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
// get
|
||||||
|
router.get("/:conversationId", async (req, res) => {
|
||||||
|
try{
|
||||||
|
const messages = await Messages.find({
|
||||||
|
conversationId: req.params.conversationId
|
||||||
|
})
|
||||||
|
res.status(200).json(messages);
|
||||||
|
}catch (err){
|
||||||
|
res.status(500).json(err)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
module.exports = router;
|
||||||
68
backend/service-privateroom/server.js
Normal file
68
backend/service-privateroom/server.js
Normal file
|
|
@ -0,0 +1,68 @@
|
||||||
|
const express = require('express');
|
||||||
|
const app = express();
|
||||||
|
const port = process.env.PORT || 3002;
|
||||||
|
const http = require('http');
|
||||||
|
const { Server } = require("socket.io");
|
||||||
|
const server = http.createServer(app);
|
||||||
|
const io = new Server(server, {
|
||||||
|
cors: {
|
||||||
|
origin: "http://127.0.0.1:4200",
|
||||||
|
methods: ["GET", "POST"],
|
||||||
|
credentials: true
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
const cookieParser = require('cookie-parser');
|
||||||
|
app.use(cookieParser());
|
||||||
|
|
||||||
|
const bodyParser = require('body-parser');
|
||||||
|
app.use(bodyParser.urlencoded({extended:true}));
|
||||||
|
app.use(bodyParser.json());
|
||||||
|
|
||||||
|
const cors = require('cors');
|
||||||
|
app.use(cors({origin: 'http://127.0.0.1:4200', credentials: true}));
|
||||||
|
|
||||||
|
const mongoose = require("mongoose");
|
||||||
|
const conversationRoute = require("./routes/conversations");
|
||||||
|
const messageRoute = require("./routes/messages");
|
||||||
|
const router = express.Router();
|
||||||
|
const path = require("path");
|
||||||
|
const config = require("./config");
|
||||||
|
|
||||||
|
const Conversations = require("../service-privateroom/models/Conversation");
|
||||||
|
const url = config.mongodbHost+config.mongodbDatabase;
|
||||||
|
|
||||||
|
mongoose.connect(url,({useNewUrlParser: true, useUnifiedTopology: true})).then( function(){
|
||||||
|
console.log('mongodb-privated-room connected '+mongoose.connection.readyState);
|
||||||
|
}).catch(function(err){
|
||||||
|
console.log('error : '+err);
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
|
app.use("/conversations", conversationRoute);
|
||||||
|
app.use("/messages", messageRoute);
|
||||||
|
|
||||||
|
io.on('connection',socket => {
|
||||||
|
|
||||||
|
let users = {};
|
||||||
|
|
||||||
|
auth.getSession(socket.request, function(res){
|
||||||
|
const getUsername = auth.getUsername(res);
|
||||||
|
if (getUsername === -1) {
|
||||||
|
socket.send('error','not authenticated');
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
console.log(`${getUsername} joined the chat.`);
|
||||||
|
|
||||||
|
//TODO apply conversations and messages
|
||||||
|
|
||||||
|
socket.on("disconnect", function() {
|
||||||
|
console.log(`${getUsername} left the chat.`);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
server.listen(port, () => {
|
||||||
|
console.log(`listening on *:${port}/`);
|
||||||
|
});
|
||||||
Reference in a new issue