Proje: Okul B2B App · Hub: Okul B2B App — Conventions

Güvenlik ve Depolama Katmanı

Depolama Katmanları

KatmanTeknolojiKullanım
SecureStorage (utils/)expo-secure-store + AES (crypto-js)Token, kullanıcı verisi
AsyncStorage@react-native-async-storageOnboarding, seçili firma ID, privacy consent
In-memoryuseState, static classAuth token (API client cache)

SecureStorage Anahtarları (SECURE_KEYS)

USER_TOKEN: 'user_token'         // JWT access token
REFRESH_TOKEN: 'refresh_token'   // Refresh token (varsa)
USER_DATA: 'user_data'           // Kullanıcı objesinin JSON'ı
BIOMETRIC_ENABLED: 'biometric_enabled'
APP_LOCK_ENABLED: 'app_lock_enabled'
ENCRYPTION_KEY: 'encryption_key' // AES anahtarı (SecureStore'da saklanır)

Şifreleme

Veriler expo-secure-store’a kaydedilmeden önce CryptoJS.AES.encrypt ile şifrelenir. Şifreleme anahtarı expo-crypto.randomUUID() ile üretilir ve yine SecureStore’da saklanır.

Gizlilik (KVKK/GDPR)

utils/PrivacyManager.ts ile consent yönetimi:

  • Consent sürümü: '1.0'
  • Storage key: @okulcomtr:privacy_consent
  • Analytics, functional ve marketing için ayrı consent
  • B2B app olduğundan c26a3cf commit’i ile analytics varsayılan olarak aktif (consent verilmemişse bile)

Logger

utils/Logger.ts singleton:

  • Log level: EXPO_PUBLIC_LOG_LEVEL env variable
  • Production’da: error level (sadece gerçek hatalar)
  • Development’ta: debug level
import { logger } from '@/utils/Logger';
logger.info('Message', data);
logger.error('Error', error);
logger.logWarning('Warning', data);  // alias

AsyncStorage Keyler

KeyDeğer
hasLaunched'true' — onboarding gösterildi mi
selectedCompanyIdSeçili firma ID’si (string)
@okulcomtr:privacy_consentKVKK consent JSON