mirror of
https://github.com/spacebarchat/server.git
synced 2024-11-10 04:32:35 +01:00
implement PATCH connection
This commit is contained in:
parent
6a52e65e27
commit
5c682137b2
@ -36,6 +36,16 @@
|
||||
],
|
||||
"$schema": "http://json-schema.org/draft-07/schema#"
|
||||
},
|
||||
"ConnectionUpdateSchema": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"visibility": {
|
||||
"type": "boolean"
|
||||
}
|
||||
},
|
||||
"additionalProperties": false,
|
||||
"$schema": "http://json-schema.org/draft-07/schema#"
|
||||
},
|
||||
"SMTPConnection.CustomAuthenticationResponse": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
@ -2790,6 +2800,639 @@
|
||||
},
|
||||
"$schema": "http://json-schema.org/draft-07/schema#"
|
||||
},
|
||||
"ConnectedAccountSchema": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"external_id": {
|
||||
"type": "string"
|
||||
},
|
||||
"user_id": {
|
||||
"type": "string"
|
||||
},
|
||||
"access_token": {
|
||||
"type": "string"
|
||||
},
|
||||
"friend_sync": {
|
||||
"type": "boolean"
|
||||
},
|
||||
"name": {
|
||||
"type": "string"
|
||||
},
|
||||
"revoked": {
|
||||
"type": "boolean"
|
||||
},
|
||||
"show_activity": {
|
||||
"type": "boolean"
|
||||
},
|
||||
"type": {
|
||||
"type": "string"
|
||||
},
|
||||
"verified": {
|
||||
"type": "boolean"
|
||||
},
|
||||
"visibility": {
|
||||
"type": "integer"
|
||||
},
|
||||
"integrations": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
"metadata_": {},
|
||||
"metadata_visibility": {
|
||||
"type": "integer"
|
||||
},
|
||||
"two_way_link": {
|
||||
"type": "boolean"
|
||||
}
|
||||
},
|
||||
"additionalProperties": false,
|
||||
"required": [
|
||||
"external_id",
|
||||
"name",
|
||||
"type",
|
||||
"user_id"
|
||||
],
|
||||
"definitions": {
|
||||
"ChannelPermissionOverwriteType": {
|
||||
"enum": [
|
||||
0,
|
||||
1,
|
||||
2
|
||||
],
|
||||
"type": "number"
|
||||
},
|
||||
"ChannelModifySchema": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"name": {
|
||||
"maxLength": 100,
|
||||
"type": "string"
|
||||
},
|
||||
"type": {
|
||||
"enum": [
|
||||
0,
|
||||
1,
|
||||
10,
|
||||
11,
|
||||
12,
|
||||
13,
|
||||
14,
|
||||
15,
|
||||
2,
|
||||
255,
|
||||
3,
|
||||
33,
|
||||
34,
|
||||
35,
|
||||
4,
|
||||
5,
|
||||
6,
|
||||
64,
|
||||
7,
|
||||
8,
|
||||
9
|
||||
],
|
||||
"type": "number"
|
||||
},
|
||||
"topic": {
|
||||
"type": "string"
|
||||
},
|
||||
"icon": {
|
||||
"type": [
|
||||
"null",
|
||||
"string"
|
||||
]
|
||||
},
|
||||
"bitrate": {
|
||||
"type": "integer"
|
||||
},
|
||||
"user_limit": {
|
||||
"type": "integer"
|
||||
},
|
||||
"rate_limit_per_user": {
|
||||
"type": "integer"
|
||||
},
|
||||
"position": {
|
||||
"type": "integer"
|
||||
},
|
||||
"permission_overwrites": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"id": {
|
||||
"type": "string"
|
||||
},
|
||||
"type": {
|
||||
"$ref": "#/definitions/ChannelPermissionOverwriteType"
|
||||
},
|
||||
"allow": {
|
||||
"type": "string"
|
||||
},
|
||||
"deny": {
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
"additionalProperties": false,
|
||||
"required": [
|
||||
"allow",
|
||||
"deny",
|
||||
"id",
|
||||
"type"
|
||||
]
|
||||
}
|
||||
},
|
||||
"parent_id": {
|
||||
"type": "string"
|
||||
},
|
||||
"id": {
|
||||
"type": "string"
|
||||
},
|
||||
"nsfw": {
|
||||
"type": "boolean"
|
||||
},
|
||||
"rtc_region": {
|
||||
"type": "string"
|
||||
},
|
||||
"default_auto_archive_duration": {
|
||||
"type": "integer"
|
||||
},
|
||||
"default_reaction_emoji": {
|
||||
"type": [
|
||||
"null",
|
||||
"string"
|
||||
]
|
||||
},
|
||||
"flags": {
|
||||
"type": "integer"
|
||||
},
|
||||
"default_thread_rate_limit_per_user": {
|
||||
"type": "integer"
|
||||
},
|
||||
"video_quality_mode": {
|
||||
"type": "integer"
|
||||
}
|
||||
},
|
||||
"additionalProperties": false
|
||||
},
|
||||
"ActivitySchema": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"afk": {
|
||||
"type": "boolean"
|
||||
},
|
||||
"status": {
|
||||
"$ref": "#/definitions/Status"
|
||||
},
|
||||
"activities": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"$ref": "#/definitions/Activity"
|
||||
}
|
||||
},
|
||||
"since": {
|
||||
"type": "integer"
|
||||
}
|
||||
},
|
||||
"additionalProperties": false,
|
||||
"required": [
|
||||
"status"
|
||||
]
|
||||
},
|
||||
"Status": {
|
||||
"enum": [
|
||||
"dnd",
|
||||
"idle",
|
||||
"invisible",
|
||||
"offline",
|
||||
"online"
|
||||
],
|
||||
"type": "string"
|
||||
},
|
||||
"Activity": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"name": {
|
||||
"type": "string"
|
||||
},
|
||||
"type": {
|
||||
"$ref": "#/definitions/ActivityType"
|
||||
},
|
||||
"url": {
|
||||
"type": "string"
|
||||
},
|
||||
"created_at": {
|
||||
"type": "integer"
|
||||
},
|
||||
"timestamps": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"start": {
|
||||
"type": "integer"
|
||||
},
|
||||
"end": {
|
||||
"type": "integer"
|
||||
}
|
||||
},
|
||||
"additionalProperties": false,
|
||||
"required": [
|
||||
"end",
|
||||
"start"
|
||||
]
|
||||
},
|
||||
"application_id": {
|
||||
"type": "string"
|
||||
},
|
||||
"details": {
|
||||
"type": "string"
|
||||
},
|
||||
"state": {
|
||||
"type": "string"
|
||||
},
|
||||
"emoji": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"name": {
|
||||
"type": "string"
|
||||
},
|
||||
"id": {
|
||||
"type": "string"
|
||||
},
|
||||
"animated": {
|
||||
"type": "boolean"
|
||||
}
|
||||
},
|
||||
"additionalProperties": false,
|
||||
"required": [
|
||||
"animated",
|
||||
"name"
|
||||
]
|
||||
},
|
||||
"party": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"id": {
|
||||
"type": "string"
|
||||
},
|
||||
"size": {
|
||||
"type": "array",
|
||||
"items": [
|
||||
{
|
||||
"type": "integer"
|
||||
}
|
||||
],
|
||||
"minItems": 1,
|
||||
"maxItems": 1
|
||||
}
|
||||
},
|
||||
"additionalProperties": false
|
||||
},
|
||||
"assets": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"large_image": {
|
||||
"type": "string"
|
||||
},
|
||||
"large_text": {
|
||||
"type": "string"
|
||||
},
|
||||
"small_image": {
|
||||
"type": "string"
|
||||
},
|
||||
"small_text": {
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
"additionalProperties": false
|
||||
},
|
||||
"secrets": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"join": {
|
||||
"type": "string"
|
||||
},
|
||||
"spectate": {
|
||||
"type": "string"
|
||||
},
|
||||
"match": {
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
"additionalProperties": false
|
||||
},
|
||||
"instance": {
|
||||
"type": "boolean"
|
||||
},
|
||||
"flags": {
|
||||
"type": "string"
|
||||
},
|
||||
"id": {
|
||||
"type": "string"
|
||||
},
|
||||
"sync_id": {
|
||||
"type": "string"
|
||||
},
|
||||
"metadata": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"context_uri": {
|
||||
"type": "string"
|
||||
},
|
||||
"album_id": {
|
||||
"type": "string"
|
||||
},
|
||||
"artist_ids": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "string"
|
||||
}
|
||||
}
|
||||
},
|
||||
"additionalProperties": false,
|
||||
"required": [
|
||||
"album_id",
|
||||
"artist_ids"
|
||||
]
|
||||
},
|
||||
"session_id": {
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
"additionalProperties": false,
|
||||
"required": [
|
||||
"flags",
|
||||
"name",
|
||||
"session_id",
|
||||
"type"
|
||||
]
|
||||
},
|
||||
"ActivityType": {
|
||||
"enum": [
|
||||
0,
|
||||
1,
|
||||
2,
|
||||
4,
|
||||
5
|
||||
],
|
||||
"type": "number"
|
||||
},
|
||||
"Record<string,[number,number][]>": {
|
||||
"type": "object",
|
||||
"additionalProperties": false
|
||||
},
|
||||
"Embed": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"title": {
|
||||
"type": "string"
|
||||
},
|
||||
"type": {
|
||||
"enum": [
|
||||
"article",
|
||||
"gifv",
|
||||
"image",
|
||||
"link",
|
||||
"rich",
|
||||
"video"
|
||||
],
|
||||
"type": "string"
|
||||
},
|
||||
"description": {
|
||||
"type": "string"
|
||||
},
|
||||
"url": {
|
||||
"type": "string"
|
||||
},
|
||||
"timestamp": {
|
||||
"type": "string",
|
||||
"format": "date-time"
|
||||
},
|
||||
"color": {
|
||||
"type": "integer"
|
||||
},
|
||||
"footer": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"text": {
|
||||
"type": "string"
|
||||
},
|
||||
"icon_url": {
|
||||
"type": "string"
|
||||
},
|
||||
"proxy_icon_url": {
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
"additionalProperties": false,
|
||||
"required": [
|
||||
"text"
|
||||
]
|
||||
},
|
||||
"image": {
|
||||
"$ref": "#/definitions/EmbedImage"
|
||||
},
|
||||
"thumbnail": {
|
||||
"$ref": "#/definitions/EmbedImage"
|
||||
},
|
||||
"video": {
|
||||
"$ref": "#/definitions/EmbedImage"
|
||||
},
|
||||
"provider": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"name": {
|
||||
"type": "string"
|
||||
},
|
||||
"url": {
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
"additionalProperties": false
|
||||
},
|
||||
"author": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"name": {
|
||||
"type": "string"
|
||||
},
|
||||
"url": {
|
||||
"type": "string"
|
||||
},
|
||||
"icon_url": {
|
||||
"type": "string"
|
||||
},
|
||||
"proxy_icon_url": {
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
"additionalProperties": false
|
||||
},
|
||||
"fields": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"name": {
|
||||
"type": "string"
|
||||
},
|
||||
"value": {
|
||||
"type": "string"
|
||||
},
|
||||
"inline": {
|
||||
"type": "boolean"
|
||||
}
|
||||
},
|
||||
"additionalProperties": false,
|
||||
"required": [
|
||||
"name",
|
||||
"value"
|
||||
]
|
||||
}
|
||||
}
|
||||
},
|
||||
"additionalProperties": false
|
||||
},
|
||||
"EmbedImage": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"url": {
|
||||
"type": "string"
|
||||
},
|
||||
"proxy_url": {
|
||||
"type": "string"
|
||||
},
|
||||
"height": {
|
||||
"type": "integer"
|
||||
},
|
||||
"width": {
|
||||
"type": "integer"
|
||||
}
|
||||
},
|
||||
"additionalProperties": false
|
||||
},
|
||||
"Partial<ChannelOverride>": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"message_notifications": {
|
||||
"type": "integer"
|
||||
},
|
||||
"mute_config": {
|
||||
"$ref": "#/definitions/MuteConfig"
|
||||
},
|
||||
"muted": {
|
||||
"type": "boolean"
|
||||
},
|
||||
"channel_id": {
|
||||
"type": [
|
||||
"null",
|
||||
"string"
|
||||
]
|
||||
}
|
||||
},
|
||||
"additionalProperties": false
|
||||
},
|
||||
"MuteConfig": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"end_time": {
|
||||
"type": "integer"
|
||||
},
|
||||
"selected_time_window": {
|
||||
"type": "integer"
|
||||
}
|
||||
},
|
||||
"additionalProperties": false,
|
||||
"required": [
|
||||
"end_time",
|
||||
"selected_time_window"
|
||||
]
|
||||
},
|
||||
"CustomStatus": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"emoji_id": {
|
||||
"type": "string"
|
||||
},
|
||||
"emoji_name": {
|
||||
"type": "string"
|
||||
},
|
||||
"expires_at": {
|
||||
"type": "integer"
|
||||
},
|
||||
"text": {
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
"additionalProperties": false
|
||||
},
|
||||
"FriendSourceFlags": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"all": {
|
||||
"type": "boolean"
|
||||
}
|
||||
},
|
||||
"additionalProperties": false,
|
||||
"required": [
|
||||
"all"
|
||||
]
|
||||
},
|
||||
"GuildFolder": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"color": {
|
||||
"type": "integer"
|
||||
},
|
||||
"guild_ids": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
"id": {
|
||||
"type": "integer"
|
||||
},
|
||||
"name": {
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
"additionalProperties": false,
|
||||
"required": [
|
||||
"color",
|
||||
"guild_ids",
|
||||
"id",
|
||||
"name"
|
||||
]
|
||||
},
|
||||
"Partial<GenerateWebAuthnCredentialsSchema>": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"password": {
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
"additionalProperties": false
|
||||
},
|
||||
"Partial<CreateWebAuthnCredentialSchema>": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"credential": {
|
||||
"type": "string"
|
||||
},
|
||||
"name": {
|
||||
"type": "string"
|
||||
},
|
||||
"ticket": {
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
"additionalProperties": false
|
||||
}
|
||||
},
|
||||
"$schema": "http://json-schema.org/draft-07/schema#"
|
||||
},
|
||||
"ConnectionCallbackSchema": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
|
@ -0,0 +1,51 @@
|
||||
import { route } from "@fosscord/api";
|
||||
import { Request, Response, Router } from "express";
|
||||
import {
|
||||
ConnectedAccount,
|
||||
DiscordApiErrors,
|
||||
OrmUtils,
|
||||
} from "../../../../../../../util";
|
||||
const router = Router();
|
||||
|
||||
// TODO: connection update schema
|
||||
router.patch(
|
||||
"/",
|
||||
route({ body: "ConnectionUpdateSchema" }),
|
||||
async (req: Request, res: Response) => {
|
||||
const { connection_name, connection_id } = req.params;
|
||||
|
||||
const connection = await ConnectedAccount.findOne({
|
||||
where: {
|
||||
user_id: req.user_id,
|
||||
external_id: connection_id,
|
||||
type: connection_name,
|
||||
},
|
||||
select: [
|
||||
"external_id",
|
||||
"type",
|
||||
"name",
|
||||
"verified",
|
||||
"visibility",
|
||||
"show_activity",
|
||||
"revoked",
|
||||
"friend_sync",
|
||||
"integrations",
|
||||
],
|
||||
});
|
||||
|
||||
if (!connection) return DiscordApiErrors.UNKNOWN_CONNECTION;
|
||||
// TODO: do we need to do anything if the connection is revoked?
|
||||
OrmUtils.mergeDeep(connection, req.body);
|
||||
await ConnectedAccount.update(
|
||||
{
|
||||
user_id: req.user_id,
|
||||
external_id: connection_id,
|
||||
type: connection_name,
|
||||
},
|
||||
connection,
|
||||
);
|
||||
res.json(connection.toJSON());
|
||||
},
|
||||
);
|
||||
|
||||
export default router;
|
@ -32,10 +32,12 @@ export class ConnectedAccountDTO {
|
||||
this.show_activity = connectedAccount.show_activity;
|
||||
this.type = connectedAccount.type;
|
||||
this.verified = connectedAccount.verified;
|
||||
this.visibility = connectedAccount.visibility;
|
||||
this.visibility = +(connectedAccount.visibility || false);
|
||||
this.integrations = connectedAccount.integrations;
|
||||
this.metadata_ = connectedAccount.metadata_;
|
||||
this.metadata_visibility = connectedAccount.metadata_visibility;
|
||||
this.metadata_visibility = +(
|
||||
connectedAccount.metadata_visibility || false
|
||||
);
|
||||
this.two_way_link = connectedAccount.two_way_link;
|
||||
}
|
||||
}
|
||||
|
@ -62,7 +62,7 @@ export class ConnectedAccount extends BaseClass {
|
||||
verified?: boolean = true;
|
||||
|
||||
@Column({ select: false })
|
||||
visibility?: number = 0;
|
||||
visibility?: boolean = false;
|
||||
|
||||
@Column({ type: "simple-array" })
|
||||
integrations?: string[] = [];
|
||||
@ -71,7 +71,7 @@ export class ConnectedAccount extends BaseClass {
|
||||
metadata_?: any;
|
||||
|
||||
@Column()
|
||||
metadata_visibility?: number = 0;
|
||||
metadata_visibility?: boolean = false;
|
||||
|
||||
@Column()
|
||||
two_way_link?: boolean = false;
|
||||
|
3
src/util/entities/ConnectionUpdateSchema.ts
Normal file
3
src/util/entities/ConnectionUpdateSchema.ts
Normal file
@ -0,0 +1,3 @@
|
||||
export interface ConnectionUpdateSchema {
|
||||
visibility?: boolean;
|
||||
}
|
@ -28,6 +28,7 @@ export * from "./ClientRelease";
|
||||
export * from "./Config";
|
||||
export * from "./ConnectedAccount";
|
||||
export * from "./ConnectionConfigEntity";
|
||||
export * from "./ConnectionUpdateSchema";
|
||||
export * from "./EmbedCache";
|
||||
export * from "./Emoji";
|
||||
export * from "./Encryption";
|
||||
|
@ -578,6 +578,7 @@ export const DiscordApiErrors = {
|
||||
UNKNOWN_EMOJI: new ApiError("Unknown emoji", 10014),
|
||||
UNKNOWN_WEBHOOK: new ApiError("Unknown webhook", 10015),
|
||||
UNKNOWN_WEBHOOK_SERVICE: new ApiError("Unknown webhook service", 10016),
|
||||
UNKNOWN_CONNECTION: new ApiError("Unknown connection", 10017, 400),
|
||||
UNKNOWN_SESSION: new ApiError("Unknown session", 10020),
|
||||
UNKNOWN_BAN: new ApiError("Unknown ban", 10026),
|
||||
UNKNOWN_SKU: new ApiError("Unknown SKU", 10027),
|
||||
|
Loading…
Reference in New Issue
Block a user