mirror of
https://github.com/tdurieux/anonymous_github.git
synced 2026-05-16 06:49:09 +02:00
fix: improve token management
This commit is contained in:
+53
-20
@@ -29,35 +29,68 @@ export async function getToken(repository: Repository) {
|
||||
span.setAttribute("repoId", repository.repoId);
|
||||
try {
|
||||
// only check the token if the repo has been visited more than one day ago
|
||||
if (
|
||||
repository.model.source.accessToken &&
|
||||
repository.model.lastView > new Date(Date.now() - 1000 * 60 * 60 * 24)
|
||||
) {
|
||||
return repository.model.source.accessToken;
|
||||
}
|
||||
// if (
|
||||
// repository.model.source.accessToken &&
|
||||
// repository.model.lastView > new Date(Date.now() - 1000 * 60 * 60 * 24)
|
||||
// ) {
|
||||
// return repository.model.source.accessToken;
|
||||
// }
|
||||
if (repository.model.source.accessToken) {
|
||||
if (await checkToken(repository.model.source.accessToken)) {
|
||||
return repository.model.source.accessToken;
|
||||
}
|
||||
}
|
||||
if (!repository.owner.model.accessTokens?.github) {
|
||||
const accessTokens = (
|
||||
await UserModel.findById(repository.owner.id, {
|
||||
accessTokens: 1,
|
||||
})
|
||||
)?.accessTokens;
|
||||
if (accessTokens) {
|
||||
repository.owner.model.accessTokens = accessTokens;
|
||||
const query = await UserModel.findById(repository.owner.id, {
|
||||
accessTokens: 1,
|
||||
accessTokenDates: 1,
|
||||
});
|
||||
if (query?.accessTokens) {
|
||||
repository.owner.model.accessTokens = query.accessTokens;
|
||||
repository.owner.model.accessTokenDates = query.accessTokenDates;
|
||||
}
|
||||
}
|
||||
if (repository.owner.model.accessTokens?.github) {
|
||||
const check = await checkToken(
|
||||
repository.owner.model.accessTokens?.github
|
||||
);
|
||||
const ownerAccessToken = repository.owner.model.accessTokens?.github;
|
||||
if (ownerAccessToken) {
|
||||
const tokenAge = repository.owner.model.accessTokenDates?.github;
|
||||
if (!tokenAge || tokenAge < new Date(Date.now() - 1000 * 60 * 60 * 24)) {
|
||||
const url = `https://api.github.com/applications/${config.CLIENT_ID}/token`;
|
||||
const headers = {
|
||||
Accept: "application/vnd.github+json",
|
||||
"X-GitHub-Api-Version": "2022-11-28",
|
||||
};
|
||||
|
||||
const res = await fetch(url, {
|
||||
method: "PATCH",
|
||||
body: JSON.stringify({
|
||||
access_token: ownerAccessToken,
|
||||
}),
|
||||
credentials: "include",
|
||||
headers: {
|
||||
...headers,
|
||||
Authorization:
|
||||
"Basic " +
|
||||
Buffer.from(
|
||||
config.CLIENT_ID + ":" + config.CLIENT_SECRET
|
||||
).toString("base64"),
|
||||
},
|
||||
});
|
||||
const resBody = (await res.json()) as { token: string };
|
||||
repository.owner.model.accessTokens.github = resBody.token;
|
||||
if (!repository.owner.model.accessTokenDates) {
|
||||
repository.owner.model.accessTokenDates = {
|
||||
github: new Date(),
|
||||
};
|
||||
} else {
|
||||
repository.owner.model.accessTokenDates.github = new Date();
|
||||
}
|
||||
await repository.owner.model.save();
|
||||
return resBody.token;
|
||||
}
|
||||
const check = await checkToken(ownerAccessToken);
|
||||
if (check) {
|
||||
repository.model.source.accessToken =
|
||||
repository.owner.model.accessTokens?.github;
|
||||
return repository.owner.model.accessTokens?.github;
|
||||
repository.model.source.accessToken = ownerAccessToken;
|
||||
return ownerAccessToken;
|
||||
}
|
||||
}
|
||||
return config.GITHUB_TOKEN;
|
||||
|
||||
@@ -518,7 +518,11 @@ export default class Repository {
|
||||
await storage.rm(this.repoId);
|
||||
this.model.isReseted = true;
|
||||
if (isConnected) {
|
||||
await this.model.save();
|
||||
try {
|
||||
await this.model.save();
|
||||
} catch (error) {
|
||||
console.error("[ERROR] removeCache save", error);
|
||||
}
|
||||
}
|
||||
} finally {
|
||||
span.end();
|
||||
@@ -542,7 +546,7 @@ export default class Repository {
|
||||
}> {
|
||||
const span = trace
|
||||
.getTracer("ano-file")
|
||||
.startSpan("Repository.removeCache");
|
||||
.startSpan("Repository.computeSize");
|
||||
span.setAttribute("repoId", this.repoId);
|
||||
try {
|
||||
if (this.status !== RepositoryStatus.READY)
|
||||
|
||||
@@ -4,6 +4,9 @@ const UserSchema = new Schema({
|
||||
accessTokens: {
|
||||
github: { type: String },
|
||||
},
|
||||
accessTokenDates: {
|
||||
github: { type: Date },
|
||||
},
|
||||
externalIDs: {
|
||||
github: { type: String, index: true },
|
||||
},
|
||||
|
||||
@@ -4,6 +4,9 @@ export interface IUser {
|
||||
accessTokens: {
|
||||
github: string;
|
||||
};
|
||||
accessTokenDates?: {
|
||||
github: Date;
|
||||
};
|
||||
externalIDs: {
|
||||
github: string;
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user