From 61c6a79949a13e7e4cef35dbe835dc6a4903e9d0 Mon Sep 17 00:00:00 2001 From: tdurieux Date: Thu, 11 Apr 2024 15:25:45 +0100 Subject: [PATCH] feat: check repo status before update --- src/core/Repository.ts | 16 ++++++++++++++++ src/server/routes/repository-public.ts | 10 +++++----- src/server/routes/route-utils.ts | 3 ++- 3 files changed, 23 insertions(+), 6 deletions(-) diff --git a/src/core/Repository.ts b/src/core/Repository.ts index 693fbbc..3c668ed 100644 --- a/src/core/Repository.ts +++ b/src/core/Repository.ts @@ -181,6 +181,7 @@ export default class Repository { this._model.options.expirationDate ) { if (this._model.options.expirationDate <= new Date()) { + this._model.status = RepositoryStatus.EXPIRED; this.expire(); } } @@ -261,6 +262,21 @@ export default class Repository { .getTracer("ano-file") .startSpan("Repository.updateIfNeeded"); span.setAttribute("repoId", this.repoId); + + if ( + this._model.options.expirationMode !== "never" && + this.status != RepositoryStatus.EXPIRED && + this._model.options.expirationDate + ) { + if (this._model.options.expirationDate <= new Date()) { + this._model.status = RepositoryStatus.EXPIRED; + await this.expire(); + throw new AnonymousError("repository_expired", { + object: this, + httpStatus: 410, + }); + } + } const yesterday = new Date(); yesterday.setDate(yesterday.getDate() - 1); if ( diff --git a/src/server/routes/repository-public.ts b/src/server/routes/repository-public.ts index ff1b698..d7668e2 100644 --- a/src/server/routes/repository-public.ts +++ b/src/server/routes/repository-public.ts @@ -85,17 +85,17 @@ router.get( if (!repo) return; let redirectURL = null; if ( - repo.status == "expired" && + repo.status == RepositoryStatus.EXPIRED && repo.options.expirationMode == "redirect" && repo.model.source.repositoryName ) { redirectURL = `https://github.com/${repo.model.source.repositoryName}`; } else { if ( - repo.status == "expired" || - repo.status == "expiring" || - repo.status == "removing" || - repo.status == "removed" + repo.status == RepositoryStatus.EXPIRED || + repo.status == RepositoryStatus.EXPIRING || + repo.status == RepositoryStatus.REMOVING || + repo.status == RepositoryStatus.REMOVED ) { throw new AnonymousError("repository_expired", { object: repo, diff --git a/src/server/routes/route-utils.ts b/src/server/routes/route-utils.ts index 407055d..d70bb71 100644 --- a/src/server/routes/route-utils.ts +++ b/src/server/routes/route-utils.ts @@ -4,6 +4,7 @@ import * as db from "../database"; import UserModel from "../../core/model/users/users.model"; import User from "../../core/User"; import { HTTPError } from "got"; +import { RepositoryStatus } from "../../core/types"; export async function getPullRequest( req: express.Request, @@ -50,7 +51,7 @@ export async function getRepo( } else { // redirect if the repository is expired if ( - repo.status == "expired" && + repo.status == RepositoryStatus.EXPIRED && repo.options.expirationMode == "redirect" && repo.model.source.repositoryId ) {