mirror of
https://github.com/tdurieux/anonymous_github.git
synced 2026-07-03 04:16:01 +02:00
continue v2
This commit is contained in:
@@ -1,6 +1,8 @@
|
|||||||
.env
|
.env
|
||||||
repositories/
|
repositories/
|
||||||
repo/
|
repo/
|
||||||
|
db_backups
|
||||||
|
message.txt
|
||||||
# Created by https://www.gitignore.io/api/node
|
# Created by https://www.gitignore.io/api/node
|
||||||
# Edit at https://www.gitignore.io/?templates=node
|
# Edit at https://www.gitignore.io/?templates=node
|
||||||
|
|
||||||
|
|||||||
@@ -66,11 +66,14 @@ GITHUB_TOKEN=<GITHUB_TOKEN>
|
|||||||
CLIENT_ID=<CLIENT_ID>
|
CLIENT_ID=<CLIENT_ID>
|
||||||
CLIENT_SECRET=<CLIENT_SECRET>
|
CLIENT_SECRET=<CLIENT_SECRET>
|
||||||
PORT=5000
|
PORT=5000
|
||||||
|
DB_USERNAME=
|
||||||
|
DB_PASSWORD=
|
||||||
|
AUTH_CALLBACK=http://localhost:5000/github/auth,
|
||||||
```
|
```
|
||||||
|
|
||||||
`GITHUB_TOKEN` can be generate here: https://github.com/settings/tokens/new with `repo` scope.
|
`GITHUB_TOKEN` can be generate here: https://github.com/settings/tokens/new with `repo` scope.
|
||||||
`CLIENT_ID` and `CLIENT_SECRET` are the tokens are generated when you create a new GitHub app https://github.com/settings/applications/new.
|
`CLIENT_ID` and `CLIENT_SECRET` are the tokens are generated when you create a new GitHub app https://github.com/settings/applications/new.
|
||||||
The callback of the GitHub app needs to be defined as `https://<host>/github/auth`.
|
The callback of the GitHub app needs to be defined as `https://<host>/github/auth` (the same as defined in AUTH_CALLBACK).
|
||||||
|
|
||||||
3. Run Anonymous Github
|
3. Run Anonymous Github
|
||||||
```bash
|
```bash
|
||||||
|
|||||||
+18
-2
@@ -27,8 +27,8 @@ services:
|
|||||||
ports:
|
ports:
|
||||||
- "27017:27017"
|
- "27017:27017"
|
||||||
environment:
|
environment:
|
||||||
MONGO_INITDB_ROOT_USERNAME: root
|
MONGO_INITDB_ROOT_USERNAME: $DB_USERNAME
|
||||||
MONGO_INITDB_ROOT_PASSWORD: rootpassword
|
MONGO_INITDB_ROOT_PASSWORD: $DB_PASSWORD
|
||||||
volumes:
|
volumes:
|
||||||
- mongodb_data_container:/data/db
|
- mongodb_data_container:/data/db
|
||||||
command: --quiet
|
command: --quiet
|
||||||
@@ -42,5 +42,21 @@ services:
|
|||||||
timeout: 10s
|
timeout: 10s
|
||||||
retries: 5
|
retries: 5
|
||||||
|
|
||||||
|
mongodb-backup:
|
||||||
|
image: tiredofit/db-backup
|
||||||
|
links:
|
||||||
|
- mongodb
|
||||||
|
volumes:
|
||||||
|
- ./db_backups:/backup
|
||||||
|
environment:
|
||||||
|
- DB_TYPE=mongo
|
||||||
|
- DB_HOST=mongodb
|
||||||
|
- DB_DUMP_FREQ=60
|
||||||
|
- DB_CLEANUP_TIME=240
|
||||||
|
- COMPRESSION=XZ
|
||||||
|
- DB_USER=$DB_USERNAME
|
||||||
|
- DB_PASS=$DB_PASSWORD
|
||||||
|
|
||||||
|
restart: always
|
||||||
volumes:
|
volumes:
|
||||||
mongodb_data_container:
|
mongodb_data_container:
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
const path = require("path");
|
const path = require("path");
|
||||||
|
const ofs = require("fs");
|
||||||
|
const fs = require("fs").promises;
|
||||||
const redis = require("redis");
|
const redis = require("redis");
|
||||||
const RateLimit = require("express-rate-limit");
|
const RateLimit = require("express-rate-limit");
|
||||||
const RedisStore = require("rate-limit-redis");
|
const RedisStore = require("rate-limit-redis");
|
||||||
@@ -22,16 +23,6 @@ const PORT = process.env.PORT || 5000;
|
|||||||
const app = express();
|
const app = express();
|
||||||
app.use(bodyParser.json());
|
app.use(bodyParser.json());
|
||||||
app.use(compression());
|
app.use(compression());
|
||||||
app.use(
|
|
||||||
new RateLimit({
|
|
||||||
store: new RedisStore({
|
|
||||||
client: rediscli,
|
|
||||||
}),
|
|
||||||
windowMs: 15 * 60 * 1000, // 15 minutes
|
|
||||||
max: 200, // limit each IP to 100 requests per windowMs
|
|
||||||
// delayMs: 0, // disable delaying - full speed until the max limit is reached
|
|
||||||
})
|
|
||||||
);
|
|
||||||
app.set("trust proxy", 1);
|
app.set("trust proxy", 1);
|
||||||
|
|
||||||
// handle session and connection
|
// handle session and connection
|
||||||
@@ -39,15 +30,24 @@ app.use(connection.session);
|
|||||||
app.use(connection.passport.initialize());
|
app.use(connection.passport.initialize());
|
||||||
app.use(connection.passport.session());
|
app.use(connection.passport.session());
|
||||||
|
|
||||||
app.use("/github", connection.router);
|
const rateLimit = new RateLimit({
|
||||||
|
store: new RedisStore({
|
||||||
|
client: rediscli,
|
||||||
|
}),
|
||||||
|
windowMs: 15 * 60 * 1000, // 15 minutes
|
||||||
|
max: 200, // limit each IP to 100 requests per windowMs
|
||||||
|
// delayMs: 0, // disable delaying - full speed until the max limit is reached
|
||||||
|
});
|
||||||
|
|
||||||
|
app.use("/github", rateLimit, connection.router);
|
||||||
|
|
||||||
// app routes
|
// app routes
|
||||||
app.use("/api/user", require("./routes/user"));
|
app.use("/api/user", rateLimit, require("./routes/user"));
|
||||||
app.use("/api/repo", require("./routes/file"));
|
app.use("/api/repo", rateLimit, require("./routes/file"));
|
||||||
app.use("/api/repo", require("./routes/repositoy"));
|
app.use("/api/repo", rateLimit, require("./routes/repositoy"));
|
||||||
|
|
||||||
// wesite view
|
// wesite view
|
||||||
app.use("/w/", require("./routes/webview"));
|
app.use("/w/", rateLimit, require("./routes/webview"));
|
||||||
|
|
||||||
app.use(express.static(__dirname + "/public"));
|
app.use(express.static(__dirname + "/public"));
|
||||||
|
|
||||||
@@ -62,7 +62,7 @@ function exploreAppResponse(req, res) {
|
|||||||
res.sendFile(path.resolve(__dirname, "public", "explore.html"));
|
res.sendFile(path.resolve(__dirname, "public", "explore.html"));
|
||||||
}
|
}
|
||||||
|
|
||||||
app.get("/api/supportedTypes", async (req, res) => {
|
app.get("/api/supportedTypes", async (_, res) => {
|
||||||
res.json(
|
res.json(
|
||||||
require("textextensions")
|
require("textextensions")
|
||||||
.default.concat(fileUtils.additionalExtensions)
|
.default.concat(fileUtils.additionalExtensions)
|
||||||
@@ -70,7 +70,14 @@ app.get("/api/supportedTypes", async (req, res) => {
|
|||||||
);
|
);
|
||||||
});
|
});
|
||||||
|
|
||||||
app.get("/api/stat", async (req, res) => {
|
app.get("/api/message", async (_, res) => {
|
||||||
|
if (ofs.existsSync("./message.txt")) {
|
||||||
|
return res.sendFile(path.resolve(__dirname, "message.txt"));
|
||||||
|
}
|
||||||
|
res.sendStatus(404);
|
||||||
|
});
|
||||||
|
|
||||||
|
app.get("/api/stat", async (_, res) => {
|
||||||
const nbRepositories = await db
|
const nbRepositories = await db
|
||||||
.get("anonymized_repositories")
|
.get("anonymized_repositories")
|
||||||
.estimatedDocumentCount();
|
.estimatedDocumentCount();
|
||||||
|
|||||||
@@ -41,10 +41,6 @@ router.get("/anonymized_repositories", async (req, res) => {
|
|||||||
repo.options.expirationDate != null &&
|
repo.options.expirationDate != null &&
|
||||||
repo.options.expirationDate < new Date()
|
repo.options.expirationDate < new Date()
|
||||||
) {
|
) {
|
||||||
console.log(
|
|
||||||
repo.options.expirationDate,
|
|
||||||
repo.options.expirationDate < new Date()
|
|
||||||
);
|
|
||||||
await repoUtils.updateStatus({ repoId: repo.repoId }, "expired");
|
await repoUtils.updateStatus({ repoId: repo.repoId }, "expired");
|
||||||
repo.status = "expired";
|
repo.status = "expired";
|
||||||
} else {
|
} else {
|
||||||
|
|||||||
@@ -202,7 +202,6 @@ module.exports.getRepoCommit = async (options) => {
|
|||||||
force: options.force,
|
force: options.force,
|
||||||
});
|
});
|
||||||
if (!branches[repoConfig.branch]) {
|
if (!branches[repoConfig.branch]) {
|
||||||
console.log(branches, repoConfig.branch);
|
|
||||||
throw "branch_not_found";
|
throw "branch_not_found";
|
||||||
}
|
}
|
||||||
return branches[repoConfig.branch].commit.sha;
|
return branches[repoConfig.branch].commit.sha;
|
||||||
|
|||||||
Reference in New Issue
Block a user