* 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
* feat: show error message on 403
* Revert "feat: show error message on 403"
This reverts commit f41630c767e10211adf1885321ceefd8a0931e32.
---------
(cherry picked from commit f50056f57b)
Co-authored-by: Felipe Martin <812088+fmartingr@users.noreply.github.com>
Co-authored-by: Matthew Birtch <mattbirtch@gmail.com>
221 lines
5.7 KiB
TypeScript
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);
|
|
};
|
|
}
|