mirror of
https://github.com/freedbygrace/DynamoDNS.git
synced 2026-08-28 19:27:56 +00:00
Improve API token management by adding customer access control.
Replit-Commit-Author: Agent Replit-Commit-Session-Id: 9111ef36-26c8-4085-84ca-a35dc1fec1b5 Replit-Commit-Screenshot-Url: https://storage.googleapis.com/screenshot-production-us-central1/7083d608-d6d3-4a6a-9a27-6286c5109627/19261c9e-f1ea-40d4-82c2-25bd04d73b3c.jpg
This commit is contained in:
+41
-2
@@ -264,7 +264,6 @@ export class MemStorage implements IStorage {
|
|||||||
email: user.email,
|
email: user.email,
|
||||||
fullName: user.fullName || null,
|
fullName: user.fullName || null,
|
||||||
role: user.role || 'user',
|
role: user.role || 'user',
|
||||||
organizationId: user.organizationId || null,
|
|
||||||
createdAt
|
createdAt
|
||||||
};
|
};
|
||||||
this.usersMap.set(numId, newUser);
|
this.usersMap.set(numId, newUser);
|
||||||
@@ -625,7 +624,47 @@ export class MemStorage implements IStorage {
|
|||||||
}
|
}
|
||||||
|
|
||||||
async deleteApiToken(id: string): Promise<boolean> {
|
async deleteApiToken(id: string): Promise<boolean> {
|
||||||
return this.apiTokensMap.delete(parseInt(id));
|
// First, remove all customer access entries for this token
|
||||||
|
const numId = parseInt(id);
|
||||||
|
const accessEntries = Array.from(this.apiTokenCustomerAccessMap.values())
|
||||||
|
.filter(access => access.tokenId === id);
|
||||||
|
|
||||||
|
for (const access of accessEntries) {
|
||||||
|
this.apiTokenCustomerAccessMap.delete(parseInt(access.id));
|
||||||
|
}
|
||||||
|
|
||||||
|
// Then delete the token itself
|
||||||
|
return this.apiTokensMap.delete(numId);
|
||||||
|
}
|
||||||
|
|
||||||
|
// API token customer access management
|
||||||
|
async getApiTokenCustomerAccess(tokenId: string): Promise<ApiTokenCustomerAccess[]> {
|
||||||
|
return Array.from(this.apiTokenCustomerAccessMap.values())
|
||||||
|
.filter(access => access.tokenId === tokenId);
|
||||||
|
}
|
||||||
|
|
||||||
|
async addApiTokenCustomerAccess(access: InsertApiTokenCustomerAccess): Promise<ApiTokenCustomerAccess> {
|
||||||
|
const numId = this.apiTokenCustomerAccessIdCounter++;
|
||||||
|
const createdAt = new Date();
|
||||||
|
|
||||||
|
const newAccess: ApiTokenCustomerAccess = {
|
||||||
|
id: numId.toString(),
|
||||||
|
tokenId: access.tokenId,
|
||||||
|
customerId: access.customerId,
|
||||||
|
createdAt
|
||||||
|
};
|
||||||
|
|
||||||
|
this.apiTokenCustomerAccessMap.set(numId, newAccess);
|
||||||
|
return newAccess;
|
||||||
|
}
|
||||||
|
|
||||||
|
async removeApiTokenCustomerAccess(tokenId: string, customerId: string): Promise<boolean> {
|
||||||
|
const access = Array.from(this.apiTokenCustomerAccessMap.values())
|
||||||
|
.find(a => a.tokenId === tokenId && a.customerId === customerId);
|
||||||
|
|
||||||
|
if (!access) return false;
|
||||||
|
|
||||||
|
return this.apiTokenCustomerAccessMap.delete(parseInt(access.id));
|
||||||
}
|
}
|
||||||
|
|
||||||
// DNS History
|
// DNS History
|
||||||
|
|||||||
Reference in New Issue
Block a user