private room but socketio not ready

This commit is contained in:
vankhaiphan 2021-05-30 20:55:00 +02:00
parent c652958324
commit 36e6596c78
11 changed files with 5019 additions and 0 deletions

View 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;

View 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;

View file

@ -0,0 +1 @@
const io = require("socket.io")

View 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);

View 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);

View 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;

File diff suppressed because it is too large Load diff

View 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"
}
}

View 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;

View 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;

View 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}/`);
});