Skip to content

Commit 4b92fe9

Browse files
Fix Rust-only startup seed
1 parent af760aa commit 4b92fe9

3 files changed

Lines changed: 72 additions & 6 deletions

File tree

rust/iscy-backend/src/db_admin.rs

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2835,13 +2835,14 @@ INSERT OR IGNORE INTO organizations_tenant (
28352835
'Product security scope prepared for Rust cutover'
28362836
);
28372837
INSERT INTO accounts_user (
2838-
id, password, username, first_name, last_name, email, is_staff, is_active, date_joined, role, job_title, tenant_id
2838+
id, password, is_superuser, username, first_name, last_name, email, is_staff, is_active, date_joined, role, job_title, tenant_id
28392839
) VALUES (
2840-
1, 'pbkdf2_sha256$720000$iscy-demo-salt$dHYZBIWxS3abL+0r4Rp7w3kbLXLSAFUrGq/HaPlAVrY=',
2840+
1, 'pbkdf2_sha256$720000$iscy-demo-salt$dHYZBIWxS3abL+0r4Rp7w3kbLXLSAFUrGq/HaPlAVrY=', 1,
28412841
'admin', 'Demo', 'Admin', 'admin@example.com', 1, 1, '2026-04-22T10:00:00Z',
28422842
'ADMIN', 'Security Lead', 1
28432843
) ON CONFLICT(id) DO UPDATE SET
28442844
password = excluded.password,
2845+
is_superuser = excluded.is_superuser,
28452846
username = excluded.username,
28462847
first_name = excluded.first_name,
28472848
last_name = excluded.last_name,
@@ -3177,13 +3178,14 @@ INSERT INTO organizations_tenant (
31773178
'Product security scope prepared for Rust cutover'
31783179
) ON CONFLICT (id) DO NOTHING;
31793180
INSERT INTO accounts_user (
3180-
id, password, username, first_name, last_name, email, is_staff, is_active, date_joined, role, job_title, tenant_id
3181+
id, password, is_superuser, username, first_name, last_name, email, is_staff, is_active, date_joined, role, job_title, tenant_id
31813182
) VALUES (
3182-
1, 'pbkdf2_sha256$720000$iscy-demo-salt$dHYZBIWxS3abL+0r4Rp7w3kbLXLSAFUrGq/HaPlAVrY=',
3183+
1, 'pbkdf2_sha256$720000$iscy-demo-salt$dHYZBIWxS3abL+0r4Rp7w3kbLXLSAFUrGq/HaPlAVrY=', TRUE,
31833184
'admin', 'Demo', 'Admin', 'admin@example.com', TRUE, TRUE, '2026-04-22T10:00:00Z',
31843185
'ADMIN', 'Security Lead', 1
31853186
) ON CONFLICT (id) DO UPDATE SET
31863187
password = EXCLUDED.password,
3188+
is_superuser = EXCLUDED.is_superuser,
31873189
username = EXCLUDED.username,
31883190
first_name = EXCLUDED.first_name,
31893191
last_name = EXCLUDED.last_name,

rust/iscy-backend/tests/http_tests.rs

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7260,6 +7260,49 @@ async fn rust_db_admin_migrates_and_seeds_demo_web_cutover_database() {
72607260
assert_eq!(mapping_count, 67);
72617261
}
72627262

7263+
#[tokio::test]
7264+
async fn rust_db_admin_seed_sets_superuser_for_existing_sqlite_user_table() {
7265+
let pool = SqlitePoolOptions::new()
7266+
.max_connections(1)
7267+
.connect("sqlite::memory:")
7268+
.await
7269+
.unwrap();
7270+
sqlx::query(
7271+
r#"
7272+
CREATE TABLE accounts_user (
7273+
id INTEGER PRIMARY KEY AUTOINCREMENT,
7274+
password varchar(128) NOT NULL DEFAULT '',
7275+
last_login TEXT NULL,
7276+
is_superuser bool NOT NULL,
7277+
username varchar(150) NOT NULL UNIQUE,
7278+
first_name varchar(150) NOT NULL DEFAULT '',
7279+
last_name varchar(150) NOT NULL DEFAULT '',
7280+
email varchar(254) NOT NULL DEFAULT '',
7281+
is_staff bool NOT NULL DEFAULT 0,
7282+
is_active bool NOT NULL DEFAULT 1,
7283+
date_joined TEXT NOT NULL DEFAULT CURRENT_TIMESTAMP,
7284+
role varchar(32) NOT NULL DEFAULT 'CONTRIBUTOR',
7285+
job_title varchar(255) NOT NULL DEFAULT '',
7286+
tenant_id INTEGER NULL
7287+
)
7288+
"#,
7289+
)
7290+
.execute(&pool)
7291+
.await
7292+
.unwrap();
7293+
7294+
db_admin::run_sqlite_migrations(&pool).await.unwrap();
7295+
db_admin::seed_sqlite_demo(&pool).await.unwrap();
7296+
db_admin::seed_sqlite_demo(&pool).await.unwrap();
7297+
7298+
let is_superuser: i64 =
7299+
sqlx::query_scalar("SELECT is_superuser FROM accounts_user WHERE id = 1")
7300+
.fetch_one(&pool)
7301+
.await
7302+
.unwrap();
7303+
assert_eq!(is_superuser, 1);
7304+
}
7305+
72637306
#[tokio::test]
72647307
async fn nvd_import_endpoint_fetches_and_persists_cve_record() {
72657308
let pool = SqlitePoolOptions::new()

start.sh

Lines changed: 23 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,17 +13,38 @@ if [ ! -f ".env" ] && [ -f ".env.example" ]; then
1313
info ".env aus .env.example erstellt."
1414
fi
1515

16+
ENV_FILE_READABLE=0
17+
ENV_FILE_WRITABLE=0
18+
if [ -f ".env" ]; then
19+
if [ -r ".env" ]; then
20+
ENV_FILE_READABLE=1
21+
else
22+
warn ".env ist vorhanden, aber nicht lesbar; nutze Defaults und exportierte Umgebungsvariablen."
23+
fi
24+
if [ -w ".env" ]; then
25+
ENV_FILE_WRITABLE=1
26+
else
27+
warn ".env ist vorhanden, aber nicht schreibbar; Startwerte werden nicht in .env aktualisiert."
28+
fi
29+
else
30+
ENV_FILE_READABLE=1
31+
ENV_FILE_WRITABLE=1
32+
fi
33+
1634
env_file_value() {
1735
local key="$1"
18-
if [ -f ".env" ]; then
36+
if [ -f ".env" ] && [ "$ENV_FILE_READABLE" = "1" ]; then
1937
awk -F= -v key="$key" '$1 == key { sub(/^[^=]*=/, ""); print; exit }' .env
2038
fi
2139
}
2240

2341
set_env_var() {
2442
local key="$1" value="$2" tmp
43+
if [ "$ENV_FILE_WRITABLE" != "1" ]; then
44+
return 0
45+
fi
2546
tmp="$(mktemp)"
26-
if [ -f ".env" ]; then
47+
if [ -f ".env" ] && [ "$ENV_FILE_READABLE" = "1" ]; then
2748
awk -v key="$key" -v value="$value" '
2849
BEGIN { found = 0 }
2950
$0 ~ "^" key "=" {

0 commit comments

Comments
 (0)