vault-management

Güvenli veri yönetimi ve erişim kontrolü sunan, Firebase entegrasyonlu ve Next.js tabanlı bir proje. Docker ve Nginx kullanılarak yapılandırılmıştır.

APACHE-2.0 License

Stars
0

Vault Management

Vault Management gvenli anahtar ynetimi, kullanc dorulama ve eitli bulut hizmetlerini ynetme gibi ilemleri kolaylatrmak iin gelitirilmi bir zmdr. Proje, hem ynetim paneli hem de SDK destei sunarak kullanclarn gvenli bir ekilde hizmetleri ynetmesine ve izlenmesine olanak tanr. Firebase entegrasyonu ile gl kimlik dorulama ve veritaban ynetimi salanmaktadr.

NOT: JavaScript ile gelitirilen, ancak TypeScript'e gei srecinde olan bir proje olup, hem sunucu tarafnda hem de modl olarak hizmet verebilen bir zm sunmaktadr. Bu proje, kullanclarn gvenli anahtar ynetimi, kimlik dorulama ve bulut hizmetlerinin entegrasyonu gibi ihtiyalarn karlamak zere tasarlanmtr. Ynetim paneli ve SDK desteiyle, kullanclarn hem kolay hem de gvenli bir ekilde hizmetleri ynetmesine olanak tanr. Firebase entegrasyonu sayesinde gl kimlik dorulama, gvenli veri ynetimi ve gelimi yaplandrma seenekleri sunulmaktadr.

Proje, zellikle:

  • Hassas verilerin (API anahtarlar, balant bilgileri vb.) gvenli ynetimi,
  • Firebase tabanl kimlik dorulama ve veri ynetimi,
  • Ynetim paneli zerinden kolay yaplandrma ve kontrol imkan sunar.

Firebase Entegrasyonu

Bu projede Firebase, kimlik dorulama, veritaban (Firestore) ve dier servisler iin temel yap tadr. Firebase yaplandrmasn tamamlamak iin aadaki admlar izleyin.

Firebase Proje Kurulumu ve Yaplandrmas

  1. Firebase Console'a Giri:

    • Firebase Console adresine gidin ve Google hesabnzla giri yapn.
    • Yeni bir proje oluturmak iin "Add Project" butonuna tklayn ve proje ad olarak vault-management-panel gibi bir isim belirleyin.
  2. Firebase Config Bilgilerini Alma:

    • Proje ayarlarna gidin ve web uygulamas ekleyin.
    • Firebase size aadaki gibi bir yaplandrma bilgisi verecek:
      const firebaseConfig = {
        apiKey: "YOUR_FIREBASE_API_KEY",
        authDomain: "YOUR_FIREBASE_AUTH_DOMAIN",
        projectId: "YOUR_FIREBASE_PROJECT_ID",
        storageBucket: "YOUR_FIREBASE_STORAGE_BUCKET",
        messagingSenderId: "YOUR_FIREBASE_MESSAGING_SENDER_ID",
        appId: "YOUR_FIREBASE_APP_ID",
        measurementId: "YOUR_FIREBASE_MEASUREMENT_ID"
      };
      
  3. .env.production Dosyasna Firebase Bilgilerini Ekleyin: Firebase'den aldnz yaplandrma bilgilerini .env.production dosyasna ekleyin. Bu dosya, projedeki tm Firebase yaplandrma bilgilerini ierir.

    rnek .env.production Dosyas:

    FIREBASE_API_KEY=your-firebase-api-key
    FIREBASE_AUTH_DOMAIN=your-firebase-auth-domain
    FIREBASE_PROJECT_ID=your-firebase-project-id
    FIREBASE_STORAGE_BUCKET=your-firebase-storage-bucket
    FIREBASE_MESSAGING_SENDER_ID=your-firebase-messaging-sender-id
    FIREBASE_APP_ID=your-firebase-app-id
    FIREBASE_MEASUREMENT_ID=your-firebase-measurement-id
    
  4. Firebase Admin SDK iin JSON Dosyasn ndirin:

    • Firebase Console'da Project Settings blmnden Service Accounts sekmesine gidin.
    • "Generate New Private Key" butonuna tklayn ve JSON dosyasn indirin. Bu dosya Firebase Admin SDK ile kullanlacaktr.
  5. Firebase Admin SDK Yaplandrmas:

    • ndirdiiniz JSON dosyasndaki verileri kullanarak, .env.production dosyasna eklemelisiniz. Admin tarafnda yaplacak ilemler iin bu bilgiler gereklidir.
    • rnek .env.production Yaplandrmas:
      FIREBASE_ADMIN_PRIVATE_KEY="-----BEGIN PRIVATE KEY-----
      

YOUR_PRIVATE_KEY_HERE -----END PRIVATE KEY-----" FIREBASE_ADMIN_CLIENT_EMAIL=your-service-account-email FIREBASE_ADMIN_PROJECT_ID=your-firebase-project-id FIREBASE_ADMIN_PRIVATE_KEY_ID=your-private-key-id FIREBASE_ADMIN_TOKEN_URI=your-token-uri FIREBASE_ADMIN_AUTH_PROVIDER_CERT_URL=your-auth-provider-cert-url FIREBASE_ADMIN_CLIENT_CERT_URL=your-client-cert-url ```


Ortam Deikenleri (.env) Yaplandrmas

Firebase yaplandrmanz tamamlamak iin .env.production dosyasn oluturun ve Firebase'den aldnz yaplandrma bilgilerini bu dosyaya ekleyin. Ayn zamanda Firebase Admin SDK iin gereken JSON dosyasndaki bilgileri de bu dosyaya ekleyin.

rnek .env.production Dosyas:

# Firebase Client SDK Config
FIREBASE_API_KEY=your-firebase-api-key
FIREBASE_AUTH_DOMAIN=your-firebase-auth-domain
FIREBASE_PROJECT_ID=your-firebase-project-id
FIREBASE_STORAGE_BUCKET=your-firebase-storage-bucket
FIREBASE_MESSAGING_SENDER_ID=your-firebase-messaging-sender-id
FIREBASE_APP_ID=your-firebase-app-id
FIREBASE_MEASUREMENT_ID=your-firebase-measurement-id

# Firebase Admin SDK Config
FIREBASE_ADMIN_PRIVATE_KEY="-----BEGIN PRIVATE KEY-----
YOUR_PRIVATE_KEY_HERE
-----END PRIVATE KEY-----"
FIREBASE_ADMIN_CLIENT_EMAIL=your-service-account-email
FIREBASE_ADMIN_PROJECT_ID=your-firebase-project-id
FIREBASE_ADMIN_PRIVATE_KEY_ID=your-private-key-id
FIREBASE_ADMIN_TOKEN_URI=your-token-uri
FIREBASE_ADMIN_AUTH_PROVIDER_CERT_URL=your-auth-provider-cert-url
FIREBASE_ADMIN_CLIENT_CERT_URL=your-client-cert-url

Docker Compose ile Projeyi Balatma

Ortam deikenleri (.env.production) ayarlandktan ve gerekli yaplandrmalar yapldktan sonra, Docker konteynerinizi aadaki komutla altrabilirsiniz:

docker-compose --env-file .env.production up --build -d

Komutun Aklamas:

  • --env-file .env.production: Bu parametre, Docker'n .env.production dosyasn kullanarak ortam deikenlerini yklemesini salar.
  • up --build: Docker Compose ile servisi balatr ve eer imajlar yoksa ya da deiiklik varsa yeniden build eder.
  • -d: Bu parametre, Docker konteynerinin arka planda (detached mode) almasn salar.

Docker Komutunu altrdktan Sonra:

  1. Konteynerin Baaryla altn Dorulayn:

    • Docker konteynerlerinin doru ekilde alp almadn kontrol etmek iin u komutu kullanabilirsiniz:
      docker ps
      

    Bu komut, alan konteynerlerin listesini gsterir ve vault-management-container adndaki konteynerin altn grmelisiniz.

  2. Uygulamay Kontrol Edin:

    • Uygulamanz varsaylan olarak 3001 portunda alyor olacak. u URL'den uygulamanzn alp almadn kontrol edebilirsiniz:
      http://localhost:3001
      
  3. Loglar Kontrol Edin:

    • Eer bir sorun yayorsanz, konteyner loglarn inceleyerek sorunu tehis edebilirsiniz:
      docker-compose logs
      
  4. Konteyneri Durdurmak:

    • Uygulamay durdurmak isterseniz, u komutu kullanarak tm konteynerleri kapatabilirsiniz:
      docker-compose down
      

Firebase Authentication Yaplandrmas

Firebase Authentication ile kullanclarn giri yapabilmesi iin u admlar takip edin:

  1. Authentication Paneline Giri:

    • Firebase Console'da projenize gidin.
    • Sol mende Authentication sekmesine tklayn ve Sign-in method blmne gein.
  2. Giri Yntemi Ekleme:

    • Email/Password oturum ama yntemini etkinletirin.
    • Bu yntem, kullanclarn e-posta ve ifre ile kimlik dorulamas yapmalarn salayacaktr.
  3. Manuel Kullanc Oluturma:

    • Firebase Authentication zerinde Users sekmesine gidin.
    • Manuel olarak kullanc ekleyin veya Firebase Admin SDK ile kullanc oluturma ilemlerini gerekletirin.

Firestore ile Kullanc Verisi Saklama

Kullanclarn oturum amasnn yan sra, kullancya ait profil bilgilerini Firestore'daki users koleksiyonunda saklamalsnz. Bu koleksiyon, kimlik dorulanan kullanclarn detayl profil bilgilerini barndracaktr.

Kullanc Kayt ve Firestore lemleri:

Bir kullanc email & password ile oturum atktan sonra, Firebase Authentication'daki verisi ile Firestore'daki users koleksiyonundaki veriler birbiriyle ilikilendirilmelidir. Bu ilikiyi salamak iin kullancnn uid deeri kullanlr.


Firebase ile Oturum Ama ve Kullanc Bilgisi Kaydetme:

Firebase Authentication ile kullancnn kaydn yaptktan sonra, bu kullancy Firestore'da da saklamak iin aadaki admlar takip edebilirsiniz:

  1. Kullanc Oluturma ve Firestore'da Kaydetme (Sign-up): Firebase Authentication ile yeni kullanc oluturulduktan sonra, kullanc bilgilerini Firestore'daki users koleksiyonuna kaydedin.

    import { getAuth, createUserWithEmailAndPassword } from 'firebase/auth';
    import { doc, setDoc } from 'firebase/firestore';
    import { db } from '../../../firebase'; // Firestore balants
    
    const auth = getAuth();
    
    export const signUpUser = async (email, password, userData) => {
      try {
        const userCredential = await createUserWithEmailAndPassword(auth, email, password);
        const user = userCredential.user;
    
        await setDoc(doc(db, 'users', user.uid), {
          email: user.email,
          name: userData.name,
          avatarURL: userData.avatarURL || '',
          role: userData.role || 'user',
        });
    
        console.log('Kullanc baaryla kaydedildi:', user.uid);
        return user.uid;
      } catch (error) {
        console.error('Kullanc kaydedilirken hata olutu:', error);
        throw error;
      }
    };
    
  2. Kullanc Giri Yapma ve Verileri Getirme (Sign-in): Kullanc giri yaptktan sonra, Firestore'dan kullancnn profil bilgilerini getirin.

    import { getAuth, signInWithEmailAndPassword } from 'firebase/auth';
    import { doc, getDoc } from 'firebase/firestore';
    import { db } from '../../../firebase'; // Firestore balants
    
    const auth = getAuth();
    
    export const signInUser = async (email, password) => {
      try {
        const userCredential = await signInWithEmailAndPassword(auth, email, password);
        const user = userCredential.user;
    
        const userDocRef = doc(db, 'users', user.uid);
        const userDoc = await getDoc(userDocRef);
    
        if (userDoc.exists()) {
          const userData = userDoc.data();
          console.log('Kullanc verisi:', userData);
          return { ...userData, uid: user.uid };
        } else {
          console.log('Kullanc Firestore'da bulunamad.');
          return null;
        }
      } catch (error) {
        console.error('Kullanc giriinde hata olutu:', error);
        throw error;
      }
    };
    

Firestore Gvenlik Kurallar

Firestore gvenlik kurallar, uygulamann veri eriim ve maniplasyon haklarn kontrol eder. Test ortamnda, veritabanna herkesin erimesine izin vermek iin basit bir yaplandrma kullanabilirsiniz. Daha sonra bu kurallar retim ortamnda sklatrlmaldr.

Firestore Gvenlik Kurallarn Ayarlama

  1. Firebase Console zerinden projenize gidin.
  2. Sol menden Firestore Database'e tklayn.
  3. Rules sekmesine gein.
  4. Aadaki kurallar ekleyin:
  rules_version = '2';
   service cloud.firestore {
     match /databases/{database}/documents {
       match /{document=**} {
         allow read, write: if true;
       }
     }
   }

Bu kurallar, herkese okuma ve yazma izni verir. Bu sadece test amaldr ve verilerinizin gvenlii iin retim ortamnda kullanlmamaldr.

retim Ortam in neriler

retim ortamnda, sadece kimlii dorulanm kullanclarn okuma ve yazma ilemlerine izin veren kurallar kullanmalsnz. rnein:

rules_version = '2';
service cloud.firestore {
  match /databases/{database}/documents {
    match /{document=**} {
      allow read, write: if request.auth != null;
    }
  }
}

Bu kural, yalnzca oturum am kullanclarn verilere erimesine izin verir. retim ortamnda daha gvenli bir yap salar.

Screenshotlar

Proje ile ilgili ekran grntleri veya emalar iin aadaki dosyalar kullanabilirsiniz. Bu grseller, projenin ilevselliini ve kullanc arayzn daha iyi anlamanz salayacaktr.

Grsel Dosya Yollar:

  1. Ynetim Paneli Genel Grnm Giri Sayfas - Ynetim paneli genel grnm ve giri sayfas

Bu grseller, projenin eitli blmlerini ve kullanc arayz elerini gstermek iin hazrlanmtr.


Not Bu proje, gelecekte npm modl olarak kullanlmak zere hazrlanmtr. u anda modl destei gelitirme aamasndadr ve tamamlandnda npm zerinden kullanma sunulacaktr. Projenin ilk aamalarnda sadece npm zerinde yaynlanacak olup, GitHub Packages'a eklenmesine gerek duyulmamaktadr.

leride, modl destei tamamlandnda ve npm'ye yaynlandnda, daha fazla entegrasyon ve geniletilebilirlik salayacak ekilde dzenlenecektir.

1.0.0 srm iin features milestonelarna ve ilgili issuelara gre gncellemeler belirtilecektir.

Related Projects