mirror of
https://github.com/tdurieux/anonymous_github.git
synced 2026-07-06 13:47:59 +02:00
fix: user correct token to access repositories as admin
This commit is contained in:
@@ -60,6 +60,9 @@
|
|||||||
>
|
>
|
||||||
<i class="fas fa-sync"></i> Retry
|
<i class="fas fa-sync"></i> Retry
|
||||||
</a>
|
</a>
|
||||||
|
<a class="dropdown-item" href="/anonymize/{{job.id}}">
|
||||||
|
<i class="far fa-edit" aria-hidden="true"></i> Edit
|
||||||
|
</a>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -131,6 +134,9 @@
|
|||||||
>
|
>
|
||||||
<i class="fas fa-sync"></i> Retry
|
<i class="fas fa-sync"></i> Retry
|
||||||
</a>
|
</a>
|
||||||
|
<a class="dropdown-item" href="/anonymize/{{job.id}}">
|
||||||
|
<i class="far fa-edit" aria-hidden="true"></i> Edit
|
||||||
|
</a>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -10,16 +10,38 @@ import AnonymizedRepositoryModel from "../database/anonymizedRepositories/anonym
|
|||||||
import config from "../../config";
|
import config from "../../config";
|
||||||
import { IAnonymizedRepositoryDocument } from "../database/anonymizedRepositories/anonymizedRepositories.types";
|
import { IAnonymizedRepositoryDocument } from "../database/anonymizedRepositories/anonymizedRepositories.types";
|
||||||
import Repository from "../Repository";
|
import Repository from "../Repository";
|
||||||
|
import UserModel from "../database/users/users.model";
|
||||||
import ConferenceModel from "../database/conference/conferences.model";
|
import ConferenceModel from "../database/conference/conferences.model";
|
||||||
import AnonymousError from "../AnonymousError";
|
import AnonymousError from "../AnonymousError";
|
||||||
import { downloadQueue, removeQueue } from "../queue";
|
import { downloadQueue, removeQueue } from "../queue";
|
||||||
import RepositoryModel from "../database/repositories/repositories.model";
|
import RepositoryModel from "../database/repositories/repositories.model";
|
||||||
|
import User from "../User";
|
||||||
|
|
||||||
const router = express.Router();
|
const router = express.Router();
|
||||||
|
|
||||||
// user needs to be connected for all user API
|
// user needs to be connected for all user API
|
||||||
router.use(ensureAuthenticated);
|
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
|
// claim a repository
|
||||||
router.post("/claim", async (req: express.Request, res: express.Response) => {
|
router.post("/claim", async (req: express.Request, res: express.Response) => {
|
||||||
const user = await getUser(req);
|
const user = await getUser(req);
|
||||||
@@ -135,11 +157,15 @@ router.get(
|
|||||||
"/:owner/:repo/",
|
"/:owner/:repo/",
|
||||||
async (req: express.Request, res: express.Response) => {
|
async (req: express.Request, res: express.Response) => {
|
||||||
const user = await getUser(req);
|
const user = await getUser(req);
|
||||||
|
let token = user.accessToken;
|
||||||
|
if (user.isAdmin) {
|
||||||
|
token = (await getTokenForAdmin(user, req)) || token;
|
||||||
|
}
|
||||||
try {
|
try {
|
||||||
const repo = await getRepositoryFromGitHub({
|
const repo = await getRepositoryFromGitHub({
|
||||||
owner: req.params.owner,
|
owner: req.params.owner,
|
||||||
repo: req.params.repo,
|
repo: req.params.repo,
|
||||||
accessToken: user.accessToken,
|
accessToken: token,
|
||||||
});
|
});
|
||||||
res.json(repo.toJSON());
|
res.json(repo.toJSON());
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
@@ -152,15 +178,19 @@ router.get(
|
|||||||
"/:owner/:repo/branches",
|
"/:owner/:repo/branches",
|
||||||
async (req: express.Request, res: express.Response) => {
|
async (req: express.Request, res: express.Response) => {
|
||||||
const user = await getUser(req);
|
const user = await getUser(req);
|
||||||
|
let token = user.accessToken;
|
||||||
|
if (user.isAdmin) {
|
||||||
|
token = (await getTokenForAdmin(user, req)) || token;
|
||||||
|
}
|
||||||
try {
|
try {
|
||||||
const repository = await getRepositoryFromGitHub({
|
const repository = await getRepositoryFromGitHub({
|
||||||
accessToken: user.accessToken,
|
accessToken: token,
|
||||||
owner: req.params.owner,
|
owner: req.params.owner,
|
||||||
repo: req.params.repo,
|
repo: req.params.repo,
|
||||||
});
|
});
|
||||||
return res.json(
|
return res.json(
|
||||||
await repository.branches({
|
await repository.branches({
|
||||||
accessToken: user.accessToken,
|
accessToken: token,
|
||||||
force: req.query.force == "1",
|
force: req.query.force == "1",
|
||||||
})
|
})
|
||||||
);
|
);
|
||||||
@@ -175,11 +205,15 @@ router.get(
|
|||||||
async (req: express.Request, res: express.Response) => {
|
async (req: express.Request, res: express.Response) => {
|
||||||
try {
|
try {
|
||||||
const user = await getUser(req);
|
const user = await getUser(req);
|
||||||
|
let token = user.accessToken;
|
||||||
|
if (user.isAdmin) {
|
||||||
|
token = (await getTokenForAdmin(user, req)) || token;
|
||||||
|
}
|
||||||
|
|
||||||
const repo = await getRepositoryFromGitHub({
|
const repo = await getRepositoryFromGitHub({
|
||||||
owner: req.params.owner,
|
owner: req.params.owner,
|
||||||
repo: req.params.repo,
|
repo: req.params.repo,
|
||||||
accessToken: user.accessToken,
|
accessToken: token,
|
||||||
});
|
});
|
||||||
if (!repo) {
|
if (!repo) {
|
||||||
throw new AnonymousError("repo_not_found", {
|
throw new AnonymousError("repo_not_found", {
|
||||||
@@ -189,7 +223,7 @@ router.get(
|
|||||||
}
|
}
|
||||||
return res.send(
|
return res.send(
|
||||||
await repo.readme({
|
await repo.readme({
|
||||||
accessToken: user.accessToken,
|
accessToken: token,
|
||||||
force: req.query.force == "1",
|
force: req.query.force == "1",
|
||||||
branch: req.query.branch as string,
|
branch: req.query.branch as string,
|
||||||
})
|
})
|
||||||
|
|||||||
@@ -152,6 +152,9 @@ export default class GitHubStream extends GitHubBase implements SourceBase {
|
|||||||
},
|
},
|
||||||
depth = 0
|
depth = 0
|
||||||
) {
|
) {
|
||||||
|
console.log(
|
||||||
|
`sha ${sha}, countFiles: ${count.file} countRequest: ${count.request}, parentPath: "${parentPath}"`
|
||||||
|
);
|
||||||
count.request++;
|
count.request++;
|
||||||
const data = await this.getGHTree(sha, { recursive: false });
|
const data = await this.getGHTree(sha, { recursive: false });
|
||||||
this.tree2Tree(data.tree, truncatedTree, parentPath);
|
this.tree2Tree(data.tree, truncatedTree, parentPath);
|
||||||
|
|||||||
Reference in New Issue
Block a user