diff --git a/app/store/store.js b/app/store/store.js index be1155865..5ab6f2af1 100644 --- a/app/store/store.js +++ b/app/store/store.js @@ -166,8 +166,18 @@ export default function configureAppStore(initialState) { profilesInChannel[channelId] = Array.from(profilesInChannel[channelId]); }); + let url; + if (state.entities.users.currentUserId) { + url = state.entities.general.credentials.url || state.views.selectServer.serverUrl; + } + const entities = { ...state.entities, + general: { + credentials: { + url, + }, + }, channels: { ...state.entities.channels, channelsInTeam, diff --git a/ios/MattermostShare/ShareViewController.swift b/ios/MattermostShare/ShareViewController.swift index 9ac1a1f30..f23892a6d 100644 --- a/ios/MattermostShare/ShareViewController.swift +++ b/ios/MattermostShare/ShareViewController.swift @@ -83,7 +83,7 @@ class ShareViewController: SLComposeServiceViewController { extractDataFromContext() - if sessionToken == nil { + if sessionToken == nil || serverURL == nil { showErrorMessage(title: "", message: "Authentication required: Please first login using the app.", VC: self) } } diff --git a/ios/UploadAttachments/UploadAttachments/StoreManager.m b/ios/UploadAttachments/UploadAttachments/StoreManager.m index bdaddae1b..02fc2bdd8 100644 --- a/ios/UploadAttachments/UploadAttachments/StoreManager.m +++ b/ios/UploadAttachments/UploadAttachments/StoreManager.m @@ -144,19 +144,29 @@ } -(NSString *)getServerUrl { - NSDictionary *general = [self.entities objectForKey:@"general"]; - NSDictionary *credentials = [general objectForKey:@"credentials"]; + NSDictionary *general = [self.entities objectForKey:@"general"]; + NSDictionary *credentials = [general objectForKey:@"credentials"]; - return [credentials objectForKey:@"url"]; + if (credentials) { + return [credentials objectForKey:@"url"]; + } + + return nil; } -(NSString *)getToken { NSDictionary *options = @{ @"accessGroup": APP_GROUP_ID }; - NSDictionary *credentials = [self.keychain getInternetCredentialsForServer:[self getServerUrl] withOptions:options]; + NSString* serverUrl = [self getServerUrl]; + + if (serverUrl) { + NSDictionary *credentials = [self.keychain getInternetCredentialsForServer:[self getServerUrl] withOptions:options]; - return [credentials objectForKey:@"password"]; + return [credentials objectForKey:@"password"]; + } + + return nil; } -(UInt64)scanValueFromConfig:(NSDictionary *)config key:(NSString *)key { diff --git a/ios/UploadAttachments/UploadAttachments/UploadSession.swift b/ios/UploadAttachments/UploadAttachments/UploadSession.swift index 585303e27..d0dcd858e 100644 --- a/ios/UploadAttachments/UploadAttachments/UploadSession.swift +++ b/ios/UploadAttachments/UploadAttachments/UploadSession.swift @@ -16,33 +16,36 @@ import os.log let _ = store.getEntities(true) let serverURL = store.getServerUrl() let sessionToken = store.getToken() - let urlString = "\(serverURL!)/api/v4/posts" - guard let uploadSessionData = UploadSessionManager.shared.getUploadSessionData(identifier: identifier) else {return} - guard let url = URL(string: urlString) else {return} - - if uploadSessionData.message != "" || uploadSessionData.fileIds.count > 0 { - let jsonObject: [String: Any] = [ - "channel_id": uploadSessionData.channelId as Any, - "message": uploadSessionData.message as Any, - "file_ids": uploadSessionData.fileIds - ] - if !JSONSerialization.isValidJSONObject(jsonObject) {return} + if (serverURL != nil && sessionToken != nil) { + let urlString = "\(serverURL!)/api/v4/posts" - var request = URLRequest(url: url) - request.httpMethod = "POST" - request.setValue("Bearer \(sessionToken!)", forHTTPHeaderField: "Authorization") - request.setValue("application/json; charset=utf-8", forHTTPHeaderField: "Content-Type") - request.httpBody = try? JSONSerialization.data(withJSONObject: jsonObject, options: .prettyPrinted) + guard let uploadSessionData = UploadSessionManager.shared.getUploadSessionData(identifier: identifier) else {return} + guard let url = URL(string: urlString) else {return} - if #available(iOS 12.0, *) { - os_log(OSLogType.default, "Mattermost will post identifier=%{public}@", identifier) + if uploadSessionData.message != "" || uploadSessionData.fileIds.count > 0 { + let jsonObject: [String: Any] = [ + "channel_id": uploadSessionData.channelId as Any, + "message": uploadSessionData.message as Any, + "file_ids": uploadSessionData.fileIds + ] + if !JSONSerialization.isValidJSONObject(jsonObject) {return} + + var request = URLRequest(url: url) + request.httpMethod = "POST" + request.setValue("Bearer \(sessionToken!)", forHTTPHeaderField: "Authorization") + request.setValue("application/json; charset=utf-8", forHTTPHeaderField: "Content-Type") + request.httpBody = try? JSONSerialization.data(withJSONObject: jsonObject, options: .prettyPrinted) + + if #available(iOS 12.0, *) { + os_log(OSLogType.default, "Mattermost will post identifier=%{public}@", identifier) + } + + URLSession(configuration: .ephemeral).dataTask(with: request).resume() + + UploadSessionManager.shared.removeUploadSessionData(identifier: identifier) + UploadSessionManager.shared.clearTempDirectory() } - - URLSession(configuration: .ephemeral).dataTask(with: request).resume() - - UploadSessionManager.shared.removeUploadSessionData(identifier: identifier) - UploadSessionManager.shared.clearTempDirectory() } } @@ -131,24 +134,27 @@ import os.log if (entities != nil) { let serverURL = store.getServerUrl() let sessionToken = store.getToken() - let urlString = "\(serverURL!)/api/v4/notifications/ack" - - let jsonObject: [String: Any] = [ - "id": notificationId as Any, - "received_at": receivedAt, - "platform": "ios", - "type": type as Any - ] - - if !JSONSerialization.isValidJSONObject(jsonObject) {return} - - guard let url = URL(string: urlString) else {return} - var request = URLRequest(url: url) - request.httpMethod = "POST" - request.setValue("Bearer \(sessionToken!)", forHTTPHeaderField: "Authorization") - request.setValue("application/json; charset=utf-8", forHTTPHeaderField: "Content-Type") - request.httpBody = try? JSONSerialization.data(withJSONObject: jsonObject, options: .prettyPrinted) - URLSession(configuration: .ephemeral).dataTask(with: request).resume() + + if (serverURL != nil && sessionToken != nil) { + let urlString = "\(serverURL!)/api/v4/notifications/ack" + + let jsonObject: [String: Any] = [ + "id": notificationId as Any, + "received_at": receivedAt, + "platform": "ios", + "type": type as Any + ] + + if !JSONSerialization.isValidJSONObject(jsonObject) {return} + + guard let url = URL(string: urlString) else {return} + var request = URLRequest(url: url) + request.httpMethod = "POST" + request.setValue("Bearer \(sessionToken!)", forHTTPHeaderField: "Authorization") + request.setValue("application/json; charset=utf-8", forHTTPHeaderField: "Content-Type") + request.httpBody = try? JSONSerialization.data(withJSONObject: jsonObject, options: .prettyPrinted) + URLSession(configuration: .ephemeral).dataTask(with: request).resume() + } } } }