Sziasztok. Tud valaki mondnai olyan progit amit saját ubuntu szerverre lehet telepíteni (Csak saját) Tehát nem mint a discord. É lehessen fileokat küldeni chat közös vagy privát. Esetleg hívás. Köszi.
Chat - file küldés és még hívás program server.
*** System restart required ***
Last login: Tue Feb 21 19:25:51 2023 from 192.168.9.96
root@panel:~# snap install rocketchat-server
rocketchat-server (5.x/stable) 5.4.3 from Rocket.Chat (rocketchat✓) installed
root@panel:~# systemctl status snap.rocketchat-server.rocketchat-server.service
● snap.rocketchat-server.rocketchat-server.service - Service for snap application rocketchat-server.rock
Loaded: loaded (/etc/systemd/system/snap.rocketchat-server.rocketchat-server.service; enabled; vendor
Active: active (running) since Tue 2023-02-21 19:58:54 CET; 1min 6s ago
Main PID: 19568 (start_rocketcha)
Tasks: 12 (limit: 4915)
CGroup: /system.slice/snap.rocketchat-server.rocketchat-server.service
├─19568 /bin/bash /snap/rocketchat-server/1539/bin/start_rocketchat.sh
└─19724 node /snap/rocketchat-server/1539/main.js
febr 21 19:58:54 panel systemd[1]: Started Service for snap application rocketchat-server.rocketchat-ser
febr 21 19:58:54 panel rocketchat-server.rocketchat-server[19568]: node $SNAP/main.js
febr 21 19:59:26 panel rocketchat-server.rocketchat-server[19568]: strict mode: use allowUnionTypes to a
febr 21 19:59:31 panel rocketchat-server.rocketchat-server[19568]: LocalStore: store created at
febr 21 19:59:31 panel rocketchat-server.rocketchat-server[19568]: LocalStore: store created at
febr 21 19:59:42 panel rocketchat-server.rocketchat-server[19568]: MessageType.render is deprecated. Use
febr 21 19:59:44 panel rocketchat-server.rocketchat-server[19568]: {"level":40,"time":"2023-02-21T18:59:
és nem jön be: http://localhost:3000/home
A webhely nem érhető elA(z) localhost visszautasította a csatlakozást.
Próbálja ki a következőket:
A kapcsolat ellenőrzése
A proxy és a tűzfal ellenőrzése
ERR_CONNECTION_REFUSED
De ha felraktam akkor miért nem jön be?
Siker vagy csalodás?
- Szerkesztve
Csalódás.
Leszedtem egy másik cuccot azzal annyi gondom van,hogy megy tehát megcsináltam automata futásra Illetve kiszedtem belőle a google recapchat mysql összelőttem.
Be is regisztráltam meg is van az user táblában. De belépni nem enged.... csak pörög ha F5 akkor újból belépést kér...
Ez a file amire hivatkozik:
const crypto = require('crypto');
const { promisify } = require('util');
const jwt = require('jsonwebtoken');
var request = require('request');
const express = require('express');
const User = require('./../models/userModel');
const catchAsync = require('./../utils/catchAsync');
const AppError = require('./../utils/appError');
const sendEmail = require('./../utils/email');
const path = require('path');
const { userJoin } = require('./../utils/users');
const dbConnect = require("../connection");
const bcrypt = require('bcryptjs');
const signToken = id => {
return jwt.sign({ id: id }, process.env.JWT_SECRET, {
expiresIn: process.env.JWT_EXPIRES_IN
});
}
const createSendToken = (user, statusCode, res, msg) => {
const token = signToken(user.id);
const cookieOptions = {
expires: new Date(
Date.now() + process.env.JWT_COOKIE_EXPIRES_IN * 24 * 60 * 60 * 1000
),
httpOnly: true
};
if (process.env.NODE_ENV === 'production') cookieOptions.secure = true;
res.cookie('jwt', token, cookieOptions);
res.cookie('user_id', user.id, cookieOptions);
// Remove password from output
user.password = undefined;
return res.status(statusCode).json({
status: 'success',
message: msg,
token,
data: {user}
});
}
function getQueryResult(query) {
return new Promise((resolve) => {
dbConnect.query(query, function (err, result) {
if (err) throw err;
if (result){
resolve(result)
}
});
})
}
/**
* Sign Up
*/
exports.signup = catchAsync(async (req, res, next) => {
var selectQuery = "SELECT email from users where email = '" + req.body.email + "' "
const invalidEmail = await getQueryResult(selectQuery)
// input field validation
// if (req.body['g-recaptcha-response'] === undefined || req.body['g-recaptcha-response'] === '' || req.body['g-recaptcha-response'] === null) {return res.status(200).json({status: 'fail',message: 'Please select captcha'});}else
if (req.body.name === '') {
return res.status(200).json({
status: 'fail',
message: 'Neved wazze...'
});
}else if (req.body.email === '') {
return res.status(200).json({
status: 'fail',
message: 'Email címed paraszt'
});
}else if (req.body.password === '') {
return res.status(200).json({
status: 'fail',
message: 'Jelszavad!'
});
}else if (req.body.location === '') {
return res.status(200).json({
status: 'fail',
message: 'Ehune laksz.'
});
}else if(invalidEmail.length > 0){
return res.status(200).json({
status: 'fail',
message: 'Email találj ki mást.'
});
}
// Put your secret key here.
var secretKey = process.env.CAPTCHA_SECRET;
// req.connection.remoteAddress will provide IP address of connected user.
var verificationUrl = "https://www.google.com/recaptcha/api/siteverify?secret=" + secretKey + "&response=" + req.body['g-recaptcha-response'] + "&remoteip=" + req.connection.remoteAddress;
// Hitting GET request to the URL, Google will respond with success or error scenario.
request(verificationUrl, async (error, response, body) => {
body = JSON.parse(body);
});
await dbConnect.query("UPDATE users set passwordResetToken='',password='" + await bcrypt.hash(req.body.password, 12) + "',passwordResetExpires='' where passwordResetToken ='"+hashedToken+"' ", function (err, result) {
if (err) throw err;
// 4) Log the user in, send JWT
return res.status(200).json({
status: 'success',
message: 'Reset Password Successfully'
});
});
});
/**
* Logout
*/
exports.logout = async (req, res) => {
res.clearCookie('user_id');
res.clearCookie('jwt');
res.status(200).json({ status: 'success' });
}
/**
* Login Page
*/
exports.login = async (req, res) => {
res.status(200).render('login');
};
/**
* Register Page
*/
exports.register = async (req, res) => {
res.status(200).render('register');
};
/**
* Forgot password Page
*/
exports.forgot_password = async (req, res) => {
res.status(200).render('forgot_password');
};
/**
* Forgot password Page
*/
exports.reset_password = async (req, res) => {
res.status(200).render('reset_password');
};
/**
* Index Page
*/
exports.index = async (req, res) => {
console.log("aa", req.cookies.jwt)
if (req.cookies.jwt == undefined) {
return res.status(200).render('login');
} else
res.status(200).render('index', { user: req.user })
};
`
Ez meg a gyári:
`const crypto = require('crypto');
const { promisify } = require('util');
const jwt = require('jsonwebtoken');
var request = require('request');
const express = require('express');
const User = require('./../models/userModel');
const catchAsync = require('./../utils/catchAsync');
const AppError = require('./../utils/appError');
const sendEmail = require('./../utils/email');
const path = require('path');
const { userJoin } = require('./../utils/users');
const dbConnect = require("../connection");
const bcrypt = require('bcryptjs');
const signToken = id => {
return jwt.sign({ id: id }, process.env.JWT_SECRET, {
expiresIn: process.env.JWT_EXPIRES_IN
});
}
const createSendToken = (user, statusCode, res, msg) => {
const token = signToken(user.id);
const cookieOptions = {
expires: new Date(
Date.now() + process.env.JWT_COOKIE_EXPIRES_IN * 24 * 60 * 60 * 1000
),
httpOnly: true
};
if (process.env.NODE_ENV === 'production') cookieOptions.secure = true;
res.cookie('jwt', token, cookieOptions);
res.cookie('user_id', user.id, cookieOptions);
// Remove password from output
user.password = undefined;
return res.status(statusCode).json({
status: 'success',
message: msg,
token,
data: {user}
});
}
function getQueryResult(query) {
return new Promise((resolve) => {
dbConnect.query(query, function (err, result) {
if (err) throw err;
if (result){
resolve(result)
}
});
})
}
/**
* Sign Up
*/
exports.signup = catchAsync(async (req, res, next) => {
var selectQuery = "SELECT email from users where email = '" + req.body.email + "' "
const invalidEmail = await getQueryResult(selectQuery)
// input field validation
if (req.body['g-recaptcha-response'] === undefined || req.body['g-recaptcha-response'] === '' || req.body['g-recaptcha-response'] === null) {
return res.status(200).json({
status: 'fail',
message: 'Please select captcha'
});
}else if (req.body.name === '') {
return res.status(200).json({
status: 'fail',
message: 'Please enter username'
});
}else if (req.body.email === '') {
return res.status(200).json({
status: 'fail',
message: 'Please enter email'
});
}else if (req.body.password === '') {
return res.status(200).json({
status: 'fail',
message: 'Please enter password'
});
}else if (req.body.location === '') {
return res.status(200).json({
status: 'fail',
message: 'Please enter location'
});
}else if(invalidEmail.length > 0){
return res.status(200).json({
status: 'fail',
message: 'Email already exists'
});
}
// Put your secret key here.
var secretKey = process.env.CAPTCHA_SECRET;
// req.connection.remoteAddress will provide IP address of connected user.
var verificationUrl = "https://www.google.com/recaptcha/api/siteverify?secret=" + secretKey + "&response=" + req.body['g-recaptcha-response'] + "&remoteip=" + req.connection.remoteAddress;
// Hitting GET request to the URL, Google will respond with success or error scenario.
request(verificationUrl, async (error, response, body) => {
body = JSON.parse(body);
});
await dbConnect.query("INSERT INTO users(name, email, password, location) VALUES('" + req.body.name + "', '" + req.body.email + "', '" + await bcrypt.hash(req.body.password, 12) + "', '" + req.body.location + "')", function (err, result, fields) {
if (err) throw err;
return res.status(200).json({
status: "success",
message: "Register Sucessfully"
})
});
// await User.create(req.body);
// return res.status(200).json({
// status: "success",
// message: "Register Sucessfully"
// })
});
/**
* Sign In
*/
exports.signin = catchAsync(async (req, res, next) => {
const { email, password } = req.body;
if (!email || !password) {
return res.status(200).json({
status: 'fail',
message: 'please enter email or password'
});
}
await dbConnect.query("Select * from users where email ='"+email+"'", async function (err, result) {
if (err) throw err;
if (!result.length){
return res.status(200).json({
status: 'fail',
message: 'invalid email or password'
});
}else{
var user = result[0];
const hashedPassword = result[0].password;
if (await bcrypt.compare(password, hashedPassword))
{
// const user = await User.findOne({ email }).select('+password');
// if (!user || !await user.correctPassword(password, user.password)) {
// return res.status(200).json({
// status: 'fail',
// message: 'invalid email or password'
// });
// }
if (req.body['g-recaptcha-response'] === undefined || req.body['g-recaptcha-response'] === '' || req.body['g-recaptcha-response'] === null) {
return res.status(200).json({
status: 'fail',
message: 'Please select captcha'
});
}
var secretKey = process.env.CAPTCHA_SECRET;
// req.connection.remoteAddress will provide IP address of connected user.
var verificationUrl = "https://www.google.com/recaptcha/api/siteverify?secret=" + secretKey + "&response=" + req.body['g-recaptcha-response'] + "&remoteip=" + req.connection.remoteAddress;
// Hitting GET request to the URL, Google will respond with success or error scenario.
request(verificationUrl, async (error, response, body) => {
body = JSON.parse(body);
// Success will be true or false depending upon captcha validation.
if (body.success == undefined || !body.success) {
return res.status(200).json({
status: 'fail',
message: 'Failed captcha verification'
});
} else {
createSendToken(user, 200, res, 'Login Successfully');
}
});
}
else
{
return res.status(200).json({
status: 'fail',
message: 'invalid password'
});
}
}
});
});
/**
* Forgot Password
*/
exports.forgotPassword = catchAsync(async (req, res, next) => {
// 1) Get User based on Posted Email
// const user = await User.findOne({ email: req.body.email });
// if (!user) {
// return res.status(200).json({
// status: 'fail',
// message: 'Please Provide a Email'
// });
// }
var user = [];
await dbConnect.query("Select * from users where email ='"+req.body.email+"'", async function (err, result, fields) {
if (err) throw err;
if (!result.length){
return res.status(200).json({
status: 'fail',
message: 'Please Provide a Email'
});
}
else
{
user = result[0];
// 2) Generate the random reset token
// const resetToken = user.createPasswordResetToken();
// await user.save({ validateBeforeSave: false });
const resetToken = crypto.randomBytes(32).toString('hex');
var passwordResetToken = crypto.createHash('sha256').update(resetToken).digest('hex');
var passwordResetExpires = await (Date.now() + 10*60000);
await dbConnect.query("UPDATE users SET passwordResetToken='" + passwordResetToken + "' , passwordResetExpires = '" + passwordResetExpires + "' where email ='"+req.body.email+"'", function (err, result) {
if (err) throw err;
});
// 3) Send it to user's email
const resetURL = `${req.protocol}://${req.get('host')}/reset_Password?token=${resetToken}`;
const message = `Forgot your password? Submit a PATCH request with your new password and passwordConfirm to: ${resetURL}`;
try {
await sendEmail({
email: user.email,
subject: 'Your Password reset token (valid for 10 min)',
message
});
return res.status(200).json({
status: 'success',
message: 'Token send to email',
token: resetToken
});
}
catch (err) {
user.passwordResetToken = undefined;
user.passwordResetExpires = undefined;
// await user.save({ validateBeforeSave: false });
return next(new AppError('There was an error sending the email. Try again later!', 500));
}
}
});
});
/**
* Reset Password
*/
exports.resetPassword = catchAsync(async (req, res, next) => {
// 1) Get User based on the token
const hashedToken = crypto.createHash('sha256').update(req.params.token).digest('hex');
// const user = await User.findOne({ passwordResetToken: hashedToken, passwordResetExpires: { $gt: Date.now() } });
var user = [];
await dbConnect.query("Select * from users where passwordResetToken ='"+hashedToken+"' and passwordResetExpires > "+Date.now()+"", async function (err, result) {
if (err) throw err;
if (!result.length){
return res.status(200).json({
status: 'fail',
message: 'Token is invalid or has expired'
});
}
});
// 2) If token has not expired, and there is user, set the new password
// if (!user) {
// return res.status(200).json({
// status: 'fail',
// message: 'Token is invalid or has expired'
// });
// }
// user.password = req.body.password;
// user.passwordResetToken = undefined;
// user.passwordResetExpires = undefined;
// await user.save();
await dbConnect.query("UPDATE users set passwordResetToken='',password='" + await bcrypt.hash(req.body.password, 12) + "',passwordResetExpires='' where passwordResetToken ='"+hashedToken+"' ", function (err, result) {
if (err) throw err;
// 4) Log the user in, send JWT
return res.status(200).json({
status: 'success',
message: 'Reset Password Successfully'
});
});
});
/**
* Logout
*/
exports.logout = async (req, res) => {
res.clearCookie('user_id');
res.clearCookie('jwt');
res.status(200).json({ status: 'success' });
}
/**
* Login Page
*/
exports.login = async (req, res) => {
res.status(200).render('login');
};
/**
* Register Page
*/
exports.register = async (req, res) => {
res.status(200).render('register');
};
/**
* Forgot password Page
*/
exports.forgot_password = async (req, res) => {
res.status(200).render('forgot_password');
};
/**
* Forgot password Page
*/
exports.reset_password = async (req, res) => {
res.status(200).render('reset_password');
};
/**
* Index Page
*/
exports.index = async (req, res) => {
console.log("aa", req.cookies.jwt)
if (req.cookies.jwt == undefined) {
return res.status(200).render('login');
} else
res.status(200).render('index', { user: req.user })
};
- Szerkesztve
Ezt a részt nem tudom,hogy kéne átalakítani:
Tehát ne legyen recaptcha..
else{
var user = result[0];
const hashedPassword = result[0].password;
if (await bcrypt.compare(password, hashedPassword))
{
// const user = await User.findOne({ email }).select('+password');
// if (!user || !await user.correctPassword(password, user.password)) {
// return res.status(200).json({
// status: 'fail',
// message: 'invalid email or password'
// });
// }
if (req.body['g-recaptcha-response'] === undefined || req.body['g-recaptcha-response'] === '' || req.body['g-recaptcha-response'] === null) {
return res.status(200).json({
status: 'fail',
message: 'Please select captcha'
});
}
var secretKey = process.env.CAPTCHA_SECRET;
// req.connection.remoteAddress will provide IP address of connected user.
var verificationUrl = "https://www.google.com/recaptcha/api/siteverify?secret=" + secretKey + "&response=" + req.body['g-recaptcha-response'] + "&remoteip=" + req.connection.remoteAddress;
// Hitting GET request to the URL, Google will respond with success or error scenario.
request(verificationUrl, async (error, response, body) => {
body = JSON.parse(body);
// Success will be true or false depending upon captcha validation.
if (body.success == undefined || !body.success) {
return res.status(200).json({
status: 'fail',
message: 'Failed captcha verification'
});
} else {
createSendToken(user, 200, res, 'Login Successfully');
}
});
}
else
{
return res.status(200).json({
status: 'fail',
message: 'invalid password'
});
}
}
message: 'Email címed paraszt'
message: 'Jelszavad!'
message: 'Ehune laksz.'
message: 'Email találj ki mást.'
message: 'Email already exists'
message: 'invalid email or password'
Send it to user's email
user.passwordResetExpires = undefined;
- Szerkesztve
csuhas32 Xar a code bb rányomtam és beillesztettem az adott jeleken belül.
Ezen a portál fejlesztőinek kéne foglalkozni az én oldalaimon nincsenek ilyen alap problémák.
Amúgy ezt a részt akarom változtaztni:
await dbConnect.query("Select * from users where email ='"+email+"'", async function (err, result) {
if (err) throw err;
if (!result.length){
return res.status(200).json({
status: 'fail',
message: 'Hibás email vagy jelszó'
});
}else{
var user = result[0];
const hashedPassword = result[0].password;
if (await bcrypt.compare(password, hashedPassword))
{
if (req.body['g-recaptcha-response'] === undefined || req.body['g-recaptcha-response'] === '' || req.body['g-recaptcha-response'] === null) {
return res.status(200).json({
status: 'fail',
message: 'Please select captcha'
});
}
var secretKey = process.env.CAPTCHA_SECRET;
var verificationUrl = "https://www.google.com/recaptcha/api/siteverify?secret=" + secretKey + "&response=" + req.body['g-recaptcha-response'] + "&remoteip=" + req.connection.remoteAddress;
request(verificationUrl, async (error, response, body) => {
body = JSON.parse(body);
if (body.success == undefined || !body.success) {
return res.status(200).json({
status: 'fail',
message: 'Failed captcha verification'
});
} else {
createSendToken(user, 200, res, 'Sikeres belépés');
}
});
}
else
{
return res.status(200).json({
status: 'fail',
message: 'Hibás jelszó'
});
}
}
} `
Erre:
`
await dbConnect.query("Select * from users where email ='"+email+"'", async function (err, result) {
if (err) throw err;
if (!result.length){
return res.status(200).json({
status: 'fail',
message: 'Hibás email vagy jelszó'
});
}else{
var user = result[0];
const hashedPassword = result[0].password;
if (await bcrypt.compare(password, hashedPassword))
{
createSendToken(user, 200, res, 'Sikeres belépés');
}
else
{
return res.status(200).json({
status: 'fail',
message: 'Hibás jelszó'
});
}
}
}
De most azon kívül,hogy kiirja,hogy succes Belépés sikeres nem visz be az indexbe,hanem ugyanúgy kéri a belépési adatokat.
- Szerkesztve
oktopus Xar a code
const { promisify } = require('util');
const jwt = require('jsonwebtoken');
var request = require('request');
const express = require('express');
const User = require('./../models/userModel');
const catchAsync = require('./../utils/catchAsync');
const AppError = require('./../utils/appError');
const sendEmail = require('./../utils/email');
const path = require('path');
const { userJoin } = require('./../utils/users');
const dbConnect = require("../connection");
const bcrypt = require('bcryptjs');
const signToken = id => {
return jwt.sign({ id: id }, process.env.JWT_SECRET, {
expiresIn: process.env.JWT_EXPIRES_IN
});
}
const createSendToken = (user, statusCode, res, msg) => {
const token = signToken(user.id);
const cookieOptions = {
expires: new Date(
Date.now() + process.env.JWT_COOKIE_EXPIRES_IN * 24 * 60 * 60 * 1000
),
httpOnly: true
};
if (process.env.NODE_ENV === 'production') cookieOptions.secure = true;
res.cookie('jwt', token, cookieOptions);
res.cookie('user_id', user.id, cookieOptions);
// Remove password from output
user.password = undefined;
return res.status(statusCode).json({
status: 'success',
message: msg,
token,
data: {user}
});
}
function getQueryResult(query) {
return new Promise((resolve) => {
dbConnect.query(query, function (err, result) {
if (err) throw err;
if (result){
resolve(result)
}
});
})
}
/**
Sign Up
*/
exports.signup = catchAsync(async (req, res, next) => {
var selectQuery = "SELECT email from users where email = '" + req.body.email + "' "
const invalidEmail = await getQueryResult(selectQuery)
// input field validation
// if (req.body['g-recaptcha-response'] === undefined req.body['g-recaptcha-response'] === '' req.body['g-recaptcha-response'] === null) {return res.status(200).json({status: 'fail',message: 'Please select captcha'});}else
if (req.body.name === '') {
return res.status(200).json({
status: 'fail',
message: 'Neved wazze...'
});
}else if (req.body.email === '') {
return res.status(200).json({
status: 'fail',
message: 'Email címed paraszt'
});
}else if (req.body.password === '') {
return res.status(200).json({
status: 'fail',
message: 'Jelszavad!'
});
}else if (req.body.location === '') {
return res.status(200).json({
status: 'fail',
message: 'Ehune laksz.'
});
}else if(invalidEmail.length > 0){
return res.status(200).json({
status: 'fail',
message: 'Email találj ki mást.'
});
}
// Put your secret key here.
var secretKey = process.env.CAPTCHA_SECRET;
// req.connection.remoteAddress will provide IP address of connected user.
var verificationUrl = "https://www.google.com/recaptcha/api/siteverify?secret=" + secretKey + "&response=" + req.body['g-recaptcha-response'] + "&remoteip=" + req.connection.remoteAddress;
// Hitting GET request to the URL, Google will respond with success or error scenario.
request(verificationUrl, async (error, response, body) => {
body = JSON.parse(body);
});
await dbConnect.query("UPDATE users set passwordResetToken='',password='" + await bcrypt.hash(req.body.password, 12) + "',passwordResetExpires='' where passwordResetToken ='"+hashedToken+"' ", function (err, result) {
if (err) throw err;
// 4) Log the user in, send JWT
return res.status(200).json({
status: 'success',
message: 'Reset Password Successfully'
});
});
});
/**
Logout
*/
exports.logout = async (req, res) => {
res.clearCookie('user_id');
res.clearCookie('jwt');
res.status(200).json({ status: 'success' });
}
/**
Login Page
*/
exports.login = async (req, res) => {
res.status(200).render('login');
};
/**
Register Page
*/
exports.register = async (req, res) => {
res.status(200).render('register');
};
/**
Forgot password Page
*/
exports.forgot_password = async (req, res) => {
res.status(200).render('forgot_password');
};
/**
Forgot password Page
*/
exports.reset_password = async (req, res) => {
res.status(200).render('reset_password');
};
/**
Index Page
*/
exports.index = async (req, res) => {
console.log("aa", req.cookies.jwt)
if (req.cookies.jwt == undefined) {
return res.status(200).render('login');
} else
res.status(200).render('index', { user: req.user })
};
`
Ez meg a gyári:
`const crypto = require('crypto');
const { promisify } = require('util');
const jwt = require('jsonwebtoken');
var request = require('request');
const express = require('express');
const User = require('./../models/userModel');
const catchAsync = require('./../utils/catchAsync');
const AppError = require('./../utils/appError');
const sendEmail = require('./../utils/email');
const path = require('path');
const { userJoin } = require('./../utils/users');
const dbConnect = require("../connection");
const bcrypt = require('bcryptjs');
const signToken = id => {
return jwt.sign({ id: id }, process.env.JWT_SECRET, {
expiresIn: process.env.JWT_EXPIRES_IN
});
}
const createSendToken = (user, statusCode, res, msg) => {
const token = signToken(user.id);
const cookieOptions = {
expires: new Date(
Date.now() + process.env.JWT_COOKIE_EXPIRES_IN * 24 * 60 * 60 * 1000
),
httpOnly: true
};
if (process.env.NODE_ENV === 'production') cookieOptions.secure = true;
res.cookie('jwt', token, cookieOptions);
res.cookie('user_id', user.id, cookieOptions);
// Remove password from output
user.password = undefined;
return res.status(statusCode).json({
status: 'success',
message: msg,
token,
data: {user}
});
}
function getQueryResult(query) {
return new Promise((resolve) => {
dbConnect.query(query, function (err, result) {
if (err) throw err;
if (result){
resolve(result)
}
});
})
}
/**
Sign Up
*/
exports.signup = catchAsync(async (req, res, next) => {
var selectQuery = "SELECT email from users where email = '" + req.body.email + "' "
const invalidEmail = await getQueryResult(selectQuery)
// input field validation
if (req.body['g-recaptcha-response'] === undefined req.body['g-recaptcha-response'] === '' req.body['g-recaptcha-response'] === null) {
return res.status(200).json({
status: 'fail',
message: 'Please select captcha'
});
}else if (req.body.name === '') {
return res.status(200).json({
status: 'fail',
message: 'Please enter username'
});
}else if (req.body.email === '') {
return res.status(200).json({
status: 'fail',
message: 'Please enter email'
});
}else if (req.body.password === '') {
return res.status(200).json({
status: 'fail',
message: 'Please enter password'
});
}else if (req.body.location === '') {
return res.status(200).json({
status: 'fail',
message: 'Please enter location'
});
}else if(invalidEmail.length > 0){
return res.status(200).json({
status: 'fail',
message: 'Email already exists'
});
}
// Put your secret key here.
var secretKey = process.env.CAPTCHA_SECRET;
// req.connection.remoteAddress will provide IP address of connected user.
var verificationUrl = "https://www.google.com/recaptcha/api/siteverify?secret=" + secretKey + "&response=" + req.body['g-recaptcha-response'] + "&remoteip=" + req.connection.remoteAddress;
// Hitting GET request to the URL, Google will respond with success or error scenario.
request(verificationUrl, async (error, response, body) => {
body = JSON.parse(body);
});
await dbConnect.query("INSERT INTO users(name, email, password, location) VALUES('" + req.body.name + "', '" + req.body.email + "', '" + await bcrypt.hash(req.body.password, 12) + "', '" + req.body.location + "')", function (err, result, fields) {
if (err) throw err;
return res.status(200).json({
status: "success",
message: "Register Sucessfully"
})
});
// await User.create(req.body);
// return res.status(200).json({
// status: "success",
// message: "Register Sucessfully"
// })
});
/**
Sign In
*/
exports.signin = catchAsync(async (req, res, next) => {
const { email, password } = req.body;
if (!email || !password) {
return res.status(200).json({
status: 'fail',
message: 'please enter email or password'
});
}
await dbConnect.query("Select * from users where email ='"+email+"'", async function (err, result) {
if (err) throw err;
if (!result.length){
return res.status(200).json({
status: 'fail',
message: 'invalid email or password'
});
}else{
var user = result[0];
const hashedPassword = result[0].password;
if (await bcrypt.compare(password, hashedPassword))
{
// const user = await User.findOne({ email }).select('+password');
// if (!user || !await user.correctPassword(password, user.password)) {
// return res.status(200).json({
// status: 'fail',
// message: 'invalid email or password'
// });
// }
if (req.body['g-recaptcha-response'] === undefined || req.body['g-recaptcha-response'] === '' || req.body['g-recaptcha-response'] === null) {
return res.status(200).json({
status: 'fail',
message: 'Please select captcha'
});
}
var secretKey = process.env.CAPTCHA_SECRET;
// req.connection.remoteAddress will provide IP address of connected user.
var verificationUrl = "https://www.google.com/recaptcha/api/siteverify?secret=" + secretKey + "&response=" + req.body['g-recaptcha-response'] + "&remoteip=" + req.connection.remoteAddress;
// Hitting GET request to the URL, Google will respond with success or error scenario.
request(verificationUrl, async (error, response, body) => {
body = JSON.parse(body);
// Success will be true or false depending upon captcha validation.
if (body.success == undefined || !body.success) {
return res.status(200).json({
status: 'fail',
message: 'Failed captcha verification'
});
} else {
createSendToken(user, 200, res, 'Login Successfully');
}
});
}
else
{
return res.status(200).json({
status: 'fail',
message: 'invalid password'
});
}
}
});
});
/**
Forgot Password
*/
exports.forgotPassword = catchAsync(async (req, res, next) => {
// 1) Get User based on Posted Email
// const user = await User.findOne({ email: req.body.email });
// if (!user) {
// return res.status(200).json({
// status: 'fail',
// message: 'Please Provide a Email'
// });
// }
var user = [];
await dbConnect.query("Select * from users where email ='"+req.body.email+"'", async function (err, result, fields) {
if (err) throw err;
if (!result.length){
return res.status(200).json({
status: 'fail',
message: 'Please Provide a Email'
});
}
else
{
user = result[0];
// 2) Generate the random reset token
// const resetToken = user.createPasswordResetToken();
// await user.save({ validateBeforeSave: false });
const resetToken = crypto.randomBytes(32).toString('hex');
var passwordResetToken = crypto.createHash('sha256').update(resetToken).digest('hex');
var passwordResetExpires = await (Date.now() + 10*60000);
await dbConnect.query("UPDATE users SET passwordResetToken='" + passwordResetToken + "' , passwordResetExpires = '" + passwordResetExpires + "' where email ='"+req.body.email+"'", function (err, result) {
if (err) throw err;
});
// 3) Send it to user's email
const resetURL = `${req.protocol}://${req.get('host')}/reset_Password?token=${resetToken}`;
const message = `Forgot your password? Submit a PATCH request with your new password and passwordConfirm to: ${resetURL}`;
try {
await sendEmail({
email: user.email,
subject: 'Your Password reset token (valid for 10 min)',
message
});
return res.status(200).json({
status: 'success',
message: 'Token send to email',
token: resetToken
});
}
catch (err) {
user.passwordResetToken = undefined;
user.passwordResetExpires = undefined;
// await user.save({ validateBeforeSave: false });
return next(new AppError('There was an error sending the email. Try again later!', 500));
}
}
});
});
/**
Reset Password
*/
exports.resetPassword = catchAsync(async (req, res, next) => {
// 1) Get User based on the token
const hashedToken = crypto.createHash('sha256').update(req.params.token).digest('hex');
// const user = await User.findOne({ passwordResetToken: hashedToken, passwordResetExpires: { $gt: Date.now() } });
var user = [];
await dbConnect.query("Select * from users where passwordResetToken ='"+hashedToken+"' and passwordResetExpires > "+Date.now()+"", async function (err, result) {
if (err) throw err;
if (!result.length){
return res.status(200).json({
status: 'fail',
message: 'Token is invalid or has expired'
});
}
});
// 2) If token has not expired, and there is user, set the new password
// if (!user) {
// return res.status(200).json({
// status: 'fail',
// message: 'Token is invalid or has expired'
// });
// }
// user.password = req.body.password;
// user.passwordResetToken = undefined;
// user.passwordResetExpires = undefined;
// await user.save();
await dbConnect.query("UPDATE users set passwordResetToken='',password='" + await bcrypt.hash(req.body.password, 12) + "',passwordResetExpires='' where passwordResetToken ='"+hashedToken+"' ", function (err, result) {
if (err) throw err;
// 4) Log the user in, send JWT
return res.status(200).json({
status: 'success',
message: 'Reset Password Successfully'
});
});
});
/**
Logout
*/
exports.logout = async (req, res) => {
res.clearCookie('user_id');
res.clearCookie('jwt');
res.status(200).json({ status: 'success' });
}
/**
Login Page
*/
exports.login = async (req, res) => {
res.status(200).render('login');
};
/**
Register Page
*/
exports.register = async (req, res) => {
res.status(200).render('register');
};
/**
Forgot password Page
*/
exports.forgot_password = async (req, res) => {
res.status(200).render('forgot_password');
};
/**
Forgot password Page
*/
exports.reset_password = async (req, res) => {
res.status(200).render('reset_password');
};
/**
Index Page
*/
exports.index = async (req, res) => {
console.log("aa", req.cookies.jwt)
if (req.cookies.jwt == undefined) {
return res.status(200).render('login');
} else
res.status(200).render('index', { user: req.user })
};
Szöveg kijelöl, gomb nyom. Szerintem működik.
d.r.i.
OFF
Alapvetően egyszerűbb itt helyben kijelölni a szöveget és megnyomni azt a nyamvadt </> gombot, mint elmenni valamelyik Pastebinre, oda is be kell másolni a szöveget, beküldeni, a linkjét kimásolni, ide visszalépni és a hozzászólásba betenni, ráadásul a szöveg rögtön itt van, nem kell ellátogatni egy külső oldalra, ahol afelett sincs hatalmunk, hogy meddig elérhető.
Persze, ha valakinek nem megy a kód beillesztése, akkor felőlem tegye Pastebinre.
Nekem mindegy, de ezek a kilométeres szövegek... :-(
Már kezdem sajnálni szegény modikat, amiért ennyit zaklatom őket a jelentgetéssel, de még ha gépnél is vagyok, nincs jogosultságom megfésülni az elvétett formázást.
- Szerkesztve
csuhas32
OFF: Az zavarja meg itt a felhasználókat, hogy alapból a kód beillesztése gomb soron belüli Markdown kódformázást csinál, szóval az egy karakteres verziót szúrja be. Beletettük hogy ha több sort kijelölve kattintanak rá, akkor a három karakteres verziót használja, de láthatólag ez sem elég Valszeg az lesz a megoldás hogy alapból csak a három karaktereset kellene beszúrni, mert aki ért a Markdownhoz, az amúgy sem használja a gombot.
meskobalazs Valszeg az lesz a megoldás hogy alapból csak a három karaktereset kellene beszúrni
OFF
Támogatnám, mert Androidról nehezen oldom meg, hogy a teljes szöveget kijelölése után nyomjam meg a gombot.
Üres szövegmezőben így most azt hiszem csak egy párat kapok a körmöcskéből, ha minden igaz, akkor, ha megnyomom a kód beillesztése gombot, akkor meg visszavonja ezt is...
Az könnyebbnek tűnik, hogy megnyomom a gombot egy üres mezőben, erre kapok hat körmöcskét, valahogy csak odakoppintok a harmadik és negyedik közé és beillesztem a szöveget.