mirror of
https://github.com/tdurieux/anonymous_github.git
synced 2026-09-16 07:35:27 +02:00
fix: authorize access before returning cached GitHub metadata
This commit is contained in:
@@ -259,9 +259,6 @@ export async function getRepositoryFromGitHub(opt: {
|
|||||||
})
|
})
|
||||||
: null;
|
: null;
|
||||||
}
|
}
|
||||||
if (dbModel && !opt.force) {
|
|
||||||
return new GitHubRepository(dbModel);
|
|
||||||
}
|
|
||||||
const oct = octokit(opt.accessToken);
|
const oct = octokit(opt.accessToken);
|
||||||
let r: RestEndpointMethodTypes["repos"]["get"]["response"]["data"];
|
let r: RestEndpointMethodTypes["repos"]["get"]["response"]["data"];
|
||||||
// Recover the numeric GitHub repository id from `externalId` (stored as
|
// Recover the numeric GitHub repository id from `externalId` (stored as
|
||||||
@@ -372,6 +369,9 @@ export async function getRepositoryFromGitHub(opt: {
|
|||||||
repo: opt.repo,
|
repo: opt.repo,
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
// Cached private data is usable only after this token passed repos.get.
|
||||||
|
if (dbModel && !opt.force) return new GitHubRepository(dbModel);
|
||||||
|
|
||||||
let pageSource:
|
let pageSource:
|
||||||
| RestEndpointMethodTypes["repos"]["getPages"]["response"]["data"]["source"]
|
| RestEndpointMethodTypes["repos"]["getPages"]["response"]["data"]["source"]
|
||||||
| undefined;
|
| undefined;
|
||||||
|
|||||||
@@ -65,6 +65,16 @@ describe("production regressions", function () {
|
|||||||
const error = await new Promise(resolve => passport._strategy("github")._verify("token", "", { id: "new-id", username: "recycled" }, resolve));
|
const error = await new Promise(resolve => passport._strategy("github")._verify("token", "", { id: "new-id", username: "recycled" }, resolve));
|
||||||
expect(error.message).to.equal("not_connected");
|
expect(error.message).to.equal("not_connected");
|
||||||
});
|
});
|
||||||
|
it("checks GitHub authorization before returning shared cached metadata", async function () {
|
||||||
|
const CachedRepoModel = require("../src/core/model/repositories/repositories.model").default;
|
||||||
|
stub(db, "isConnected", true);
|
||||||
|
stub(CachedRepoModel, "findOne", async () => ({ name: "owner/private", branches: [{ readme: "secret" }] }));
|
||||||
|
stub(gh, "octokit", () => ({ repos: { get: async () => { throw Object.assign(new Error("Forbidden"), { status: 403 }); } } }));
|
||||||
|
try {
|
||||||
|
await require("../src/core/source/GitHubRepository").getRepositoryFromGitHub({ owner: "owner", repo: "private", accessToken: "unauthorized" });
|
||||||
|
throw new Error("expected rejection");
|
||||||
|
} catch (error) { expect(error.message).to.equal("token_expired"); }
|
||||||
|
});
|
||||||
it("omits an upstream length when later text is rewritten", async function () {
|
it("omits an upstream length when later text is rewritten", async function () {
|
||||||
const File = require("../src/core/AnonymizedFile").default;
|
const File = require("../src/core/AnonymizedFile").default;
|
||||||
stub(config, "STREAMER_ENTRYPOINT", "");
|
stub(config, "STREAMER_ENTRYPOINT", "");
|
||||||
|
|||||||
Reference in New Issue
Block a user