forgejo-oauth-app/util/credential-manager.ts
2025-04-10 21:36:48 +09:00

53 lines
1.7 KiB
TypeScript

import { Entry } from "npm:@napi-rs/keyring";
export class CredentialManager {
constructor(
private credentialsFile: string,
private tokenName: string
) {}
async storeCredentials(username: string, token: string): Promise<void> {
// Store username
await Deno.writeTextFile(this.credentialsFile, username);
// Store token in keyring
const entry = new Entry(this.tokenName, username);
if (entry.getPassword()) {
entry.deletePassword();
}
entry.setPassword(token);
}
async getCredentials(): Promise<{ username: string, token: string } | undefined> {
try {
const username = await Deno.readTextFile(this.credentialsFile);
const entry = new Entry(this.tokenName, username);
const token = entry.getPassword();
if (!token) {
console.error("No token found in keyring. Please login first.");
return undefined;
}
return { username, token };
} catch (error) {
console.error("No credentials found. Please login first.");
return undefined;
}
}
async clearCredentials(username: string): Promise<void> {
// Remove username file
try {
await Deno.remove(this.credentialsFile);
} catch (error) {
console.error("Failed to remove credentials file:", error);
}
// Remove token from keyring
const entry = new Entry(this.tokenName, username);
if (entry.getPassword()) {
entry.deletePassword();
}
}
}