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

🎨 reformat files

This commit is contained in:
Flam3rboy 2021-09-02 20:10:25 +02:00
parent 8ff56b1f9e
commit 8092216343
8 changed files with 71 additions and 51 deletions

View File

@ -1,9 +1,9 @@
import WebSocket from "../util/WebSocket";
import { Message } from "./Message";
import {Session} from "@fosscord/util";
import { Session } from "@fosscord/util";
export async function Close(this: WebSocket, code: number, reason: string) {
await Session.delete({session_id: this.session_id})
await Session.delete({ session_id: this.session_id });
// @ts-ignore
this.off("message", Message);
}

View File

@ -7,7 +7,7 @@ import { Send } from "../util/Send";
import { CLOSECODES, OPCODES } from "../util/Constants";
import { createDeflate } from "zlib";
import { URL } from "url";
import {Session} from "@fosscord/util";
import { Session } from "@fosscord/util";
var erlpack: any;
try {
erlpack = require("erlpack");
@ -57,12 +57,12 @@ export async function Connection(this: Server, socket: WebSocket, request: Incom
});
socket.readyTimeout = setTimeout(() => {
Session.delete({session_id: socket.session_id}) //should we await?
Session.delete({ session_id: socket.session_id }); //should we await?
return socket.close(CLOSECODES.Session_timed_out);
}, 1000 * 30);
} catch (error) {
console.error(error);
Session.delete({session_id: socket.session_id}) //should we await?
Session.delete({ session_id: socket.session_id }); //should we await?
return socket.close(CLOSECODES.Unknown_error);
}
}

View File

@ -80,11 +80,12 @@ export async function onIdentify(this: WebSocket, data: Payload) {
user_id: this.user_id,
session_id: session_id,
status: "online", //does the session always start as online?
client_info: { //TODO read from identity
client_info: {
//TODO read from identity
client: "desktop",
os: "linux",
version: 0
}
version: 0,
},
});
//We save the session and we delete it when the websocket is closed

View File

@ -11,16 +11,20 @@ export async function onVoiceStateUpdate(this: WebSocket, data: Payload) {
check.call(this, VoiceStateUpdateSchema, data.d);
const body = data.d as VoiceStateUpdateSchema;
let voiceState
let voiceState;
try {
voiceState = await VoiceState.findOneOrFail({where:{ user_id: this.user_id },relations: ["member", "member.user", "member.roles"]});
if(voiceState.session_id !== this.session_id && body.channel_id === null) { //Should we also check guild_id === null?
voiceState = await VoiceState.findOneOrFail({
where: { user_id: this.user_id },
relations: ["member", "member.user", "member.roles"],
});
if (voiceState.session_id !== this.session_id && body.channel_id === null) {
//Should we also check guild_id === null?
//changing deaf or mute on a client that's not the one with the same session of the voicestate in the database should be ignored
return
return;
}
//The event send by Discord's client on channel leave has both guild_id and channel_id as null
if(body.guild_id === null) body.guild_id = voiceState.guild_id;
if (body.guild_id === null) body.guild_id = voiceState.guild_id;
voiceState.assign(body);
} catch (error) {
voiceState = new VoiceState({
@ -28,32 +32,39 @@ export async function onVoiceStateUpdate(this: WebSocket, data: Payload) {
user_id: this.user_id,
deaf: false,
mute: false,
suppress: false
})
suppress: false,
});
}
//If the session changed we generate a new token
if(voiceState.session_id !== this.session_id)
voiceState.token = genVoiceToken()
voiceState.session_id = this.session_id
if (voiceState.session_id !== this.session_id) voiceState.token = genVoiceToken();
voiceState.session_id = this.session_id;
//TODO the member should only have these properties: hoisted_role, deaf, joined_at, mute, roles, user
//TODO the member.user should only have these properties: avatar, discriminator, id, username
const {id, ...newObj} = voiceState;
const { id, ...newObj } = voiceState;
await Promise.all([
voiceState.save(),
emitEvent({ event: "VOICE_STATE_UPDATE", data: newObj, guild_id: voiceState.guild_id} as VoiceStateUpdateEvent),
emitEvent({
event: "VOICE_STATE_UPDATE",
data: newObj,
guild_id: voiceState.guild_id,
} as VoiceStateUpdateEvent),
]);
//If it's null it means that we are leaving the channel and this event is not needed
if(voiceState.channel_id !== null) {
if (voiceState.channel_id !== null) {
const regions = Config.get().regions;
await emitEvent({ event: "VOICE_SERVER_UPDATE", data: {
await emitEvent({
event: "VOICE_SERVER_UPDATE",
data: {
token: voiceState.token,
guild_id: voiceState.guild_id,
endpoint: regions.available[0].endpoint, //TODO return best endpoint or default
}, guild_id: voiceState.guild_id } as VoiceServerUpdateEvent)
},
guild_id: voiceState.guild_id,
} as VoiceServerUpdateEvent);
}
}
}

View File

@ -1,11 +1,11 @@
export function genSessionId() {
return genRanHex(32)
return genRanHex(32);
}
export function genVoiceToken() {
return genRanHex(16)
return genRanHex(16);
}
function genRanHex(size: number) {
return [...Array(size)].map(() => Math.floor(Math.random() * 16).toString(16)).join('');
}
return [...Array(size)].map(() => Math.floor(Math.random() * 16).toString(16)).join("");
}

View File

@ -271,7 +271,16 @@ export const DefaultConfigOptions: ConfigValue = {
regions: {
default: "fosscord",
useDefaultAsOptimal: true,
available: [{ id: "fosscord", name: "Fosscord", endpoint: "127.0.0.1:3004", vip: false, custom: false, deprecated: false }],
available: [
{
id: "fosscord",
name: "Fosscord",
endpoint: "127.0.0.1:3004",
vip: false,
custom: false,
deprecated: false,
},
],
},
rabbitmq: {
host: null,

View File

@ -4,30 +4,29 @@ import { Column, Entity, JoinColumn, ManyToOne, RelationId } from "typeorm";
//TODO we need to remove all sessions on server start because if the server crashes without closing websockets it won't delete them
@Entity("sessions")
export class Session extends BaseClass {
@Column({ nullable: true })
@RelationId((session: Session) => session.user)
user_id: string;
@Column({ nullable: true })
@RelationId((session: Session) => session.user)
user_id: string;
@JoinColumn({ name: "user_id" })
@ManyToOne(() => User)
user: User;
@JoinColumn({ name: "user_id" })
@ManyToOne(() => User)
user: User;
//TODO check, should be 32 char long hex string
@Column({ nullable: false })
session_id: string;
//TODO check, should be 32 char long hex string
@Column({ nullable: false })
session_id: string;
activities: []; //TODO
activities: []; //TODO
@Column({ type: "simple-json", select: false })
client_info: {
client: string,
os: string,
version: number
}
@Column({ type: "simple-json", select: false })
client_info: {
client: string;
os: string;
version: number;
};
@Column({ nullable: false })
status: string; //TODO enum
@Column({ nullable: false })
status: string; //TODO enum
}

View File

@ -3,7 +3,7 @@ import { BaseClass } from "./BaseClass";
import { Channel } from "./Channel";
import { Guild } from "./Guild";
import { User } from "./User";
import {Member} from "./Member";
import { Member } from "./Member";
//https://gist.github.com/vassjozsef/e482c65df6ee1facaace8b3c9ff66145#file-voice_state-ex
@Entity("voice_states")
@ -63,6 +63,6 @@ export class VoiceState extends BaseClass {
@Column()
suppress: boolean; // whether this user is muted by the current user
@Column({ nullable: true , default: null})
request_to_speak_timestamp?: Date
@Column({ nullable: true, default: null })
request_to_speak_timestamp?: Date;
}