Browse Source

authentication

main
Angga 1 year ago
parent
commit
fe23252b84
  1. 62
      botmon.js
  2. 100
      package-lock.json
  3. 4
      package.json

62
botmon.js

@ -1,5 +1,7 @@ @@ -1,5 +1,7 @@
const express = require('express');
const venom = require('venom-bot');
const jwt = require('jsonwebtoken');
const bcrypt = require('bcryptjs');
const app = express();
let botClient;
@ -9,6 +11,11 @@ app.use(express.json({ limit: '10mb' })); @@ -9,6 +11,11 @@ app.use(express.json({ limit: '10mb' }));
const { session_name, browser_args, port } = require('./config.js');
const { send_message, send_image, get_all_chats, base64ToFile } = require('./utils.js');
// Secret key for JWT
const secretKey = 'kopikopi'; // Replace with your own secret key
const users = [{ username: 'dhyn', password: '$2a$10$CgymXA8sNRdVPA6StSyOIeyvk57L.z/n22sOd37/PMwzHXnWY2Wsm' }]; // In-memory user storage (for simplicity)
venom
.create(
//session
@ -78,11 +85,42 @@ function start(client) { @@ -78,11 +85,42 @@ function start(client) {
});
}
// Register route
// app.post('/register', async (req, res) => {
// const { username, password } = req.body;
// if (users.find(user => user.username === username)) {
// return res.status(400).json({ error: 'User already exists' });
// }
// const hashedPassword = await bcrypt.hash(password, 10);
// users.push({ username, password: hashedPassword });
// res.status(201).json({ message: 'User registered successfully' });
// });
// Login route
app.post('/login', async (req, res) => {
const { username, password } = req.body;
const user = users.find(user => user.username === username);
if (!user) {
return res.status(401).json({ error: 'Invalid credentials' });
}
const isPasswordValid = await bcrypt.compare(password, user.password);
if (!isPasswordValid) {
return res.status(401).json({ error: 'Invalid credentials' });
}
const token = jwt.sign({ username: user.username }, secretKey, { expiresIn: '1h' });
res.status(200).json({ token });
});
app.get('/', (req, res) => {
res.send('Hello World!');
});
app.get('/get-all-chats', (req, res) => {
app.get('/get-all-chats', authenticate, (req, res) => {
var result = get_all_chats(botClient);
console.log('================ /botmon/get-all-chats');
@ -96,7 +134,7 @@ app.get('/get-all-chats', (req, res) => { @@ -96,7 +134,7 @@ app.get('/get-all-chats', (req, res) => {
});
});
app.post('/send-message', (req, res) => {
app.post('/send-message', authenticate, (req, res) => {
const { to, message } = req.body;
console.log('================ /botmon/send-message');
@ -119,7 +157,7 @@ app.post('/send-message', (req, res) => { @@ -119,7 +157,7 @@ app.post('/send-message', (req, res) => {
});
});
app.post('/send-image', (req, res) => {
app.post('/send-image', authenticate, (req, res) => {
const { to, name, caption, image_data } = req.body;
console.log('================ /botmon/send-image');
@ -153,6 +191,24 @@ app.post('/send-image', (req, res) => { @@ -153,6 +191,24 @@ app.post('/send-image', (req, res) => {
})
});
// Middleware to protect routes
function authenticate(req, res, next) {
const token = req.headers['authorization'];
if (!token) {
return res.status(401).json({ error: 'No token provided' });
}
jwt.verify(token, secretKey, (err, decoded) => {
if (err) {
return res.status(401).json({ error: 'Failed to authenticate token' });
}
req.user = decoded;
next();
});
}
// Start the Express server
app.listen(port, () => {
console.log(`Server running at http://localhost:${port}/`);

100
package-lock.json generated

@ -5,7 +5,9 @@ @@ -5,7 +5,9 @@
"packages": {
"": {
"dependencies": {
"bcryptjs": "^2.4.3",
"express": "^4.19.2",
"jsonwebtoken": "^9.0.2",
"venom-bot": "^5.1.0"
}
},
@ -1313,6 +1315,11 @@ @@ -1313,6 +1315,11 @@
"node": ">=10.0.0"
}
},
"node_modules/bcryptjs": {
"version": "2.4.3",
"resolved": "https://registry.npmjs.org/bcryptjs/-/bcryptjs-2.4.3.tgz",
"integrity": "sha512-V/Hy/X9Vt7f3BbPJEi8BdVFMByHi+jNXrYkW3huaybV/kQ0KJg0Y6PkEMbn+zeT+i+SiKZ/HMqJGIIt4LZDqNQ=="
},
"node_modules/big-integer": {
"version": "1.6.52",
"resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.52.tgz",
@ -1458,6 +1465,11 @@ @@ -1458,6 +1465,11 @@
"node": "*"
}
},
"node_modules/buffer-equal-constant-time": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz",
"integrity": "sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA=="
},
"node_modules/buffer-from": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz",
@ -2357,6 +2369,14 @@ @@ -2357,6 +2369,14 @@
"resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz",
"integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA=="
},
"node_modules/ecdsa-sig-formatter": {
"version": "1.0.11",
"resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz",
"integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==",
"dependencies": {
"safe-buffer": "^5.0.1"
}
},
"node_modules/ee-first": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",
@ -3890,6 +3910,51 @@ @@ -3890,6 +3910,51 @@
"node >= 0.2.0"
]
},
"node_modules/jsonwebtoken": {
"version": "9.0.2",
"resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-9.0.2.tgz",
"integrity": "sha512-PRp66vJ865SSqOlgqS8hujT5U4AOgMfhrwYIuIhfKaoSCZcirrmASQr8CX7cUg+RMih+hgznrjp99o+W4pJLHQ==",
"dependencies": {
"jws": "^3.2.2",
"lodash.includes": "^4.3.0",
"lodash.isboolean": "^3.0.3",
"lodash.isinteger": "^4.0.4",
"lodash.isnumber": "^3.0.3",
"lodash.isplainobject": "^4.0.6",
"lodash.isstring": "^4.0.1",
"lodash.once": "^4.0.0",
"ms": "^2.1.1",
"semver": "^7.5.4"
},
"engines": {
"node": ">=12",
"npm": ">=6"
}
},
"node_modules/jsonwebtoken/node_modules/ms": {
"version": "2.1.3",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
"integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="
},
"node_modules/jwa": {
"version": "1.4.1",
"resolved": "https://registry.npmjs.org/jwa/-/jwa-1.4.1.tgz",
"integrity": "sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==",
"dependencies": {
"buffer-equal-constant-time": "1.0.1",
"ecdsa-sig-formatter": "1.0.11",
"safe-buffer": "^5.0.1"
}
},
"node_modules/jws": {
"version": "3.2.2",
"resolved": "https://registry.npmjs.org/jws/-/jws-3.2.2.tgz",
"integrity": "sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==",
"dependencies": {
"jwa": "^1.4.1",
"safe-buffer": "^5.0.1"
}
},
"node_modules/keyv": {
"version": "4.5.4",
"resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz",
@ -3996,6 +4061,41 @@ @@ -3996,6 +4061,41 @@
"resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
"integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg=="
},
"node_modules/lodash.includes": {
"version": "4.3.0",
"resolved": "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz",
"integrity": "sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w=="
},
"node_modules/lodash.isboolean": {
"version": "3.0.3",
"resolved": "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz",
"integrity": "sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg=="
},
"node_modules/lodash.isinteger": {
"version": "4.0.4",
"resolved": "https://registry.npmjs.org/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz",
"integrity": "sha512-DBwtEWN2caHQ9/imiNeEA5ys1JoRtRfY3d7V9wkqtbycnAmTvRRmbHKDV4a0EYc678/dia0jrte4tjYwVBaZUA=="
},
"node_modules/lodash.isnumber": {
"version": "3.0.3",
"resolved": "https://registry.npmjs.org/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz",
"integrity": "sha512-QYqzpfwO3/CWf3XP+Z+tkQsfaLL/EnUlXWVkIk5FUPc4sBdTehEqZONuyRt2P67PXAk+NXmTBcc97zw9t1FQrw=="
},
"node_modules/lodash.isplainobject": {
"version": "4.0.6",
"resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz",
"integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA=="
},
"node_modules/lodash.isstring": {
"version": "4.0.1",
"resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz",
"integrity": "sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw=="
},
"node_modules/lodash.once": {
"version": "4.1.1",
"resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz",
"integrity": "sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg=="
},
"node_modules/log-symbols": {
"version": "5.1.0",
"resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-5.1.0.tgz",

4
package.json

@ -1,6 +1,8 @@ @@ -1,6 +1,8 @@
{
"dependencies": {
"express": "^4.19.2",
"venom-bot": "^5.1.0"
"venom-bot": "^5.1.0",
"bcryptjs": "^2.4.3",
"jsonwebtoken": "^9.0.2"
}
}
Loading…
Cancel
Save