damus

nostr ios client
git clone git://jb55.com/damus
Log | Files | Refs | README | LICENSE

commit ad614f3e42b71db00f7983cbf0da4018a515dcb8
parent 01497d0288dafb6f7b859f0e166009a644d7930d
Author: William Casarin <jb55@jb55.com>
Date:   Tue, 27 Aug 2024 14:23:46 +0300

Merge 'Add nostrcheck'

Quentin (1):
      Remove non-functioning servers,add nostrcheck,NIP96 for all servers

Diffstat:
Mdamus/Models/MediaUploader.swift | 86++++++++++++++++++++++++++++++-------------------------------------------------
Mdamus/Views/AttachMediaUtility.swift | 2+-
2 files changed, 33 insertions(+), 55 deletions(-)

diff --git a/damus/Models/MediaUploader.swift b/damus/Models/MediaUploader.swift @@ -10,7 +10,7 @@ import Foundation enum MediaUploader: String, CaseIterable, Identifiable, StringCodable { var id: String { self.rawValue } case nostrBuild - case nostrImg + case nostrcheck init?(from string: String) { guard let mu = MediaUploader(rawValue: string) else { @@ -23,95 +23,73 @@ enum MediaUploader: String, CaseIterable, Identifiable, StringCodable { func to_string() -> String { return rawValue } - + var nameParam: String { switch self { case .nostrBuild: return "\"fileToUpload\"" - case .nostrImg: - return "\"image\"" + default: + return "\"file\"" } } - + var supportsVideo: Bool { switch self { case .nostrBuild: return true - case .nostrImg: - return false + case .nostrcheck: + return true } } - + struct Model: Identifiable, Hashable { var id: String { self.tag } var index: Int var tag: String var displayName : String } - + var model: Model { switch self { case .nostrBuild: return .init(index: -1, tag: "nostrBuild", displayName: "nostr.build") - case .nostrImg: - return .init(index: 0, tag: "nostrImg", displayName: "nostrimg.com") + case .nostrcheck: + return .init(index: 0, tag: "nostrcheck", displayName: "nostrcheck.me") } } - - + var postAPI: String { switch self { case .nostrBuild: - return "https://nostr.build/api/v2/upload/files" - case .nostrImg: - return "https://nostrimg.com/api/upload" + return "https://nostr.build/api/v2/nip96/upload" + case .nostrcheck: + return "https://nostrcheck.me/api/v2/media" } } - + func getMediaURL(from data: Data) -> String? { - switch self { - case .nostrBuild: - do { - if let jsonObject = try JSONSerialization.jsonObject(with: data, options: .allowFragments) as? [String: Any], - let status = jsonObject["status"] as? String { - - if status == "success", let dataArray = jsonObject["data"] as? [[String: Any]] { - - var urls: [String] = [] - - for dataDict in dataArray { - if let mainUrl = dataDict["url"] as? String { - urls.append(mainUrl) + do { + if let jsonObject = try JSONSerialization.jsonObject(with: data, options: .allowFragments) as? [String: Any], + let status = jsonObject["status"] as? String { + + if status == "success", let nip94Event = jsonObject["nip94_event"] as? [String: Any] { + + if let tags = nip94Event["tags"] as? [[String]] { + for tagArray in tags { + if tagArray.count > 1, tagArray[0] == "url" { + return tagArray[1] } } - - return urls.joined(separator: "\n") - } else if status == "error", let message = jsonObject["message"] as? String { - print("Upload Error: \(message)") - return nil } - } - } catch { - print("Failed JSONSerialization") - return nil - } - return nil - case .nostrImg: - guard let responseString = String(data: data, encoding: String.Encoding(rawValue: String.Encoding.utf8.rawValue)) else { - print("Upload failed getting response string") - return nil - } - - guard let startIndex = responseString.range(of: "https://i.nostrimg.com/")?.lowerBound else { + } else if status == "error", let message = jsonObject["message"] as? String { + print("Upload Error: \(message)") return nil } - let stringContainingName = responseString[startIndex..<responseString.endIndex] - guard let endIndex = stringContainingName.range(of: "\"")?.lowerBound else { - return nil } - let nostrBuildImageName = responseString[startIndex..<endIndex] - let nostrBuildURL = "\(nostrBuildImageName)" - return nostrBuildURL + } catch { + print("Failed JSONSerialization") + return nil } + return nil } } diff --git a/damus/Views/AttachMediaUtility.swift b/damus/Views/AttachMediaUtility.swift @@ -40,7 +40,7 @@ func create_upload_request(mediaToUpload: MediaUpload, mediaUploader: MediaUploa request.setValue("multipart/form-data; boundary=\(boundary)", forHTTPHeaderField: "Content-Type") // If uploading to a media host that support NIP-98 authorization, add the header - if mediaUploader == .nostrBuild, + if mediaUploader == .nostrBuild || mediaUploader == .nostrcheck, let keypair, let method = request.httpMethod, let signature = create_nip98_signature(keypair: keypair, method: method, url: url) {