fix: user correct token to access repositories as admin

This commit is contained in:
tdurieux
2023-02-06 08:05:49 +01:00
parent 8f122a0399
commit 4634b8d2d1
3 changed files with 48 additions and 5 deletions

View File

@@ -60,6 +60,9 @@
>
<i class="fas fa-sync"></i> Retry
</a>
<a class="dropdown-item" href="/anonymize/{{job.id}}">
<i class="far fa-edit" aria-hidden="true"></i> Edit
</a>
</div>
</div>
</div>
@@ -131,6 +134,9 @@
>
<i class="fas fa-sync"></i> Retry
</a>
<a class="dropdown-item" href="/anonymize/{{job.id}}">
<i class="far fa-edit" aria-hidden="true"></i> Edit
</a>
</div>
</div>
</div>

View File

@@ -10,16 +10,38 @@ import AnonymizedRepositoryModel from "../database/anonymizedRepositories/anonym
import config from "../../config";
import { IAnonymizedRepositoryDocument } from "../database/anonymizedRepositories/anonymizedRepositories.types";
import Repository from "../Repository";
import UserModel from "../database/users/users.model";
import ConferenceModel from "../database/conference/conferences.model";
import AnonymousError from "../AnonymousError";
import { downloadQueue, removeQueue } from "../queue";
import RepositoryModel from "../database/repositories/repositories.model";
import User from "../User";
const router = express.Router();
// user needs to be connected for all user API
router.use(ensureAuthenticated);
async function getTokenForAdmin(user: User, req: express.Request) {
if (user.isAdmin) {
try {
const existingRepo = await AnonymizedRepositoryModel.findOne(
{
"source.repositoryName": `${req.params.owner}/${req.params.repo}`,
},
{
"source.accessToken": 1,
}
).exec();
if (existingRepo) {
return existingRepo.source.accessToken;
}
} catch (error) {
console.log(error);
}
}
}
// claim a repository
router.post("/claim", async (req: express.Request, res: express.Response) => {
const user = await getUser(req);
@@ -135,11 +157,15 @@ router.get(
"/:owner/:repo/",
async (req: express.Request, res: express.Response) => {
const user = await getUser(req);
let token = user.accessToken;
if (user.isAdmin) {
token = (await getTokenForAdmin(user, req)) || token;
}
try {
const repo = await getRepositoryFromGitHub({
owner: req.params.owner,
repo: req.params.repo,
accessToken: user.accessToken,
accessToken: token,
});
res.json(repo.toJSON());
} catch (error) {
@@ -152,15 +178,19 @@ router.get(
"/:owner/:repo/branches",
async (req: express.Request, res: express.Response) => {
const user = await getUser(req);
let token = user.accessToken;
if (user.isAdmin) {
token = (await getTokenForAdmin(user, req)) || token;
}
try {
const repository = await getRepositoryFromGitHub({
accessToken: user.accessToken,
accessToken: token,
owner: req.params.owner,
repo: req.params.repo,
});
return res.json(
await repository.branches({
accessToken: user.accessToken,
accessToken: token,
force: req.query.force == "1",
})
);
@@ -175,11 +205,15 @@ router.get(
async (req: express.Request, res: express.Response) => {
try {
const user = await getUser(req);
let token = user.accessToken;
if (user.isAdmin) {
token = (await getTokenForAdmin(user, req)) || token;
}
const repo = await getRepositoryFromGitHub({
owner: req.params.owner,
repo: req.params.repo,
accessToken: user.accessToken,
accessToken: token,
});
if (!repo) {
throw new AnonymousError("repo_not_found", {
@@ -189,7 +223,7 @@ router.get(
}
return res.send(
await repo.readme({
accessToken: user.accessToken,
accessToken: token,
force: req.query.force == "1",
branch: req.query.branch as string,
})

View File

@@ -152,6 +152,9 @@ export default class GitHubStream extends GitHubBase implements SourceBase {
},
depth = 0
) {
console.log(
`sha ${sha}, countFiles: ${count.file} countRequest: ${count.request}, parentPath: "${parentPath}"`
);
count.request++;
const data = await this.getGHTree(sha, { recursive: false });
this.tree2Tree(data.tree, truncatedTree, parentPath);