Compare commits
1 Commits
renovate/s
...
29f22430d1
Author | SHA1 | Date | |
---|---|---|---|
29f22430d1 |
@@ -14,7 +14,7 @@ steps:
|
|||||||
- cargo test
|
- cargo test
|
||||||
|
|
||||||
- name: app_deploy
|
- name: app_deploy
|
||||||
image: node:24
|
image: node:23
|
||||||
environment:
|
environment:
|
||||||
AWS_ACCESS_KEY_ID:
|
AWS_ACCESS_KEY_ID:
|
||||||
from_secret: AWS_ACCESS_KEY_ID
|
from_secret: AWS_ACCESS_KEY_ID
|
||||||
|
1083
geneit_app/package-lock.json
generated
1083
geneit_app/package-lock.json
generated
File diff suppressed because it is too large
Load Diff
@@ -12,45 +12,45 @@
|
|||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@emotion/react": "^11.14.0",
|
"@emotion/react": "^11.14.0",
|
||||||
"@emotion/styled": "^11.14.1",
|
"@emotion/styled": "^11.14.1",
|
||||||
"@fontsource/roboto": "^5.2.8",
|
"@fontsource/roboto": "^5.2.6",
|
||||||
"@fullcalendar/core": "^6.1.19",
|
"@fullcalendar/core": "^6.1.17",
|
||||||
"@fullcalendar/daygrid": "^6.1.19",
|
"@fullcalendar/daygrid": "^6.1.17",
|
||||||
"@fullcalendar/interaction": "^6.1.19",
|
"@fullcalendar/interaction": "^6.1.17",
|
||||||
"@fullcalendar/list": "^6.1.19",
|
"@fullcalendar/list": "^6.1.17",
|
||||||
"@fullcalendar/react": "^6.1.19",
|
"@fullcalendar/react": "^6.1.17",
|
||||||
"@mdi/js": "^7.4.47",
|
"@mdi/js": "^7.4.47",
|
||||||
"@mdi/react": "^1.6.1",
|
"@mdi/react": "^1.6.1",
|
||||||
"@mui/icons-material": "^7.2.0",
|
"@mui/icons-material": "^7.1.2",
|
||||||
"@mui/lab": "^7.0.0-beta.17",
|
"@mui/lab": "^7.0.0-beta.14",
|
||||||
"@mui/material": "^7.2.0",
|
"@mui/material": "^7.1.2",
|
||||||
"@mui/x-data-grid": "^8.11.2",
|
"@mui/x-data-grid": "^7.29.6",
|
||||||
"@mui/x-date-pickers": "^8.9.2",
|
"@mui/x-date-pickers": "^7.29.4",
|
||||||
"@mui/x-tree-view": "^8.11.2",
|
"@mui/x-tree-view": "^7.29.1",
|
||||||
"date-and-time": "^3.6.0",
|
"date-and-time": "^3.6.0",
|
||||||
"dayjs": "^1.11.18",
|
"dayjs": "^1.11.13",
|
||||||
"email-validator": "^2.0.4",
|
"email-validator": "^2.0.4",
|
||||||
"filesize": "^11.0.2",
|
"filesize": "^10.1.6",
|
||||||
"jspdf": "^3.0.2",
|
"jspdf": "^3.0.1",
|
||||||
"mui-color-input": "^7.0.0",
|
"mui-color-input": "^7.0.0",
|
||||||
"react": "^19.1.1",
|
"react": "^19.0.0",
|
||||||
"react-dom": "^19.1.1",
|
"react-dom": "^19.0.0",
|
||||||
"react-easy-crop": "^5.5.1",
|
"react-easy-crop": "^5.4.2",
|
||||||
"react-qr-code": "^2.0.18",
|
"react-qr-code": "^2.0.16",
|
||||||
"react-router-dom": "^7.4.0",
|
"react-router-dom": "^7.4.0",
|
||||||
"react-zoom-pan-pinch": "^3.7.0",
|
"react-zoom-pan-pinch": "^3.7.0",
|
||||||
"svg2pdf.js": "^2.5.0"
|
"svg2pdf.js": "^2.5.0"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@eslint/js": "^9.35.0",
|
"@eslint/js": "^9.29.0",
|
||||||
"@types/react": "^19.1.13",
|
"@types/react": "^19.0.12",
|
||||||
"@types/react-dom": "^19.1.9",
|
"@types/react-dom": "^19.0.4",
|
||||||
"@vitejs/plugin-react": "^4.7.0",
|
"@vitejs/plugin-react": "^4.6.0",
|
||||||
"eslint": "^9.31.0",
|
"eslint": "^9.29.0",
|
||||||
"eslint-plugin-react-hooks": "^5.2.0",
|
"eslint-plugin-react-hooks": "^5.2.0",
|
||||||
"eslint-plugin-react-refresh": "^0.4.20",
|
"eslint-plugin-react-refresh": "^0.4.20",
|
||||||
"globals": "^16.3.0",
|
"globals": "^16.3.0",
|
||||||
"typescript": "^5.8.3",
|
"typescript": "^5.8.3",
|
||||||
"typescript-eslint": "^8.38.0",
|
"typescript-eslint": "^8.24.1",
|
||||||
"vite": "^7.0.6"
|
"vite": "^6.3.5"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -137,10 +137,8 @@ function UsersTable(p: {
|
|||||||
<GridActionsCellItem
|
<GridActionsCellItem
|
||||||
icon={<SaveIcon />}
|
icon={<SaveIcon />}
|
||||||
label="Save"
|
label="Save"
|
||||||
material={{
|
sx={{
|
||||||
sx: {
|
color: "primary.main",
|
||||||
color: 'primary.main',
|
|
||||||
},
|
|
||||||
}}
|
}}
|
||||||
onClick={handleSaveClick(id)}
|
onClick={handleSaveClick(id)}
|
||||||
/>,
|
/>,
|
||||||
|
477
geneit_backend/Cargo.lock
generated
477
geneit_backend/Cargo.lock
generated
File diff suppressed because it is too large
Load Diff
@@ -6,38 +6,38 @@ edition = "2024"
|
|||||||
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
|
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
log = "0.4.28"
|
log = "0.4.27"
|
||||||
env_logger = "0.11.8"
|
env_logger = "0.11.8"
|
||||||
clap = { version = "4.5.47", features = ["derive", "env"] }
|
clap = { version = "4.5.40", features = ["derive", "env"] }
|
||||||
lazy_static = "1.5.0"
|
lazy_static = "1.5.0"
|
||||||
lazy-regex = "3.4.1"
|
lazy-regex = "3.4.1"
|
||||||
anyhow = "1.0.99"
|
anyhow = "1.0.98"
|
||||||
actix-web = "4.11.0"
|
actix-web = "4.10.2"
|
||||||
actix-cors = "0.7.1"
|
actix-cors = "0.7.1"
|
||||||
actix-multipart = "0.7.2"
|
actix-multipart = "0.7.2"
|
||||||
actix-remote-ip = "0.1.0"
|
actix-remote-ip = "0.1.0"
|
||||||
futures-util = "0.3.31"
|
futures-util = "0.3.31"
|
||||||
diesel = { version = "2.2.12", features = ["postgres"] }
|
diesel = { version = "2.2.11", features = ["postgres"] }
|
||||||
diesel_migrations = "2.2.0"
|
diesel_migrations = "2.2.0"
|
||||||
serde = { version = "1.0.225", features = ["derive"] }
|
serde = { version = "1.0.219", features = ["derive"] }
|
||||||
serde_json = "1.0.145"
|
serde_json = "1.0.140"
|
||||||
mailchecker = "6.0.18"
|
mailchecker = "6.0.17"
|
||||||
redis = "0.32.5"
|
redis = "0.29.5"
|
||||||
lettre = "0.11.18"
|
lettre = "0.11.17"
|
||||||
rand = "0.9.2"
|
rand = "0.9.1"
|
||||||
bcrypt = "0.17.1"
|
bcrypt = "0.17.0"
|
||||||
light-openid = "1.0.4"
|
light-openid = "1.0.4"
|
||||||
thiserror = "2.0.16"
|
thiserror = "2.0.12"
|
||||||
serde_with = "3.14.0"
|
serde_with = "3.12.0"
|
||||||
rust_iso3166 = "0.1.14"
|
rust_iso3166 = "0.1.14"
|
||||||
rust-s3 = "0.35.1"
|
rust-s3 = "0.35.1"
|
||||||
sha2 = "0.10.9"
|
sha2 = "0.10.9"
|
||||||
image = "0.25.8"
|
image = "0.25.6"
|
||||||
uuid = { version = "1.17.0", features = ["v4"] }
|
uuid = { version = "1.16.0", features = ["v4"] }
|
||||||
httpdate = "1.0.3"
|
httpdate = "1.0.3"
|
||||||
zip = "4.3.0"
|
zip = "2.5.0"
|
||||||
mime_guess = "2.0.5"
|
mime_guess = "2.0.5"
|
||||||
tempfile = "3.20.0"
|
tempfile = "3.19.1"
|
||||||
base64 = "0.22.1"
|
base64 = "0.22.1"
|
||||||
ical = { version = "0.11.0", features = ["generator", "ical", "vcard"] }
|
ical = { version = "0.11.0", features = ["generator", "ical", "vcard"] }
|
||||||
chrono = "0.4.42"
|
chrono = "0.4.41"
|
||||||
|
@@ -34,16 +34,18 @@ impl AccommodationRequest {
|
|||||||
}
|
}
|
||||||
accommodation.name = self.name;
|
accommodation.name = self.name;
|
||||||
|
|
||||||
if let Some(d) = &self.description
|
if let Some(d) = &self.description {
|
||||||
&& !c.accommodation_description_len.validate(d) {
|
if !c.accommodation_description_len.validate(d) {
|
||||||
return Err(AccommodationListControllerErr::InvalidDescriptionLength.into());
|
return Err(AccommodationListControllerErr::InvalidDescriptionLength.into());
|
||||||
}
|
}
|
||||||
|
}
|
||||||
accommodation.description.clone_from(&self.description);
|
accommodation.description.clone_from(&self.description);
|
||||||
|
|
||||||
if let Some(c) = &self.color
|
if let Some(c) = &self.color {
|
||||||
&& !lazy_regex::regex!("[a-fA-F0-9]{6}").is_match(c) {
|
if !lazy_regex::regex!("[a-fA-F0-9]{6}").is_match(c) {
|
||||||
return Err(AccommodationListControllerErr::MalformedColor.into());
|
return Err(AccommodationListControllerErr::MalformedColor.into());
|
||||||
}
|
}
|
||||||
|
}
|
||||||
accommodation.color.clone_from(&self.color);
|
accommodation.color.clone_from(&self.color);
|
||||||
|
|
||||||
accommodation.need_validation = self.need_validation;
|
accommodation.need_validation = self.need_validation;
|
||||||
|
@@ -48,20 +48,23 @@ impl CoupleRequest {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if let Some(husband) = self.husband
|
if let Some(husband) = self.husband {
|
||||||
&& !members_service::exists(couple.family_id(), husband).await? {
|
if !members_service::exists(couple.family_id(), husband).await? {
|
||||||
return Err(CoupleControllerErr::HusbandNotExisting.into());
|
return Err(CoupleControllerErr::HusbandNotExisting.into());
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if let Some(d) = &self.wedding
|
if let Some(d) = &self.wedding {
|
||||||
&& !d.check() {
|
if !d.check() {
|
||||||
return Err(CoupleControllerErr::MalformedDateOfWedding.into());
|
return Err(CoupleControllerErr::MalformedDateOfWedding.into());
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if let Some(d) = &self.divorce
|
if let Some(d) = &self.divorce {
|
||||||
&& !d.check() {
|
if !d.check() {
|
||||||
return Err(CoupleControllerErr::MalformedDateOfDivorce.into());
|
return Err(CoupleControllerErr::MalformedDateOfDivorce.into());
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
couple.set_wife(self.wife);
|
couple.set_wife(self.wife);
|
||||||
couple.set_husband(self.husband);
|
couple.set_husband(self.husband);
|
||||||
|
@@ -95,10 +95,11 @@ fn check_opt_str_val(
|
|||||||
c: SizeConstraint,
|
c: SizeConstraint,
|
||||||
err: MemberControllerErr,
|
err: MemberControllerErr,
|
||||||
) -> anyhow::Result<()> {
|
) -> anyhow::Result<()> {
|
||||||
if let Some(v) = val
|
if let Some(v) = val {
|
||||||
&& !c.validate(v) {
|
if !c.validate(v) {
|
||||||
return Err(err.into());
|
return Err(err.into());
|
||||||
}
|
}
|
||||||
|
}
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -150,10 +151,11 @@ impl MemberRequest {
|
|||||||
MemberControllerErr::MalformedEmailAddress,
|
MemberControllerErr::MalformedEmailAddress,
|
||||||
)?;
|
)?;
|
||||||
|
|
||||||
if let Some(mail) = &self.email
|
if let Some(mail) = &self.email {
|
||||||
&& !mailchecker::is_valid(mail) {
|
if !mailchecker::is_valid(mail) {
|
||||||
return Err(MemberControllerErr::InvalidEmailAddress.into());
|
return Err(MemberControllerErr::InvalidEmailAddress.into());
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
check_opt_str_val(
|
check_opt_str_val(
|
||||||
&self.phone,
|
&self.phone,
|
||||||
@@ -185,20 +187,23 @@ impl MemberRequest {
|
|||||||
MemberControllerErr::MalformedCountry,
|
MemberControllerErr::MalformedCountry,
|
||||||
)?;
|
)?;
|
||||||
|
|
||||||
if let Some(c) = &self.country
|
if let Some(c) = &self.country {
|
||||||
&& !countries_utils::is_code_valid(c) {
|
if !countries_utils::is_code_valid(c) {
|
||||||
return Err(MemberControllerErr::InvalidCountryCode.into());
|
return Err(MemberControllerErr::InvalidCountryCode.into());
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if let Some(d) = &self.birth
|
if let Some(d) = &self.birth {
|
||||||
&& !d.check() {
|
if !d.check() {
|
||||||
return Err(MemberControllerErr::MalformedDateOfBirth.into());
|
return Err(MemberControllerErr::MalformedDateOfBirth.into());
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if let Some(d) = &self.death
|
if let Some(d) = &self.death {
|
||||||
&& !d.check() {
|
if !d.check() {
|
||||||
return Err(MemberControllerErr::MalformedDateOfDeath.into());
|
return Err(MemberControllerErr::MalformedDateOfDeath.into());
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
check_opt_str_val(
|
check_opt_str_val(
|
||||||
&self.note,
|
&self.note,
|
||||||
@@ -216,10 +221,11 @@ impl MemberRequest {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if let Some(father) = self.father
|
if let Some(father) = self.father {
|
||||||
&& !members_service::exists(member.family_id(), father).await? {
|
if !members_service::exists(member.family_id(), father).await? {
|
||||||
return Err(MemberControllerErr::FatherNotExisting.into());
|
return Err(MemberControllerErr::FatherNotExisting.into());
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
member.first_name = self.first_name;
|
member.first_name = self.first_name;
|
||||||
member.last_name = self.last_name;
|
member.last_name = self.last_name;
|
||||||
|
@@ -36,15 +36,16 @@ async fn get_photo(id: &PhotoIdPath, full_size: bool, req: HttpRequest) -> HttpR
|
|||||||
};
|
};
|
||||||
|
|
||||||
// Check if an upload is un-necessary
|
// Check if an upload is un-necessary
|
||||||
if let Some(c) = req.headers().get(header::IF_NONE_MATCH)
|
if let Some(c) = req.headers().get(header::IF_NONE_MATCH) {
|
||||||
&& c.to_str().unwrap_or("") == hash {
|
if c.to_str().unwrap_or("") == hash {
|
||||||
return Ok(HttpResponse::NotModified().finish());
|
return Ok(HttpResponse::NotModified().finish());
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if let Some(c) = req.headers().get(header::IF_MODIFIED_SINCE) {
|
if let Some(c) = req.headers().get(header::IF_MODIFIED_SINCE) {
|
||||||
let date_str = c.to_str().unwrap_or("");
|
let date_str = c.to_str().unwrap_or("");
|
||||||
if let Ok(date) = httpdate::parse_http_date(date_str)
|
if let Ok(date) = httpdate::parse_http_date(date_str) {
|
||||||
&& date
|
if date
|
||||||
.add(Duration::from_secs(1))
|
.add(Duration::from_secs(1))
|
||||||
.duration_since(UNIX_EPOCH)
|
.duration_since(UNIX_EPOCH)
|
||||||
.unwrap()
|
.unwrap()
|
||||||
@@ -53,6 +54,7 @@ async fn get_photo(id: &PhotoIdPath, full_size: bool, req: HttpRequest) -> HttpR
|
|||||||
{
|
{
|
||||||
return Ok(HttpResponse::NotModified().finish());
|
return Ok(HttpResponse::NotModified().finish());
|
||||||
}
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
let bytes = s3_connection::get_file(&match full_size {
|
let bytes = s3_connection::get_file(&match full_size {
|
||||||
|
@@ -149,10 +149,11 @@ pub mod loop_detection {
|
|||||||
|
|
||||||
impl LoopStack<'_> {
|
impl LoopStack<'_> {
|
||||||
pub fn contains(&self, id: MemberID) -> bool {
|
pub fn contains(&self, id: MemberID) -> bool {
|
||||||
if let Some(ls) = &self.prev
|
if let Some(ls) = &self.prev {
|
||||||
&& ls.contains(id) {
|
if ls.contains(id) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
self.curr == id
|
self.curr == id
|
||||||
}
|
}
|
||||||
|
@@ -64,7 +64,7 @@ fn redis_key(state: &str) -> String {
|
|||||||
format!("oidc-state-{state}")
|
format!("oidc-state-{state}")
|
||||||
}
|
}
|
||||||
|
|
||||||
async fn load_provider_info(prov_id: &str) -> anyhow::Result<OpenIDClient<'_>> {
|
async fn load_provider_info(prov_id: &str) -> anyhow::Result<OpenIDClient> {
|
||||||
let prov = AppConfig::get()
|
let prov = AppConfig::get()
|
||||||
.openid_providers()
|
.openid_providers()
|
||||||
.into_iter()
|
.into_iter()
|
||||||
|
Reference in New Issue
Block a user