mattermost-mobile/app/client/rest/base.ts
Felipe Martin f50056f57b
MM-65085: Support Pre Shared Password on server connect (#9082)
* feat: add shared server password to server setup

* feat: allow editing the sever

* refactor: changed password -> secret, styling and tests

* e2e: draft e2e tests

* chore: lint fix

* feat: also send preauth secret header when using native share

* fix: removed unused server database migration

credentials are being stored in the keychain

* i18n: added missing english translations

* test(e2e): simplified connection tests

* test(e2e): rework

* refactor: remove setBearerToken

* chore: restore migrations the way it was

* chore: reverted file to original state

* chore: removed unneeded test and renamed password to secret

* chore: function version

* chore: updated forms i18n keys

* chore: remove if from test

* chore: unneeded variable

* fix: add missing key on object list

* refactor: swift keychain access to retrieve all credentials in one call

* revert: edit server screen

* refactor: credentials use getGenericCredential

* fix: objc code calling old method

* fix: added scroll to login screen

* chore: variable names

* fix: avoid inline styles

* fix: Improved appVersion positioning

* Update app/screens/server/form.tsx

Co-authored-by: Matthew Birtch <mattbirtch@gmail.com>

* feat: show error message on 403

* Revert "feat: show error message on 403"

This reverts commit f41630c767e10211adf1885321ceefd8a0931e32.

---------

Co-authored-by: Matthew Birtch <mattbirtch@gmail.com>
2025-09-01 11:24:15 +02:00

221 lines
5.7 KiB
TypeScript

// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.
// See LICENSE.txt for license information.
import {Calls} from '@constants';
import * as ClientConstants from './constants';
import ClientTracking from './tracking';
import type {APIClientInterface} from '@mattermost/react-native-network-client';
export default class ClientBase extends ClientTracking {
constructor(apiClient: APIClientInterface, serverUrl: string, bearerToken?: string, csrfToken?: string, preauthSecret?: string) {
super(apiClient);
if (bearerToken || preauthSecret) {
this.setClientCredentials(bearerToken || '', preauthSecret || '');
}
if (csrfToken) {
this.setCSRFToken(csrfToken);
}
}
invalidate() {
if (this.apiClient) {
this.apiClient.invalidate();
}
}
getBaseRoute() {
return this.apiClient.baseUrl || '';
}
getAbsoluteUrl(baseUrl?: string) {
if (typeof baseUrl !== 'string' || !baseUrl.startsWith('/')) {
return baseUrl;
}
return this.apiClient.baseUrl + baseUrl;
}
getWebSocketUrl = () => {
return `${this.urlVersion}/websocket`;
};
setAcceptLanguage(locale: string) {
this.requestHeaders[ClientConstants.HEADER_ACCEPT_LANGUAGE] = locale;
}
// Routes
getUsersRoute() {
return `${this.urlVersion}/users`;
}
getUserRoute(userId: string) {
return `${this.getUsersRoute()}/${userId}`;
}
getTeamsRoute() {
return `${this.urlVersion}/teams`;
}
getTeamRoute(teamId: string) {
return `${this.getTeamsRoute()}/${teamId}`;
}
getTeamNameRoute(teamName: string) {
return `${this.getTeamsRoute()}/name/${teamName}`;
}
getTeamMembersRoute(teamId: string) {
return `${this.getTeamRoute(teamId)}/members`;
}
getTeamMemberRoute(teamId: string, userId: string) {
return `${this.getTeamMembersRoute(teamId)}/${userId}`;
}
getCategoriesRoute(userId: string, teamId: string) {
return `${this.getUserRoute(userId)}/teams/${teamId}/channels/categories`;
}
getCategoriesOrderRoute(userId: string, teamId: string) {
return `${this.getCategoriesRoute(userId, teamId)}/order`;
}
getCategoryRoute(userId: string, teamId: string, categoryId: string) {
return `${this.getCategoriesRoute(userId, teamId)}/${categoryId}`;
}
getChannelsRoute() {
return `${this.urlVersion}/channels`;
}
getChannelRoute(channelId: string) {
return `${this.getChannelsRoute()}/${channelId}`;
}
getChannelBookmarksRoute(channelId: string) {
return `${this.getChannelRoute(channelId)}/bookmarks`;
}
getChannelBookmarkRoute(channelId: string, bookmarkId: string) {
return `${this.getChannelBookmarksRoute(channelId)}/${bookmarkId}`;
}
getSharedChannelsRoute() {
return `${this.urlVersion}/sharedchannels`;
}
getChannelMembersRoute(channelId: string) {
return `${this.getChannelRoute(channelId)}/members`;
}
getChannelMemberRoute(channelId: string, userId: string) {
return `${this.getChannelMembersRoute(channelId)}/${userId}`;
}
getPostsRoute() {
return `${this.urlVersion}/posts`;
}
getPostRoute(postId: string) {
return `${this.getPostsRoute()}/${postId}`;
}
getReactionsRoute() {
return `${this.urlVersion}/reactions`;
}
getCommandsRoute() {
return `${this.urlVersion}/commands`;
}
getFilesRoute() {
return `${this.urlVersion}/files`;
}
getFileRoute(fileId: string) {
return `${this.getFilesRoute()}/${fileId}`;
}
getPreferencesRoute(userId: string) {
return `${this.getUserRoute(userId)}/preferences`;
}
getEmojisRoute() {
return `${this.urlVersion}/emoji`;
}
getEmojiRoute(emojiId: string) {
return `${this.getEmojisRoute()}/${emojiId}`;
}
getGlobalDataRetentionRoute() {
return `${this.urlVersion}/data_retention`;
}
getGranularDataRetentionRoute(userId: string) {
return `${this.getUserRoute(userId)}/data_retention`;
}
getRolesRoute() {
return `${this.urlVersion}/roles`;
}
getTimezonesRoute() {
return `${this.urlVersion}/system/timezones`;
}
getRedirectLocationRoute() {
return `${this.urlVersion}/redirect_location`;
}
getTeamAndDirectChannelScheduledPostsRoute() {
return `${this.getPostsRoute()}/scheduled`;
}
getThreadsRoute(userId: string, teamId: string): string {
return `${this.getUserRoute(userId)}/teams/${teamId}/threads`;
}
getThreadRoute(userId: string, teamId: string, threadId: string): string {
return `${this.getThreadsRoute(userId, teamId)}/${threadId}`;
}
getPluginsRoute() {
return `${this.urlVersion}/plugins`;
}
getPluginRoute(id: string) {
return `/plugins/${id}`;
}
getAppsProxyRoute() {
return this.getPluginRoute('com.mattermost.apps');
}
getCallsRoute() {
return this.getPluginRoute(Calls.PluginId);
}
getPerformanceRoute() {
return `${this.urlVersion}/client_perf`;
}
getCustomProfileAttributesRoute() {
return `${this.urlVersion}/custom_profile_attributes`;
}
getScheduledPostRoute() {
return `${this.getPostsRoute()}/schedule`;
}
getUserCustomProfileAttributesRoute(userId: string) {
return `${this.getUsersRoute()}/${userId}/custom_profile_attributes`;
}
doFetch = async (url: string, options: ClientOptions, returnDataOnly = true) => {
return this.doFetchWithTracking(url, options, returnDataOnly);
};
}