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:
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) {