Dwayne Harris
6 years ago
10 changed files with 174 additions and 270 deletions
-
12elpha-ios.xcodeproj/project.pbxproj
-
98elpha-ios/APIRequest.swift
-
70elpha-ios/AppDelegate.swift
-
99elpha-ios/AuthenticateViewController.swift
-
43elpha-ios/AuthenticationManager.swift
-
43elpha-ios/CoreDataManager.swift
-
4elpha-ios/Elpha.xcdatamodeld/Elpha.xcdatamodel/contents
-
59elpha-ios/InstancesDataManager.swift
-
15elpha-ios/InstancesTableViewController.swift
-
1elpha-ios/MainTabBarController.swift
@ -1,98 +0,0 @@ |
|||
// |
|||
// APIRequest.swift |
|||
// elpha-ios |
|||
// |
|||
// Created by Dwayne Harris on 9/19/18. |
|||
// Copyright © 2018 Elpha. All rights reserved. |
|||
// |
|||
|
|||
import Foundation |
|||
|
|||
extension URLRequest { |
|||
private func percentEscapeString(_ string: String) -> String { |
|||
var characterSet = CharacterSet.alphanumerics |
|||
characterSet.insert(charactersIn: "-._* ") |
|||
|
|||
return string |
|||
.addingPercentEncoding(withAllowedCharacters: characterSet)! |
|||
.replacingOccurrences(of: " ", with: "+") |
|||
} |
|||
|
|||
mutating func encodeParameters(parameters: [String: String]) { |
|||
httpMethod = "POST" |
|||
|
|||
let parameterArray = parameters.map { (arg) -> String in |
|||
let (key, value) = arg |
|||
return "\(key)=\(self.percentEscapeString(value))" |
|||
} |
|||
|
|||
httpBody = parameterArray.joined(separator: "&").data(using: .utf8) |
|||
} |
|||
} |
|||
|
|||
class APIRequest { |
|||
static func get(url: URL, completion: @escaping ([String: Any]?, Error?) -> Void) { |
|||
let request = URLRequest(url: url) |
|||
|
|||
URLSession.shared.dataTask(with: request) { data, response, error in |
|||
guard error == nil else { |
|||
completion(nil, error) |
|||
return |
|||
} |
|||
|
|||
guard let data = data else { |
|||
completion(nil, NSError()) |
|||
return |
|||
} |
|||
|
|||
do { |
|||
completion(try JSONSerialization.jsonObject(with: data) as? [String: Any], nil) |
|||
} catch { |
|||
completion(nil, error) |
|||
} |
|||
} |
|||
} |
|||
|
|||
static func post(url: URL, data: [String: String], completion: @escaping ([String: Any]?, Error?) -> Void) { |
|||
var request = URLRequest(url: url) |
|||
request.setValue("application/json", forHTTPHeaderField: "Accept") |
|||
request.setValue("application/x-www-form-urlencoded", forHTTPHeaderField: "Content-Type") |
|||
request.encodeParameters(parameters: data) |
|||
|
|||
URLSession.shared.dataTask(with: request) { data, response, error in |
|||
guard error == nil else { |
|||
completion(nil, error) |
|||
return |
|||
} |
|||
|
|||
guard let data = data else { |
|||
completion(nil, NSError()) |
|||
return |
|||
} |
|||
|
|||
completion(try? JSONSerialization.jsonObject(with: data) as! [String: Any], nil) |
|||
} |
|||
} |
|||
|
|||
static func handleOAuthResponse(url: URL) throws { |
|||
|
|||
} |
|||
|
|||
static func registerApp(instance: URL, completion: @escaping ([String: Any]?, Error?) -> Void) { |
|||
let data = [ |
|||
"client_name": Config.clientName, |
|||
"redirect_uris": "elpha:authenticate", |
|||
"scopes": "read write follow", |
|||
"website": Config.clientWebsite |
|||
] |
|||
|
|||
APIRequest.post(url: instance.appendingPathComponent("api/v1/apps"), data: data) { data, error in |
|||
guard error == nil else { |
|||
completion(nil, error) |
|||
return |
|||
} |
|||
|
|||
completion(data, nil) |
|||
} |
|||
} |
|||
} |
@ -0,0 +1,43 @@ |
|||
// |
|||
// CoreDataManager.swift |
|||
// elpha-ios |
|||
// |
|||
// Created by Dwayne Harris on 9/28/18. |
|||
// Copyright © 2018 Elpha. All rights reserved. |
|||
// |
|||
|
|||
import CoreData |
|||
import Foundation |
|||
|
|||
public class CoreDataManager { |
|||
static let shared = CoreDataManager() |
|||
|
|||
lazy var persistentContainer: NSPersistentContainer = { |
|||
let container = NSPersistentContainer(name: "Elpha") |
|||
|
|||
container.loadPersistentStores(completionHandler: { (storeDescription, error) in |
|||
if let error = error as NSError? { |
|||
fatalError("Unresolved error \(error), \(error.userInfo)") |
|||
} |
|||
}) |
|||
|
|||
return container |
|||
}() |
|||
|
|||
func getContext() -> NSManagedObjectContext { |
|||
return persistentContainer.viewContext |
|||
} |
|||
|
|||
func saveContext() { |
|||
let context = getContext() |
|||
|
|||
if context.hasChanges { |
|||
do { |
|||
try context.save() |
|||
} catch { |
|||
let nserror = error as NSError |
|||
fatalError("Unresolved error \(nserror), \(nserror.userInfo)") |
|||
} |
|||
} |
|||
} |
|||
} |
Write
Preview
Loading…
Cancel
Save
Reference in new issue