From 5d20b26b7397e8195f1281bf6c779624093f2a73 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Espino=20Garc=C3=ADa?= Date: Wed, 24 May 2023 12:29:48 +0200 Subject: [PATCH] Add license checks to several groups calls (#7369) --- app/actions/remote/groups.ts | 49 ++++++++++++++++++++---------------- app/client/rest/groups.ts | 32 ----------------------- 2 files changed, 28 insertions(+), 53 deletions(-) diff --git a/app/actions/remote/groups.ts b/app/actions/remote/groups.ts index 205c38b75..e402226b3 100644 --- a/app/actions/remote/groups.ts +++ b/app/actions/remote/groups.ts @@ -4,6 +4,7 @@ import DatabaseManager from '@database/manager'; import NetworkManager from '@managers/network_manager'; import {getChannelById} from '@queries/servers/channel'; +import {getLicense} from '@queries/servers/system'; import {getTeamById} from '@queries/servers/team'; import {getFullErrorMessage} from '@utils/errors'; import {logDebug} from '@utils/log'; @@ -12,25 +13,14 @@ import {forceLogoutIfNecessary} from './session'; import type {Client} from '@client/rest'; -export const fetchGroup = async (serverUrl: string, id: string, fetchOnly = false) => { - try { - const {operator} = DatabaseManager.getServerDatabaseAndOperator(serverUrl); - const client: Client = NetworkManager.getClient(serverUrl); - - const group = await client.getGroup(id); - - // Save locally - return operator.handleGroups({groups: [group], prepareRecordsOnly: fetchOnly}); - } catch (error) { - logDebug('error on fetchGroup', getFullErrorMessage(error)); - forceLogoutIfNecessary(serverUrl, error); - return {error}; - } -}; - export const fetchGroupsForAutocomplete = async (serverUrl: string, query: string, fetchOnly = false) => { try { - const {operator} = DatabaseManager.getServerDatabaseAndOperator(serverUrl); + const {operator, database} = DatabaseManager.getServerDatabaseAndOperator(serverUrl); + const license = await getLicense(database); + if (!license || !license.IsLicensed) { + return []; + } + const client: Client = NetworkManager.getClient(serverUrl); const response = await client.getGroups({query, includeMemberCount: true}); @@ -48,7 +38,11 @@ export const fetchGroupsForAutocomplete = async (serverUrl: string, query: strin export const fetchGroupsByNames = async (serverUrl: string, names: string[], fetchOnly = false) => { try { - const {operator} = DatabaseManager.getServerDatabaseAndOperator(serverUrl); + const {operator, database} = DatabaseManager.getServerDatabaseAndOperator(serverUrl); + const license = await getLicense(database); + if (!license || !license.IsLicensed) { + return []; + } const client: Client = NetworkManager.getClient(serverUrl); const promises: Array > = []; @@ -74,7 +68,12 @@ export const fetchGroupsByNames = async (serverUrl: string, names: string[], fet export const fetchGroupsForChannel = async (serverUrl: string, channelId: string, fetchOnly = false) => { try { - const {operator} = DatabaseManager.getServerDatabaseAndOperator(serverUrl); + const {operator, database} = DatabaseManager.getServerDatabaseAndOperator(serverUrl); + const license = await getLicense(database); + if (!license || !license.IsLicensed) { + return {groups: [], groupChannels: []}; + } + const client = NetworkManager.getClient(serverUrl); const response = await client.getAllGroupsAssociatedToChannel(channelId); @@ -101,7 +100,11 @@ export const fetchGroupsForChannel = async (serverUrl: string, channelId: string export const fetchGroupsForTeam = async (serverUrl: string, teamId: string, fetchOnly = false) => { try { - const {operator} = DatabaseManager.getServerDatabaseAndOperator(serverUrl); + const {operator, database} = DatabaseManager.getServerDatabaseAndOperator(serverUrl); + const license = await getLicense(database); + if (!license || !license.IsLicensed) { + return {groups: [], groupTeams: []}; + } const client: Client = NetworkManager.getClient(serverUrl); const response = await client.getAllGroupsAssociatedToTeam(teamId); @@ -128,7 +131,11 @@ export const fetchGroupsForTeam = async (serverUrl: string, teamId: string, fetc export const fetchGroupsForMember = async (serverUrl: string, userId: string, fetchOnly = false) => { try { - const {operator} = DatabaseManager.getServerDatabaseAndOperator(serverUrl); + const {operator, database} = DatabaseManager.getServerDatabaseAndOperator(serverUrl); + const license = await getLicense(database); + if (!license || !license.IsLicensed) { + return {groups: [], groupMemberships: []}; + } const client: Client = NetworkManager.getClient(serverUrl); const response = await client.getAllGroupsAssociatedToMembership(userId); diff --git a/app/client/rest/groups.ts b/app/client/rest/groups.ts index 61b608f6b..88ef1eacc 100644 --- a/app/client/rest/groups.ts +++ b/app/client/rest/groups.ts @@ -8,24 +8,13 @@ import {PER_PAGE_DEFAULT} from './constants'; import type ClientBase from './base'; export interface ClientGroupsMix { - getGroup: (id: string) => Promise; getGroups: (params: {query?: string; filterAllowReference?: boolean; page?: number; perPage?: number; since?: number; includeMemberCount?: boolean}) => Promise; getAllGroupsAssociatedToChannel: (channelId: string, filterAllowReference?: boolean) => Promise<{groups: Group[]; total_group_count: number}>; getAllGroupsAssociatedToMembership: (userId: string, filterAllowReference?: boolean) => Promise; getAllGroupsAssociatedToTeam: (teamId: string, filterAllowReference?: boolean) => Promise<{groups: Group[]; total_group_count: number}>; - getAllChannelsAssociatedToGroup: (groupId: string, filterAllowReference?: boolean) => Promise<{groupChannels: GroupChannel[]}>; - getAllMembershipsAssociatedToGroup: (groupId: string, filterAllowReference?: boolean) => Promise<{groupMemberships: UserProfile[]; total_member_count: number}>; - getAllTeamsAssociatedToGroup: (groupId: string, filterAllowReference?: boolean) => Promise<{groupTeams: GroupTeam[]}>; } const ClientGroups = >(superclass: TBase) => class extends superclass { - getGroup = async (id: string) => { - return this.doFetch( - `${this.urlVersion}/groups/${id}`, - {method: 'get'}, - ); - }; - getGroups = async ({query = '', filterAllowReference = true, page = 0, perPage = PER_PAGE_DEFAULT, since = 0, includeMemberCount = false}) => { return this.doFetch( `${this.urlVersion}/groups${buildQueryString({ @@ -64,27 +53,6 @@ const ClientGroups = >(superclass: TBase) {method: 'get'}, ); }; - - getAllTeamsAssociatedToGroup = async (groupId: string, filterAllowReference = false) => { - return this.doFetch( - `${this.urlVersion}/groups/${groupId}/teams${buildQueryString({filter_allow_reference: filterAllowReference})}`, - {method: 'get'}, - ); - }; - - getAllChannelsAssociatedToGroup = async (groupId: string, filterAllowReference = false) => { - return this.doFetch( - `${this.urlVersion}/groups/${groupId}/channels${buildQueryString({filter_allow_reference: filterAllowReference})}`, - {method: 'get'}, - ); - }; - - getAllMembershipsAssociatedToGroup = async (groupId: string, filterAllowReference = false) => { - return this.doFetch( - `${this.urlVersion}/groups/${groupId}/members${buildQueryString({filter_allow_reference: filterAllowReference})}`, - {method: 'get'}, - ); - }; }; export default ClientGroups;