mirror of
https://github.com/stoatchat/stoatchat.git
synced 2026-07-14 13:36:59 +00:00
Update rAuth, add templates; add APP_URL variable.
This commit is contained in:
@@ -1,45 +0,0 @@
|
||||
use crate::util::variables::{HCAPTCHA_KEY, USE_HCAPTCHA};
|
||||
|
||||
use reqwest::Client;
|
||||
use serde::{Deserialize, Serialize};
|
||||
use std::collections::HashMap;
|
||||
|
||||
#[derive(Serialize, Deserialize)]
|
||||
struct CaptchaResponse {
|
||||
success: bool,
|
||||
}
|
||||
|
||||
pub async fn verify(user_token: &Option<String>) -> Result<(), String> {
|
||||
if *USE_HCAPTCHA {
|
||||
if let Some(token) = user_token {
|
||||
let mut map = HashMap::new();
|
||||
map.insert("secret", HCAPTCHA_KEY.to_string());
|
||||
map.insert("response", token.to_string());
|
||||
|
||||
let client = Client::new();
|
||||
if let Ok(response) = client
|
||||
.post("https://hcaptcha.com/siteverify")
|
||||
.form(&map)
|
||||
.send()
|
||||
.await
|
||||
{
|
||||
let result: CaptchaResponse = response
|
||||
.json()
|
||||
.await
|
||||
.map_err(|_| "Failed to deserialise captcha result.".to_string())?;
|
||||
|
||||
if result.success {
|
||||
Ok(())
|
||||
} else {
|
||||
Err("Unsuccessful captcha verification".to_string())
|
||||
}
|
||||
} else {
|
||||
Err("Failed to verify with hCaptcha".to_string())
|
||||
}
|
||||
} else {
|
||||
Err("Missing hCaptcha token!".to_string())
|
||||
}
|
||||
} else {
|
||||
Ok(())
|
||||
}
|
||||
}
|
||||
@@ -1,96 +0,0 @@
|
||||
use lettre::message::{header, MultiPart, SinglePart};
|
||||
use lettre::transport::smtp::authentication::Credentials;
|
||||
use lettre::{Message, SmtpTransport, Transport};
|
||||
|
||||
use super::variables::{PUBLIC_URL, SMTP_FROM, SMTP_HOST, SMTP_PASSWORD, SMTP_USERNAME};
|
||||
|
||||
lazy_static! {
|
||||
static ref MAILER: lettre::transport::smtp::SmtpTransport =
|
||||
SmtpTransport::relay(SMTP_HOST.as_ref())
|
||||
.unwrap()
|
||||
.credentials(Credentials::new(
|
||||
SMTP_USERNAME.to_string(),
|
||||
SMTP_PASSWORD.to_string()
|
||||
))
|
||||
.build();
|
||||
}
|
||||
|
||||
fn send(message: Message) -> Result<(), String> {
|
||||
MAILER
|
||||
.send(&message)
|
||||
.map_err(|err| format!("Failed to send email! {}", err.to_string()))?;
|
||||
|
||||
Ok(())
|
||||
}
|
||||
|
||||
fn generate_multipart(text: &str, html: &str) -> MultiPart {
|
||||
MultiPart::mixed().multipart(
|
||||
MultiPart::alternative()
|
||||
.singlepart(
|
||||
SinglePart::quoted_printable()
|
||||
.header(header::ContentType(
|
||||
"text/plain; charset=utf8".parse().unwrap(),
|
||||
))
|
||||
.body(text),
|
||||
)
|
||||
.multipart(
|
||||
MultiPart::related().singlepart(
|
||||
SinglePart::eight_bit()
|
||||
.header(header::ContentType(
|
||||
"text/html; charset=utf8".parse().unwrap(),
|
||||
))
|
||||
.body(html),
|
||||
),
|
||||
),
|
||||
)
|
||||
}
|
||||
|
||||
pub fn send_verification_email(email: String, code: String) -> Result<(), String> {
|
||||
let url = format!("{}/api/account/verify/{}", PUBLIC_URL.to_string(), code);
|
||||
let email = Message::builder()
|
||||
.from(SMTP_FROM.to_string().parse().unwrap())
|
||||
.to(email.parse().unwrap())
|
||||
.subject("Verify your email!")
|
||||
.multipart(generate_multipart(
|
||||
&format!("Verify your email here: {}", url),
|
||||
&format!("<a href=\"{}\">Click to verify your email!</a>", url),
|
||||
))
|
||||
.unwrap();
|
||||
|
||||
send(email)
|
||||
}
|
||||
|
||||
pub fn send_password_reset(email: String, code: String) -> Result<(), String> {
|
||||
let url = format!("{}/api/account/reset/{}", PUBLIC_URL.to_string(), code);
|
||||
let email = Message::builder()
|
||||
.from(SMTP_FROM.to_string().parse().unwrap())
|
||||
.to(email.parse().unwrap())
|
||||
.subject("Reset your password.")
|
||||
.multipart(generate_multipart(
|
||||
&format!("Reset your password here: {}", url),
|
||||
&format!("<a href=\"{}\">Click to reset your password!</a>", url),
|
||||
))
|
||||
.unwrap();
|
||||
|
||||
send(email)
|
||||
}
|
||||
|
||||
pub fn send_welcome_email(email: String, username: String) -> Result<(), String> {
|
||||
let email = Message::builder()
|
||||
.from(SMTP_FROM.to_string().parse().unwrap())
|
||||
.to(email.parse().unwrap())
|
||||
.subject("Welcome to REVOLT!")
|
||||
.multipart(
|
||||
generate_multipart(
|
||||
&format!("Welcome, {}! You can now use REVOLT.", username),
|
||||
&format!(
|
||||
"<b>Welcome, {}!</b><br/>You can now use REVOLT.<br/><a href=\"{}\">Go to REVOLT</a>",
|
||||
username,
|
||||
PUBLIC_URL.to_string()
|
||||
)
|
||||
)
|
||||
)
|
||||
.unwrap();
|
||||
|
||||
send(email)
|
||||
}
|
||||
@@ -2,8 +2,6 @@ use rand::{distributions::Alphanumeric, Rng};
|
||||
use std::collections::HashSet;
|
||||
use std::iter::FromIterator;
|
||||
|
||||
pub mod captcha;
|
||||
pub mod email;
|
||||
pub mod result;
|
||||
pub mod variables;
|
||||
|
||||
|
||||
@@ -9,6 +9,8 @@ lazy_static! {
|
||||
env::var("REVOLT_MONGO_URI").expect("Missing REVOLT_MONGO_URI environment variable.");
|
||||
pub static ref PUBLIC_URL: String =
|
||||
env::var("REVOLT_PUBLIC_URL").expect("Missing REVOLT_PUBLIC_URL environment variable.");
|
||||
pub static ref APP_URL: String =
|
||||
env::var("REVOLT_APP_URL").unwrap_or_else(|_| "https://app.revolt.chat".to_string());
|
||||
pub static ref EXTERNAL_WS_URL: String =
|
||||
env::var("REVOLT_EXTERNAL_WS_URL").expect("Missing REVOLT_EXTERNAL_WS_URL environment variable.");
|
||||
pub static ref HCAPTCHA_KEY: String =
|
||||
|
||||
Reference in New Issue
Block a user