1
0
mirror of https://github.com/spacebarchat/server.git synced 2024-11-10 12:42:44 +01:00

General work on API

This commit is contained in:
Thesourtimes 2021-12-18 19:17:04 +03:00
parent 13eb680272
commit 442879e80a
11 changed files with 1916 additions and 391 deletions

View File

@ -1,4 +1,8 @@
MONGO_URL=mongodb://localhost/fosscord
PORT=3001
PRODUCTION=TRUE
THREADS=# automatically use all available cores, only available if production = true
THREADS=# automatically use all available cores, only available if production = true
#LOG_REQUESTS=
# only log 200 and 204: LOG_REQUESTS=200 204
# log everything except 200 and 204: LOG_REQUESTS=-200 204
# log all requests: LOG_REQUESTS=-

2180
api/package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@ -84,6 +84,7 @@
"missing-native-js-functions": "^1.2.18",
"morgan": "^1.10.0",
"multer": "^1.4.2",
"nanocolors": "^0.2.13",
"node-fetch": "^2.6.1",
"patch-package": "^6.4.7",
"proxy-agent": "^5.0.0",

View File

@ -26,5 +26,6 @@ DROP TABLE webhooks;
DROP TABLE channels;
DROP TABLE members;
DROP TABLE guilds;
DROP TABLE client_relase;
-- DROP TABLE users;
-- DROP TABLE config;

View File

@ -12,6 +12,7 @@ import { initTranslation } from "./middlewares/Translation";
import morgan from "morgan";
import { initInstance } from "./util/Instance";
import { registerRoutes } from "@fosscord/util";
import { red } from "nanocolors"
export interface FosscordServerOptions extends ServerOptions {}
@ -38,17 +39,6 @@ export class FosscordServer extends Server {
await initEvent();
await initInstance();
/*
DOCUMENTATION: uses LOG_REQUESTS environment variable
# only log 200 and 204
LOG_REQUESTS=200 204
# log everything except 200 and 204
LOG_REQUESTS=-200 204
# log all requests
LOG_REQUESTS=-
*/
let logRequests = process.env["LOG_REQUESTS"] != undefined;
if (logRequests) {
this.app.use(
@ -60,7 +50,7 @@ export class FosscordServer extends Server {
}
})
);
}
};
this.app.use(CORS);
this.app.use(BodyParser({ inflate: true, limit: "10mb" }));
@ -85,19 +75,20 @@ export class FosscordServer extends Server {
});
this.app = app;
//app.use("/__development", )
//app.use("/__internals", )
app.use("/api/v6", api);
app.use("/api/v7", api);
app.use("/api/v8", api);
app.use("/api/v9", api);
app.use("/api", api); // allow unversioned requests
this.app.use(ErrorHandler);
TestClient(this.app);
if (logRequests) {
console.log(
"Warning: Request logging is enabled! This will spam your console!\nTo disable this, unset the 'LOG_REQUESTS' environment variable!"
);
}
if (logRequests) console.log(red(`Warning: Request logging is enabled! This will spam your console!\nTo disable this, unset the 'LOG_REQUESTS' environment variable!`));
return super.start();
}
}
};

View File

@ -3,25 +3,27 @@ import { HTTPError } from "lambert-server";
import { checkToken, Config, Rights } from "@fosscord/util";
export const NO_AUTHORIZATION_ROUTES = [
//Authentication routes
// Authentication routes
"/auth/login",
"/auth/register",
"/auth/location-metadata",
//Routes with a seperate auth system
// Routes with a seperate auth system
"/webhooks/",
//Public information endpoints
// Public information endpoints
"/ping",
"/gateway",
"/experiments",
//Public kubernetes integration
"/updates",
"/downloads/",
// Public kubernetes integration
"/-/readyz",
"/-/healthz",
//Client nalytics
// Client analytics
"/science",
"/track",
//Public policy pages
// Public policy pages
"/policies/instance",
//Asset delivery
// Asset delivery
/\/guilds\/\d+\/widget\.(json|png)/
];

View File

@ -0,0 +1,19 @@
import { Router, Response, Request } from "express";
import { route } from "@fosscord/api";
import { Relase, Config } from "@fosscord/util";
const router = Router();
router.get("/:branch", route({}), async (req: Request, res: Response) => {
const { client } = Config.get();
const { branch } = req.params;
const { platform } = req.query;
if(!platform || !["linux", "osx", "win"].includes(platform.toString())) return res.status(404)
const relase = await Relase.findOneOrFail({ name: client.relases.upstreamVersion });
res.redirect(relase[`win_url`]);
});
export default router;

20
api/src/routes/updates.ts Normal file
View File

@ -0,0 +1,20 @@
import { Router, Response, Request } from "express";
import { route } from "@fosscord/api";
import { Config, Relase } from "@fosscord/util";
const router = Router();
router.get("/", route({}), async (req: Request, res: Response) => {
const { client } = Config.get();
const relase = await Relase.findOneOrFail({ name: client.relases.upstreamVersion})
res.json({
name: relase.name,
pub_date: relase.pub_date,
url: relase.url,
notes: relase.notes
});
});
export default router;

View File

@ -181,6 +181,10 @@ export interface ConfigValue {
},
client: {
useTestClient: Boolean;
relases: {
useLocalRelases: Boolean; //TODO
upstreamVersion: string;
}
},
metrics: {
timeout: number;
@ -365,7 +369,11 @@ export const DefaultConfigOptions: ConfigValue = {
allowRaws: false
},
client: {
useTestClient: true
useTestClient: true,
relases: {
useLocalRelases: true,
upstreamVersion: "0.0.264"
}
},
metrics: {
timeout: 30000

View File

@ -0,0 +1,26 @@
import { Column, Entity} from "typeorm";
import { BaseClass } from "./BaseClass";
@Entity("client_relase")
export class Relase extends BaseClass {
@Column()
name: string;
@Column()
pub_date: string;
@Column()
url: string;
@Column()
deb_url: string;
@Column()
osx_url: string;
@Column()
win_url: string;
@Column({ nullable: true })
notes?: string;
}

View File

@ -26,3 +26,4 @@ export * from "./Template";
export * from "./User";
export * from "./VoiceState";
export * from "./Webhook";
export * from "./clientRelase";