Tarkibga o'tish

Shaxsiy Daftar API

Barcha endpointlar Authorization: Bearer <token> talab qiladi.

Zero-Knowledge arxitekturasi

Daftar yozuvlari foydalanuvchi qurilmasida shifrlangan holda serverga yuboriladi. Server faqat shifrlangan ma'lumot saqlaydi — parolsiz mazmunni o'qish texnik jihatdan imkonsiz. API dan foydalanishdan oldin shifrlash va kalit chiqarish algoritmlarini tushunib oling.


Daftar tizimi haqida

Daftar uchta qadam orqali ishlaydi:

  1. Materiallar — server shifrlash uchun zarur parametrlarni (tuz, iteratsiyalar va h.k.) beradi
  2. Ochish (Unlock) — parol asosida kalit yaratiladi va daftar tokeni olinadi
  3. Yozuvlar — daftar tokeni bilan yozuvlar olinadi va yaratiladi

Barcha shifrlash/deshifrlash client tomonda amalga oshiriladi.


Materiallar (shifrlash parametrlari)

GET /api/v1/diary/materials
Authorization: Bearer <token>

Javob:

{
  "ok": true,
  "is_setup": true,
  "salt": "base64_encoded_salt",
  "iterations": 310000,
  "has_secondary": false
}

is_setup: false bo'lsa — daftar hali sozlanmagan, avval /setup kerak.


Daftarni sozlash (birinchi marta)

POST /api/v1/diary/setup
Authorization: Bearer <token>
Content-Type: application/json
{
  "verifier": "base64_encoded_verifier",
  "salt": "base64_encoded_salt"
}

verifier — client tomonda paroldan PBKDF2 + HKDF orqali hosil qilingan tekshiruvchi qiymat.


Daftarni ochish

POST /api/v1/diary/unlock
Authorization: Bearer <token>
Content-Type: application/json
{
  "verifier": "base64_encoded_verifier",
  "mode": "primary"
}
mode Tavsif
primary A-parol — barcha yozuvlarga kirish
secondary B-parol — faqat "ochiq" deb belgilangan yozuvlar

Javob (200):

{
  "ok": true,
  "diary_token": "eyJ...",
  "mode": "primary"
}

diary_token — keyingi so'rovlarda X-Diary-Token sarlavhasida yuboriladi.


Yozuvlar ro'yxati

GET /api/v1/diary/entries
Authorization: Bearer <token>
X-Diary-Token: <diary_token>

So'rov parametrlari:

Parametr Tavsif
limit Soni (standart: 20)
offset Paginatsiya
date YYYY-MM-DD — muayyan kun yozuvlari

Javob:

{
  "ok": true,
  "entries": [
    {
      "id": 50,
      "encrypted_content": "base64_encrypted_data",
      "mood": "happy",
      "word_count": 150,
      "is_public": false,
      "entry_date": "2026-06-11",
      "created_at": "2026-06-11T09:00:00Z"
    }
  ]
}

encrypted_content — client tomonda deshifrlash kerak.


Yozuv yaratish

POST /api/v1/diary/entries
Authorization: Bearer <token>
X-Diary-Token: <diary_token>
Content-Type: application/json
{
  "encrypted_content": "base64_encrypted_data",
  "mood": "happy",
  "word_count": 150,
  "is_public": false,
  "entry_date": "2026-06-11"
}
Maydon Turi Tavsif
encrypted_content string Client tomonda shifrlangan yozuv (base64)
mood string neutral, happy, sad, angry, anxious, calm, excited
word_count integer Deshifrlangan matnning so'zlar soni
is_public boolean B-parol bilan ko'rish mumkinmi
entry_date string YYYY-MM-DD formatida

Javob (201):

{
  "ok": true,
  "entry": {
    "id": 51,
    "mood": "happy",
    "entry_date": "2026-06-11",
    "created_at": "2026-06-11T10:00:00Z"
  }
}


Yozuv ma'lumotlari

GET /api/v1/diary/entries/<entry_id>
Authorization: Bearer <token>
X-Diary-Token: <diary_token>

Yozuv o'chirish

DELETE /api/v1/diary/entries/<entry_id>
Authorization: Bearer <token>
X-Diary-Token: <diary_token>

Daftar eksporti

Barcha yozuvlarni shifrlangan JSON formatida yuklab olish:

POST /api/v1/profile/settings/diary/entries/export
Authorization: Bearer <token>

Kayfiyat (mood) qiymatlari

Qiymat Emoji O'zbekcha
neutral 😐 Neytral
happy 😊 Xursand
sad 😢 Xafa
angry 😠 G'azablangan
anxious 😰 Xavotirli
calm 😌 Tinch
excited 🤩 Hayajonli

Xato kodlari

Kod Sabab
diary_not_setup Daftar hali sozlanmagan
invalid_verifier Parol noto'g'ri
diary_token_required X-Diary-Token sarlavhasi yetishmaydi
diary_token_invalid Daftar tokeni noto'g'ri yoki muddati o'tgan
entry_not_found Yozuv topilmadi
secondary_not_setup B-parol sozlanmagan