RocketChat/Rocket.Chat

View on GitHub
apps/meteor/ee/server/api/federation/rooms.ts

Summary

Maintainability
B
5 hrs
Test Coverage
import { FederationEE } from '@rocket.chat/core-services';
import {
    isFederationAddServerProps,
    isFederationRemoveServerProps,
    isFederationSearchPublicRoomsProps,
    isFederationJoinExternalPublicRoomProps,
} from '@rocket.chat/rest-typings';

import { API } from '../../../../app/api/server';
import { getPaginationItems } from '../../../../app/api/server/helpers/getPaginationItems';

API.v1.addRoute(
    'federation/searchPublicRooms',
    {
        authRequired: true,
        validateParams: isFederationSearchPublicRoomsProps,
    },
    {
        async get() {
            const { count } = await getPaginationItems(this.queryParams);
            const { serverName, roomName, pageToken } = this.queryParams;

            const result = await FederationEE.searchPublicRooms(serverName, roomName, pageToken, count);

            return API.v1.success(result);
        },
    },
);

API.v1.addRoute(
    'federation/listServersByUser',
    {
        authRequired: true,
    },
    {
        async get() {
            const servers = await FederationEE.getSearchedServerNamesByInternalUserId(this.userId);

            return API.v1.success({
                servers,
            });
        },
    },
);

API.v1.addRoute(
    'federation/addServerByUser',
    {
        authRequired: true,
        validateParams: isFederationAddServerProps,
    },
    {
        async post() {
            const { serverName } = this.bodyParams;

            await FederationEE.addSearchedServerNameByInternalUserId(this.userId, serverName);

            return API.v1.success();
        },
    },
);

API.v1.addRoute(
    'federation/removeServerByUser',
    {
        authRequired: true,
        validateParams: isFederationRemoveServerProps,
    },
    {
        async post() {
            const { serverName } = this.bodyParams;

            await FederationEE.removeSearchedServerNameByInternalUserId(this.userId, serverName);

            return API.v1.success();
        },
    },
);

API.v1.addRoute(
    'federation/joinExternalPublicRoom',
    {
        authRequired: true,
        validateParams: isFederationJoinExternalPublicRoomProps,
    },
    {
        async post() {
            const { externalRoomId, roomName, pageToken } = this.bodyParams;

            await FederationEE.scheduleJoinExternalPublicRoom(this.userId, externalRoomId, roomName, decodeURIComponent(pageToken || ''));

            return API.v1.success();
        },
    },
);