Sort emails by domain

This commit is contained in:
traxys 2023-08-29 21:52:36 +02:00
parent e983079d8e
commit 7414752ddd
3 changed files with 27 additions and 4 deletions

14
Cargo.lock generated
View file

@ -1153,6 +1153,15 @@ dependencies = [
"either", "either",
] ]
[[package]]
name = "itertools"
version = "0.11.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b1c173a5686ce8bfa551b3563d0c2170bf24ca44da99c7ca4bfdab5418c3fe57"
dependencies = [
"either",
]
[[package]] [[package]]
name = "itoa" name = "itoa"
version = "1.0.9" version = "1.0.9"
@ -1273,6 +1282,7 @@ dependencies = [
"cookie", "cookie",
"envious", "envious",
"futures-util", "futures-util",
"itertools 0.11.0",
"jwt-simple", "jwt-simple",
"once_cell", "once_cell",
"openidconnect", "openidconnect",
@ -1474,7 +1484,7 @@ dependencies = [
"dyn-clone", "dyn-clone",
"hmac", "hmac",
"http", "http",
"itertools", "itertools 0.10.5",
"log", "log",
"oauth2", "oauth2",
"p256", "p256",
@ -2341,7 +2351,7 @@ version = "0.2.1"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0c12bc9199d1db8234678b7051747c07f517cdcf019262d1847b94ec8b1aee3e" checksum = "0c12bc9199d1db8234678b7051747c07f517cdcf019262d1847b94ec8b1aee3e"
dependencies = [ dependencies = [
"itertools", "itertools 0.10.5",
"nom", "nom",
"unicode_categories", "unicode_categories",
] ]

View file

@ -12,6 +12,7 @@ color-eyre = "0.6.2"
cookie = "0.17.0" cookie = "0.17.0"
envious = "0.2.2" envious = "0.2.2"
futures-util = "0.3.28" futures-util = "0.3.28"
itertools = "0.11.0"
jwt-simple = "0.11.6" jwt-simple = "0.11.6"
once_cell = "1.18.0" once_cell = "1.18.0"
openidconnect = "3.3.0" openidconnect = "3.3.0"

View file

@ -18,6 +18,7 @@ use base64::{engine::general_purpose, engine::Engine};
use color_eyre::eyre; use color_eyre::eyre;
use cookie::{time::OffsetDateTime, SameSite}; use cookie::{time::OffsetDateTime, SameSite};
use futures_util::TryStreamExt; use futures_util::TryStreamExt;
use itertools::Itertools;
use jwt_simple::prelude::*; use jwt_simple::prelude::*;
use once_cell::sync::Lazy; use once_cell::sync::Lazy;
use openidconnect::{ use openidconnect::{
@ -519,7 +520,12 @@ async fn home(
) -> Result<Html<String>, Error> { ) -> Result<Html<String>, Error> {
let mails = sqlx::query_as!( let mails = sqlx::query_as!(
Mail, Mail,
"SELECT mail FROM emails WHERE id = $1 AND alias = false", r#"
SELECT mail
FROM emails
WHERE id = $1 AND alias = false
ORDER BY lower(substring(mail from position('@' in mail)+1 )),lower(mail)
"#,
user user
) )
.fetch_all(&state.db) .fetch_all(&state.db)
@ -527,7 +533,12 @@ async fn home(
let aliases = sqlx::query_as!( let aliases = sqlx::query_as!(
Mail, Mail,
"SELECT mail FROM emails WHERE id = $1 AND alias = true", r#"
SELECT mail
FROM emails
WHERE id = $1 AND alias = true
ORDER BY lower(substring(mail from position('@' in mail)+1 )),lower(mail)
"#,
user user
) )
.fetch_all(&state.db) .fetch_all(&state.db)
@ -552,6 +563,7 @@ async fn home(
let aliases: Vec<_> = aliases let aliases: Vec<_> = aliases
.into_iter() .into_iter()
.map(|(mail, recipients)| Alias { mail, recipients }) .map(|(mail, recipients)| Alias { mail, recipients })
.sorted_by(|a, b| a.mail.cmp(&b.mail))
.collect(); .collect();
let mut context = tera::Context::new(); let mut context = tera::Context::new();