From d2666491ec2b1aec7fcda6385055d81a0b10b0cf Mon Sep 17 00:00:00 2001 From: Hykilpikonna Date: Tue, 12 Jan 2021 15:01:44 -0500 Subject: [PATCH] [+] Implement send request --- .../org/hydev/ios/alarmclock/Extensions.kt | 8 ++--- ProjectClock/Models.swift | 2 +- ProjectClock/Net.swift | 35 ++++++++++++++----- 3 files changed, 30 insertions(+), 15 deletions(-) diff --git a/Backend/src/main/kotlin/org/hydev/ios/alarmclock/Extensions.kt b/Backend/src/main/kotlin/org/hydev/ios/alarmclock/Extensions.kt index 91fa00e..9428acb 100644 --- a/Backend/src/main/kotlin/org/hydev/ios/alarmclock/Extensions.kt +++ b/Backend/src/main/kotlin/org/hydev/ios/alarmclock/Extensions.kt @@ -2,12 +2,10 @@ package org.hydev.ios.alarmclock import org.springframework.http.ResponseEntity import java.security.SecureRandom -import javax.crypto.SecretKeyFactory - -import javax.crypto.spec.PBEKeySpec - import java.security.spec.KeySpec import java.util.* +import javax.crypto.SecretKeyFactory +import javax.crypto.spec.PBEKeySpec /** * Generate "Bad Request" response entity @@ -26,7 +24,7 @@ fun bad(msg: String): ResponseEntity = ResponseEntity.badRequest().body( fun randSalt(len: Int = 16): ByteArray { val random = SecureRandom() - val salt = ByteArray(16) + val salt = ByteArray(len) random.nextBytes(salt) return salt } diff --git a/ProjectClock/Models.swift b/ProjectClock/Models.swift index caca24e..cdce614 100644 --- a/ProjectClock/Models.swift +++ b/ProjectClock/Models.swift @@ -7,7 +7,7 @@ import Foundation -struct User +struct User: Decodable { var id: Int var name: String diff --git a/ProjectClock/Net.swift b/ProjectClock/Net.swift index 5571004..fc1aded 100644 --- a/ProjectClock/Net.swift +++ b/ProjectClock/Net.swift @@ -8,6 +8,7 @@ import Foundation /// Base URL of the HTTP server let baseUrl = "http://localhost:8080/api" // TODO: Production settings +let JSON = JSONDecoder() /// API class struct API @@ -57,20 +58,36 @@ func createUrl(_ node: String, _ params: [String: String]? = [:]) -> URL return url!.url! } -/// Send a HTTP request -func send(_ api: API, // API Node - _ params: [String: String]? = [:], // Parameters to send to the server - _ success: @escaping (String) -> Void, // What to do when success - err: @escaping (String) -> Void = {it in} // What to do when errors happen -) +/** + Send a HTTP request + + - Parameter api: API Node (Eg. APIs.register) + - Parameter params: Parameters to send to the server (Check the documentation of the API node to see which parameters you need) + - Parameter success: Callback of what to do when the request successfully returned + - Parameter err: Callback of what to do when an error happens + */ +func send(_ api: API, _ params: [String: String]? = [:], _ success: @escaping (T) -> Void, err: @escaping (String) -> Void = {it in}) { let url = createUrl(api.loc, params) - let task = URLSession.shared.dataTask(with: url) { (data, response, error) in - guard let data = data, let body = String(data: data, encoding: .utf8) else { err("Data cannot be parsed"); return } + // Create task + let task = URLSession.shared.dataTask(with: url) { (raw, response, error) in + + // Check if raw data exists + guard let response = response as? HTTPURLResponse, let raw = raw else { err("Data doesn't exist"); return } + + // If success + if (200...299).contains(response.statusCode) + { + // Parse JSON + guard let obj = try? JSON.decode(T.self, from: raw) else { err("JSON cannot be parsed"); return } + + // Call callback + success(obj) + } - success(body) } + // Execute task task.resume() }