diff --git a/api.php b/api.php
index e1053a4..60aa2e2 100644
--- a/api.php
+++ b/api.php
@@ -993,6 +993,7 @@ switch ($action) {
'user_id' => $_SESSION['user_id'],
'username' => $_SESSION['username'],
'nimi' => $_SESSION['nimi'],
+ 'email' => $u['email'] ?? '',
'role' => $_SESSION['role'],
'companies' => $companyList,
'company_id' => $_SESSION['company_id'] ?? '',
@@ -1030,7 +1031,7 @@ switch ($action) {
$html .= '
Vaihda salasana
';
$html .= 'Linkki on voimassa 1 tunnin. Jos et pyytänyt salasanan vaihtoa, voit jättää tämän viestin huomiotta.
';
$html .= '';
- sendMail($user['email'], 'Salasanan palautus - CuituNet Intra', $html);
+ sendMail($user['email'], 'Salasanan palautus - Noxus Intra', $html);
}
echo json_encode(['success' => true, 'message' => 'Jos käyttäjätunnus löytyy ja sillä on sähköposti, palautuslinkki lähetetään.']);
break;
@@ -1236,6 +1237,43 @@ switch ($action) {
echo json_encode(['success' => true]);
break;
+ // ---------- PROFILE (oma profiili) ----------
+ case 'profile_update':
+ requireAuth();
+ if ($method !== 'POST') break;
+ $input = json_decode(file_get_contents('php://input'), true);
+ $userId = $_SESSION['user_id'];
+ $u = dbGetUser($userId);
+ if (!$u) {
+ http_response_code(404);
+ echo json_encode(['error' => 'Käyttäjää ei löydy']);
+ break;
+ }
+ if (isset($input['nimi'])) $u['nimi'] = trim($input['nimi']);
+ if (isset($input['email'])) $u['email'] = trim($input['email']);
+ if (!empty($input['password'])) {
+ if (strlen($input['password']) < 4) {
+ http_response_code(400);
+ echo json_encode(['error' => 'Salasanan pitää olla vähintään 4 merkkiä']);
+ break;
+ }
+ $u['password_hash'] = password_hash($input['password'], PASSWORD_DEFAULT);
+ }
+ if (isset($input['signatures']) && is_array($input['signatures'])) {
+ $sigs = [];
+ foreach ($input['signatures'] as $mbId => $sig) {
+ $sigs[(string)$mbId] = (string)$sig;
+ }
+ $u['signatures'] = $sigs;
+ }
+ dbSaveUser($u);
+ // Päivitä session nimi
+ $_SESSION['nimi'] = $u['nimi'];
+ $safe = $u;
+ unset($safe['password_hash']);
+ echo json_encode($safe);
+ break;
+
// ---------- CHANGELOG ----------
case 'changelog':
requireAuth();
diff --git a/fix_role.php b/fix_role.php
deleted file mode 100644
index a5a724e..0000000
--- a/fix_role.php
+++ /dev/null
@@ -1,29 +0,0 @@
-query("SELECT id, username, nimi, role FROM users ORDER BY role, username");
-while ($row = $result->fetch_assoc()) {
- echo sprintf("%-20s %-25s rooli: %s\n", $row['username'], $row['nimi'] ?? '', $row['role']);
-}
-
-echo "\n=== KORJAUS: admin → superadmin ===\n";
-$updated = $db->query("UPDATE users SET role = 'superadmin' WHERE role = 'admin'");
-echo "Päivitetty " . $db->affected_rows . " käyttäjää admin → superadmin\n";
-
-echo "\n=== ROOLIT KORJAUKSEN JÄLKEEN ===\n\n";
-$result = $db->query("SELECT id, username, nimi, role FROM users ORDER BY role, username");
-while ($row = $result->fetch_assoc()) {
- echo sprintf("%-20s %-25s rooli: %s\n", $row['username'], $row['nimi'] ?? '', $row['role']);
-}
-
-echo "\n⚠️ POISTA fix_role.php palvelimelta!\n";
diff --git a/fix_saatavuus.php b/fix_saatavuus.php
deleted file mode 100644
index 7661e70..0000000
--- a/fix_saatavuus.php
+++ /dev/null
@@ -1,80 +0,0 @@
-query("SELECT id, nimi, api_key, cors_origins FROM companies ORDER BY nimi");
-$companies = [];
-while ($row = $result->fetch_assoc()) {
- $companies[] = $row;
- $key = $row['api_key'] ?: '(tyhjä)';
- echo sprintf("%-20s %-40s avain: %s\n", $row['id'], $row['nimi'], $key);
- echo sprintf("%-20s %-40s CORS: %s\n", '', '', $row['cors_origins'] ?: '(tyhjä)');
-}
-
-// Etsi yritys jossa on "cuitu" nimessä
-$cuituCompany = null;
-foreach ($companies as $c) {
- if (stripos($c['nimi'], 'cuitu') !== false) {
- $cuituCompany = $c;
- break;
- }
-}
-
-if (!$cuituCompany) {
- // Jos ei löydy nimellä, yritä ensimmäinen yritys
- echo "\n⚠️ Ei löytynyt yritystä jossa 'cuitu' nimessä.\n";
- echo "Yritykset:\n";
- foreach ($companies as $i => $c) {
- echo " [$i] {$c['id']} = {$c['nimi']}\n";
- }
- echo "\nAsetetaan API-avain ENSIMMÄISELLE yritykselle...\n";
- $cuituCompany = $companies[0] ?? null;
-}
-
-if (!$cuituCompany) {
- echo "\n❌ Ei yrityksiä tietokannassa!\n";
- exit;
-}
-
-echo "\n=== KORJATAAN: {$cuituCompany['nimi']} (ID: {$cuituCompany['id']}) ===\n\n";
-
-// 1. Aseta API-avain
-echo "1. API-avain: {$targetApiKey}\n";
-$db->query("UPDATE companies SET api_key = '{$targetApiKey}' WHERE id = '{$cuituCompany['id']}'");
-echo " → Päivitetty (" . $db->affected_rows . " rivi)\n";
-
-// 2. Päivitä CORS-originit
-$existingOrigins = json_decode($cuituCompany['cors_origins'] ?: '[]', true) ?: [];
-$merged = array_unique(array_merge($existingOrigins, $requiredOrigins));
-$corsJson = json_encode(array_values($merged));
-echo "2. CORS-originit: {$corsJson}\n";
-$stmt = $db->prepare("UPDATE companies SET cors_origins = ? WHERE id = ?");
-$stmt->bind_param('ss', $corsJson, $cuituCompany['id']);
-$stmt->execute();
-echo " → Päivitetty (" . $stmt->affected_rows . " rivi)\n";
-
-// 3. Testaa
-echo "\n=== TARKISTUS ===\n\n";
-$result = $db->query("SELECT id, nimi, api_key, cors_origins FROM companies WHERE id = '{$cuituCompany['id']}'");
-$row = $result->fetch_assoc();
-echo "Yritys: {$row['nimi']}\n";
-echo "API-key: {$row['api_key']}\n";
-echo "CORS: {$row['cors_origins']}\n";
-
-$match = ($row['api_key'] === $targetApiKey) ? '✅' : '❌';
-echo "\nAPI-avain täsmää: {$match}\n";
-
-echo "\n⚠️ POISTA fix_saatavuus.php palvelimelta!\n";
-echo "Testaa: curl 'https://intra.noxus.fi/api.php?action=saatavuus&key={$targetApiKey}&osoite=Testikatu+1&postinumero=20100&kaupunki=Turku'\n";
diff --git a/index.html b/index.html
index 0cb17f7..54768c1 100644
--- a/index.html
+++ b/index.html
@@ -65,7 +65,8 @@