Implement PBS authentication support for backup discovery
- Add PBSStorageCredential model to database schema (fingerprint now required) - Create PBS credentials API router with CRUD operations - Add PBS login functionality to backup service before discovery - Create PBSCredentialsModal component for managing credentials - Integrate PBS credentials management into ServerStoragesModal - Update storage service to extract PBS IP and datastore info - Add helpful hint about finding fingerprint on PBS dashboard - Auto-accept fingerprint during login using stored credentials
This commit is contained in:
@@ -361,6 +361,62 @@ class DatabaseServicePrisma {
|
||||
return grouped;
|
||||
}
|
||||
|
||||
// PBS Credentials CRUD operations
|
||||
async createOrUpdatePBSCredential(credentialData) {
|
||||
return await prisma.pBSStorageCredential.upsert({
|
||||
where: {
|
||||
server_id_storage_name: {
|
||||
server_id: credentialData.server_id,
|
||||
storage_name: credentialData.storage_name,
|
||||
},
|
||||
},
|
||||
update: {
|
||||
pbs_ip: credentialData.pbs_ip,
|
||||
pbs_datastore: credentialData.pbs_datastore,
|
||||
pbs_password: credentialData.pbs_password,
|
||||
pbs_fingerprint: credentialData.pbs_fingerprint,
|
||||
updated_at: new Date(),
|
||||
},
|
||||
create: {
|
||||
server_id: credentialData.server_id,
|
||||
storage_name: credentialData.storage_name,
|
||||
pbs_ip: credentialData.pbs_ip,
|
||||
pbs_datastore: credentialData.pbs_datastore,
|
||||
pbs_password: credentialData.pbs_password,
|
||||
pbs_fingerprint: credentialData.pbs_fingerprint,
|
||||
},
|
||||
});
|
||||
}
|
||||
|
||||
async getPBSCredential(serverId, storageName) {
|
||||
return await prisma.pBSStorageCredential.findUnique({
|
||||
where: {
|
||||
server_id_storage_name: {
|
||||
server_id: serverId,
|
||||
storage_name: storageName,
|
||||
},
|
||||
},
|
||||
});
|
||||
}
|
||||
|
||||
async getPBSCredentialsByServer(serverId) {
|
||||
return await prisma.pBSStorageCredential.findMany({
|
||||
where: { server_id: serverId },
|
||||
orderBy: { storage_name: 'asc' },
|
||||
});
|
||||
}
|
||||
|
||||
async deletePBSCredential(serverId, storageName) {
|
||||
return await prisma.pBSStorageCredential.delete({
|
||||
where: {
|
||||
server_id_storage_name: {
|
||||
server_id: serverId,
|
||||
storage_name: storageName,
|
||||
},
|
||||
},
|
||||
});
|
||||
}
|
||||
|
||||
async close() {
|
||||
await prisma.$disconnect();
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user