Compare commits
5 Commits
f58d0d010e
...
ebbd9215ea
Author | SHA1 | Date | |
---|---|---|---|
ebbd9215ea | |||
d0b7f9c76c | |||
58b498b9de | |||
23f5e3ca4a | |||
7ff9978587 |
@ -11,7 +11,7 @@ env:
|
|||||||
jobs:
|
jobs:
|
||||||
test:
|
test:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
container: git.hofer.link/ruderverein-donau-linz/rowing-ci:20240118
|
container: git.hofer.link/ruderverein-donau-linz/rowing-ci:20240215
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v3
|
- uses: actions/checkout@v3
|
||||||
- name: Run Test DB Script
|
- name: Run Test DB Script
|
||||||
@ -46,7 +46,7 @@ jobs:
|
|||||||
|
|
||||||
deploy-staging:
|
deploy-staging:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
container: git.hofer.link/ruderverein-donau-linz/rowing-ci:20240118
|
container: git.hofer.link/ruderverein-donau-linz/rowing-ci:20240215
|
||||||
needs: [test]
|
needs: [test]
|
||||||
if: github.ref == 'refs/heads/staging'
|
if: github.ref == 'refs/heads/staging'
|
||||||
steps:
|
steps:
|
||||||
@ -97,7 +97,7 @@ jobs:
|
|||||||
|
|
||||||
deploy-main:
|
deploy-main:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
container: git.hofer.link/ruderverein-donau-linz/rowing-ci:20240118
|
container: git.hofer.link/ruderverein-donau-linz/rowing-ci:20240215
|
||||||
needs: [test]
|
needs: [test]
|
||||||
if: github.ref == 'refs/heads/main'
|
if: github.ref == 'refs/heads/main'
|
||||||
steps:
|
steps:
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
# 2. Tag the image: `docker tag <id> git.hofer.link/ruderverein-donau-linz/rowing-ci:<date>`
|
# 2. Tag the image: `docker tag <id> git.hofer.link/ruderverein-donau-linz/rowing-ci:<date>`
|
||||||
# 3. Push the image: `docker push git.hofer.link/ruderverein-donau-linz/rowing-ci:<date>`
|
# 3. Push the image: `docker push git.hofer.link/ruderverein-donau-linz/rowing-ci:<date>`
|
||||||
|
|
||||||
FROM rust:1.75.0
|
FROM rust:1.76
|
||||||
|
|
||||||
RUN apt-get update && apt-get install -y sqlite3
|
RUN apt-get update && apt-get install -y sqlite3
|
||||||
|
|
||||||
|
@ -1,8 +1,9 @@
|
|||||||
use std::error::Error;
|
use std::{error::Error, fs};
|
||||||
|
|
||||||
use lettre::{
|
use lettre::{
|
||||||
message::header::ContentType, transport::smtp::authentication::Credentials, Message,
|
message::{header::ContentType, Attachment, MultiPart, SinglePart},
|
||||||
SmtpTransport, Transport,
|
transport::smtp::authentication::Credentials,
|
||||||
|
Message, SmtpTransport, Transport,
|
||||||
};
|
};
|
||||||
use sqlx::SqlitePool;
|
use sqlx::SqlitePool;
|
||||||
|
|
||||||
@ -13,7 +14,7 @@ use super::{family::Family, log::Log, role::Role, user::User};
|
|||||||
pub struct Mail {}
|
pub struct Mail {}
|
||||||
|
|
||||||
impl Mail {
|
impl Mail {
|
||||||
pub async fn send(db: &SqlitePool, data: MailToSend, smtp_pw: String) -> bool {
|
pub async fn send(db: &SqlitePool, data: MailToSend<'_>, smtp_pw: String) -> bool {
|
||||||
let mut email = Message::builder()
|
let mut email = Message::builder()
|
||||||
.from(
|
.from(
|
||||||
"ASKÖ Ruderverein Donau Linz <no-reply@rudernlinz.at>"
|
"ASKÖ Ruderverein Donau Linz <no-reply@rudernlinz.at>"
|
||||||
@ -45,13 +46,23 @@ impl Mail {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO: handle attachments
|
let mut multipart = MultiPart::mixed().singlepart(SinglePart::plain(data.body));
|
||||||
|
|
||||||
let email = email
|
for temp_file in &data.files {
|
||||||
.subject(data.subject)
|
let content = fs::read(temp_file.path().unwrap()).unwrap();
|
||||||
.header(ContentType::TEXT_PLAIN)
|
let media_type = format!("{}", temp_file.content_type().unwrap().media_type());
|
||||||
.body(String::from(data.body))
|
let content_type = ContentType::parse(&media_type).unwrap();
|
||||||
.unwrap();
|
let attachment = Attachment::new(format!(
|
||||||
|
"{}.{}",
|
||||||
|
temp_file.name().unwrap(),
|
||||||
|
temp_file.content_type().unwrap().extension().unwrap()
|
||||||
|
))
|
||||||
|
.body(content, content_type);
|
||||||
|
|
||||||
|
multipart = multipart.singlepart(attachment);
|
||||||
|
}
|
||||||
|
|
||||||
|
let email = email.subject(data.subject).multipart(multipart).unwrap();
|
||||||
|
|
||||||
let creds = Credentials::new("no-reply@rudernlinz.at".to_owned(), smtp_pw);
|
let creds = Credentials::new("no-reply@rudernlinz.at".to_owned(), smtp_pw);
|
||||||
|
|
||||||
|
@ -51,7 +51,7 @@ WHERE name like ?
|
|||||||
FROM user u
|
FROM user u
|
||||||
JOIN user_role ur ON u.id = ur.user_id
|
JOIN user_role ur ON u.id = ur.user_id
|
||||||
JOIN role r ON ur.role_id = r.id
|
JOIN role r ON ur.role_id = r.id
|
||||||
WHERE r.id = {}",
|
WHERE r.id = {} AND deleted=0;",
|
||||||
self.id
|
self.id
|
||||||
);
|
);
|
||||||
|
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
use rocket::form::Form;
|
use rocket::form::Form;
|
||||||
|
use rocket::fs::TempFile;
|
||||||
use rocket::response::{Flash, Redirect};
|
use rocket::response::{Flash, Redirect};
|
||||||
use rocket::{get, request::FlashMessage, routes, Route, State};
|
use rocket::{get, request::FlashMessage, routes, Route, State};
|
||||||
use rocket::{post, FromForm};
|
use rocket::{post, FromForm};
|
||||||
@ -39,18 +40,17 @@ async fn fee(db: &State<SqlitePool>, _admin: AdminUser, config: &State<Config>)
|
|||||||
}
|
}
|
||||||
|
|
||||||
#[derive(FromForm, Debug)]
|
#[derive(FromForm, Debug)]
|
||||||
pub struct MailToSend {
|
pub struct MailToSend<'a> {
|
||||||
//<'a> {
|
|
||||||
pub(crate) role_id: i32,
|
pub(crate) role_id: i32,
|
||||||
pub(crate) subject: String,
|
pub(crate) subject: String,
|
||||||
pub(crate) body: String,
|
pub(crate) body: String,
|
||||||
//pub(crate) files: Vec<TempFile<'a>>,
|
pub(crate) files: Vec<TempFile<'a>>,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[post("/mail", data = "<data>")]
|
#[post("/mail", data = "<data>")]
|
||||||
async fn update(
|
async fn update(
|
||||||
db: &State<SqlitePool>,
|
db: &State<SqlitePool>,
|
||||||
data: Form<MailToSend>,
|
data: Form<MailToSend<'_>>,
|
||||||
config: &State<Config>,
|
config: &State<Config>,
|
||||||
_admin: AdminUser,
|
_admin: AdminUser,
|
||||||
) -> Flash<Redirect> {
|
) -> Flash<Redirect> {
|
||||||
|
Loading…
Reference in New Issue
Block a user