@@ -10,56 +10,29 @@ import Foundation
1010import UIKit
1111import Alamofire
1212
13−enum ResultR: Int {
14− case internalServerError = 500
15− case exceededContent = 470
16− case longContent = 471
17− case incorrectContent = 472
18− case impossibleContent = 473
19− case invalidTocken = 498
20− case alreadyRegistered = 409
21− case invalidCode = 403
22− case badAccess = 400
23− case tooMuchToAdd = 406
24− case notFound = 404
25− case success1 = 204
26− case success = 200
27−}
28−
2913class Model{
3014
3115 static let invalidTocken = 498
3216
33− static var hashTagTree: CompletionTree?
17+ static var hashTagTree: CompletionTree?
3418
3519 private static var isValidTocken: ((Int)->())? = { responce in
3620 print(responce)
3721 if responce == invalidTocken {
38−
3922 DataStorage.standard.setIsLoggedIn(value: false, with: 0)
4023 (UIApplication.shared.delegate as! AppDelegate).relaunch()
41−
42− Model.logout {
43− print("Logout Is Successful")
44− }
4524 }
4625 }
4726
4827 private static let baseUrl = "https://valera-denis.herokuapp.com"
4928 static let decoder = JSONDecoder()
50−
51− static let authMeURL = URL(string: "\(baseUrl)/authentication/me")!
52− static let deactivateURL = URL(string: "\(baseUrl)/deactivateAll")!
53− static let registerMeURL = URL(string: "\(baseUrl)/authentication/register")!
54− static let authVerifyURL = URL(string: "\(baseUrl)/authentication/verify")!
29+
5530 static let authenticationURL = URL(string:"\(baseUrl)/authentication/login")!
56− static let logOutURL = URL(string:"\(baseUrl)/authentication/logout")!
5731 static let postsLastURL = URL(string:"\(baseUrl)/posts/last")!
5832 static let postsForUserURL = URL(string:"\(baseUrl)/posts/forUser")!
5933 static let postsPublishURL = URL(string:"\(baseUrl)/posts/publish")!
6034 static let usersURL = URL(string:"\(baseUrl)/users")!
6135 static let usersAllURL = URL(string:"\(baseUrl)/users/all")!
62− static let usersUpdateURL = URL(string:"\(baseUrl)/users/update")!
6336 static let channelsGetURL = URL(string: "\(baseUrl)/channels/get")!
6437 static let channelsUpdateURL = URL(string: "\(baseUrl)/channels/update")!
6538 static let channelsListURL = URL(string: "\(baseUrl)/channels")!
@@ -76,7 +49,6 @@ class Model{
7649 static let messagesGetGroupChatURL = URL(string: "\(baseUrl)/messages/get/groupChat")! //r
7750 static let messagesSendURL = URL(string: "\(baseUrl)/messages/send")!
7851 static let messagesGetUserChatURL = URL(string: "\(baseUrl)/messages/get/userChat")!
79− static let facultySearchURL = URL(string: "\(baseUrl)/faculty/search")!
8052
8153
8254 struct QueryPosts<T: Codable>: Codable {
@@ -148,8 +120,6 @@ class Model{
148120 var lastName: String
149121 var firstName: String
150122 var id: Int
151− var faculty: Faculty
152− var email: String
153123
154124 func fullName() -> String {
155125 return "\(firstName) \(lastName)"
@@ -213,108 +183,24 @@ class Model{
213183 }
214184 }
215185
216− struct AuthStatus: Codable {
217− var userStatus: String
218−
219− init(){
220− userStatus = "invalid"
221− }
222− }
223−
224− static func logout(completion: @escaping (()->())){
225− var request = URLRequest(url: logOutURL)
226− request.httpMethod = "POST"
186+ static func authenticate(with id: Int, completion: @escaping ((Bool)->())) {
227187
228− AF.request(request).response { (responce) in
229− isValidTocken?(responce.response?.statusCode ?? 498)
230−
231− if let code = responce.response?.statusCode, code == 498 {
232− return
233− }
234−
235− completion()
236− }
237− }
238−
239− /*
240− "email": "vchernyshev@hse.ru",
241− "middleName": "Algebrovich",
242− "lastName": "Leonidov",
243− "faculty": "cs.hse.ru/dse",
244− "firstName": "Seva"
245− */
246−
247− struct NewRegistration: Codable{
248− var email: String
249− var firstName: String?
250− var middleName: String?
251− var lastName: String?
252− var faculty: String?
253− }
254−
255− static func register(object: NewRegistration, completion: @escaping (()->())) {
256− var request = URLRequest(url: registerMeURL)
257− request.httpBody = try? JSONEncoder().encode(object)
188+ let json: [String:Any] = ["authenticationId" : id]
189+ let jsonData = try? JSONSerialization.data(withJSONObject: json)
258190
191+ var request = URLRequest(url: authenticationURL)
259192 request.httpMethod = "POST"
260− request.setValue("application/json; charset=utf-8", forHTTPHeaderField: "Content-Type")
261193
262− AF.request(request).response { (responce) in
263−
264− guard let code = responce.response?.statusCode else { return }
265− isValidTocken?(code)
266−
267− if let code = responce.response?.statusCode, code == 498 {
268− return
269− }
270−
271− if code == 204 {
272−
273− let fields = responce.response?.allHeaderFields as? [String :String]
274− let cookies = HTTPCookie.cookies(withResponseHeaderFields: fields!, for: responce.response!.url!)
275− HTTPCookieStorage.shared.setCookie(cookies[0])
276−
277− completion()
278− }
279− }
280− }
281−
282− // true only if everything is good
283− static func verify(with code: Int, completion: @escaping ((Bool)->())){
284− var request = URLRequest(url: authVerifyURL)
285− request.httpMethod = "POST"
286− request.httpBody = "\(code)".data(using: .utf8)
194+ // insert json data to the request
195+ request.httpBody = jsonData
287196 request.setValue("application/json; charset=utf-8", forHTTPHeaderField: "Content-Type")
288197
289198 AF.request(request).response { (responce) in
290199
291− guard let statusCode = responce.response?.statusCode else { completion(false); return }
292− isValidTocken?(statusCode)
293−
294− if let code = responce.response?.statusCode, code == 498 {
295− return
296− }
297−
298− if statusCode == 204 {
299− // at this point cookies are set
300− completion(true)
301− } else {
200+ guard let realResponse = responce.response, realResponse.statusCode == 200 else
201+ {
202+ print("Not a 200 response")
302203 completion(false)
303− }
304− }
305− }
306−
307− // yes or no
308− static func authenticateMe(completion: @escaping ((Bool)->())){
309− var request = URLRequest(url: authMeURL)
310− request.httpMethod = "POST"
311−
312− AF.request(request).response { (responce) in
313−
314− guard let statusCode = responce.response?.statusCode else { completion(false); return }
315− isValidTocken?(statusCode)
316−
317− if let code = responce.response?.statusCode, code == 498 {
318204 return
319205 }
320206
@@ -324,45 +210,14 @@ class Model{
324210 return
325211 }
326212
327− DataStorage.standard.setIsLoggedIn(value: true, with: personId)
328− completion(true)
329− }
330− }
331−
332− // register, ok or invalid
333− static func authenticate(with email: String, completion: @escaping ((AuthStatus)->())) {
334−
335− let json: [String:Any] = ["authenticationEmail" : email]
336− let jsonData = try? JSONSerialization.data(withJSONObject: json)
337−
338− var request = URLRequest(url: authenticationURL)
339− request.httpMethod = "POST"
340−
341− // insert json data to the request
342− request.httpBody = jsonData
343− request.setValue("application/json; charset=utf-8", forHTTPHeaderField: "Content-Type")
344−
345− AF.request(request).response { (response) in
213+ let fields = realResponse.allHeaderFields as? [String :String]
346214
347− guard let realResponse = response.response, realResponse.statusCode == 200 else
348− {
349− print("Not a 200 response")
350− completion(AuthStatus())
351− return
352− }
353−
354− guard let json = response.data else { return }
355− guard let res = try? decoder.decode(AuthStatus.self, from: json) else { return }
215+ let cookies = HTTPCookie.cookies(withResponseHeaderFields: fields!, for: realResponse.url!)
356216
357− if realResponse.statusCode == 200 && res.userStatus == "registered"
358− {
359− // at this point cookies are set
360− let fields = realResponse.allHeaderFields as? [String :String]
361− let cookies = HTTPCookie.cookies(withResponseHeaderFields: fields!, for: realResponse.url!)
362− HTTPCookieStorage.shared.setCookie(cookies[0])
363− }
217+ HTTPCookieStorage.shared.setCookie(cookies[0])
364218
365− completion(res)
219+ DataStorage.standard.setIsLoggedIn(value: true, with: personId)
220+ completion(true)
366221 }
367222 }
368223
@@ -412,10 +267,6 @@ class Model{
412267
413268 isValidTocken?(response.response?.statusCode ?? 498)
414269
415− if let code = response.response?.statusCode, code == 498 {
416− return
417− }
418−
419270 guard let json = response.data else { return }
420271
421272 guard let newQueery = try? decoder.decode(QueryPosts<Posts>.self, from: json) else { print("no")
@@ -427,7 +278,7 @@ class Model{
427278 }
428279
429280
430− static func createAndPublish(body: [Attachments], tags: [String], completion: @escaping ((ResultR)->())){
281+ static func createAndPublish(body: [Attachments], tags: [String]){
431282 let jsonUpd = CreatedPost(body: body, tags: tags)
432283 var request = URLRequest(url: postsPublishURL)
433284
@@ -441,18 +292,6 @@ class Model{
441292 (response) in
442293
443294 isValidTocken?(response.response?.statusCode ?? 498)
444−
445− if let code = response.response?.statusCode, code == 498 {
446− return
447− }
448−
449− if let code = response.response?.statusCode,
450− let result = ResultR(rawValue: code)
451− {
452− completion(result)
453− } else {
454− completion(.internalServerError)
455− }
456295 }
457296 }
458297
@@ -478,10 +317,6 @@ class Model{
478317
479318 isValidTocken?(response.response?.statusCode ?? 498)
480319
481− if let code = response.response?.statusCode, code == 498 {
482− return
483− }
484−
485320 guard let json = response.data else { return }
486321
487322 guard let newPost = try? decoder.decode(QueryPosts<Posts>.self, from: json) else { return }
@@ -494,7 +329,7 @@ class Model{
494329
495330 static func getUsers(for ids: [Int], completion: @escaping (([Int:Users])->())){
496331 let json = "\(Set(ids))"
497−
332+ print(json)
498333 var request = URLRequest(url: usersURL)
499334
500335 request.httpMethod = "POST"
@@ -508,16 +343,11 @@ class Model{
508343
509344 isValidTocken?(response.response?.statusCode ?? 498)
510345
511− if let code = response.response?.statusCode, code == 498 {
512− return
513− }
514−
515346 guard let json = response.data else { return }
516347
517348 guard let users = try? decoder.decode([Users].self, from: json) else { return }
518349
519350 var dict: [Int:Users] = [:]
520−
521351 users.forEach({ (user) in
522352 dict[user.id] = user
523353 })
@@ -544,9 +374,6 @@ class Model{
544374
545375 isValidTocken?(response.response?.statusCode ?? 498)
546376
547− if let code = response.response?.statusCode, code == 498 {
548− return
549− }
550377
551378 guard let json = response.data else { return }
552379
@@ -558,7 +385,7 @@ class Model{
558385 }
559386
560387
561− static func createChannel(with channel: Channels, completion: @escaping ((ResultR)->())) {
388+ static func createChannel(with channel: Channels) {
562389
563390 var request = URLRequest(url: channelsCreateURL)
564391 request.httpMethod = "POST"
@@ -569,13 +396,6 @@ class Model{
569396 (response) in
570397
571398 isValidTocken?(response.response?.statusCode ?? 498)
572−
573− if let code = response.response?.statusCode, let result = ResultR(rawValue: code) {
574− completion(result)
575− return
576− }
577−
578− completion(ResultR.internalServerError)
579399 }
580400
581401 }
@@ -588,9 +408,6 @@ class Model{
588408 AF.request(request).responseJSON { (response) in
589409
590410 isValidTocken?(response.response?.statusCode ?? 498)
591− if let code = response.response?.statusCode, code == 498 {
592− return
593− }
594411
595412 guard let json = response.data else { return }
596413
@@ -609,9 +426,6 @@ class Model{
609426
610427 AF.request(request).response { (response) in
611428 isValidTocken?(response.response?.statusCode ?? 498)
612− if let code = response.response?.statusCode, code == 498 {
613− return
614− }
615429 }
616430 completion()
617431 }
@@ -627,9 +441,6 @@ class Model{
627441 (response) in
628442
629443 isValidTocken?(response.response?.statusCode ?? 498)
630− if let code = response.response?.statusCode, code == 498 {
631− return
632− }
633444 }
634445 }
635446
@@ -652,9 +463,6 @@ class Model{
652463 }
653464
654465 isValidTocken?(response.response?.statusCode ?? 498)
655− if let code = response.response?.statusCode, code == 498 {
656− return
657− }
658466 }
659467 }
660468
@@ -730,13 +538,12 @@ class Model{
730538 (response) in
731539
732540 isValidTocken?(response.response?.statusCode ?? 498)
733− if let code = response.response?.statusCode, code == 498 {
734− return
735− }
736541
737542 guard let json = response.data else { return }
738543
739544 guard let newQueery = try? decoder.decode(QueryPosts<Posts>.self, from: json) else { return }
545+
546+ // idUser = newQueery.users
740547 completion((newQueery.users, newQueery.response))
741548 }
742549 }
@@ -746,9 +553,6 @@ class Model{
746553 AF.request(URLRequest(url: hashTagTreeURL)).responseJSON {
747554 (response) in
748555 isValidTocken?(response.response?.statusCode ?? 498)
749− if let code = response.response?.statusCode, code == 498 {
750− return
751− }
752556 guard let json = response.data else { return }
753557 guard let tree = try? decoder.decode(CompletionTree.self, from: json) else { return }
754558 completion(tree)
@@ -766,10 +570,6 @@ class Model{
766570 AF.request(request).responseJSON { response in
767571 isValidTocken?(response.response?.statusCode ?? 498)
768572
769− if let code = response.response?.statusCode, code == 498 {
770− return
771− }
772−
773573 guard let json = response.data else { return }
774574 let dialogs = try! decoder.decode(QueryPosts<Dialog>.self, from: json)
775575
@@ -822,12 +622,7 @@ class Model{
822622
823623 struct UserChat: Codable {
824624 var user: Int
825− var lastMessage: LastMessage?
826−
827− init(user: Int, lastMessage: LastMessage? = nil) {
828− self.user = user
829− self.lastMessage = lastMessage
830− }
625+ var lastMessage: LastMessage
831626 }
832627
833628 struct Group: Codable {
@@ -941,9 +736,6 @@ class Model{
941736 AF.request(request).response { (response) in
942737
943738 isValidTocken?(response.response?.statusCode ?? 498)
944− if let code = response.response?.statusCode, code == 498 {
945− return
946− }
947739
948740 guard let json = response.data else { return }
949741 let stringInt = String.init(data: json, encoding: String.Encoding.utf8)
@@ -953,7 +745,7 @@ class Model{
953745 }
954746 }
955747
956− static func getMessagesFor(typeOfChat: Model.Dialog, chat id: Int, exclusiveFrom: Int? = nil, limit l: Int = 25, direction: String = "backward", completion: @escaping (([LastMessage])->()))
748+ static func getMessagesFor(typeOfChat: Model.Dialog, chat id: Int, exclusiveFrom: Int? = nil, limit l: Int = 10, direction: String = "backward", completion: @escaping (([LastMessage])->()))
957749 {
958750 let req = GeneralRequest<Int>(direction: direction, limit: l, exclusiveFrom: exclusiveFrom, request: id)
959751 var request: URLRequest?
@@ -972,9 +764,6 @@ class Model{
972764 AF.request(request!).response { (response) in
973765
974766 isValidTocken?(response.response?.statusCode ?? 498)
975− if let code = response.response?.statusCode, code == 498 {
976− return
977− }
978767
979768 guard let json = response.data else { return }
980769 guard let messages = try? decoder.decode([LastMessage].self, from: json) else { return }
@@ -992,10 +781,6 @@ class Model{
992781
993782 AF.request(request).response { (response) in
994783 isValidTocken?(response.response?.statusCode ?? 498)
995−
996− if let code = response.response?.statusCode, code == 498 {
997− return
998− }
999784 }
1000785
1001786 completion()
@@ -1010,10 +795,6 @@ class Model{
1010795
1011796 AF.request(request).response { (response) in
1012797 isValidTocken?(response.response?.statusCode ?? 498)
1013−
1014− if let code = response.response?.statusCode, code == 498 {
1015− return
1016− }
1017798 }
1018799
1019800 // completion()
@@ -1056,7 +837,7 @@ class Model{
1056837 }
1057838 }
1058839
1059− static func sendMessage(message: SendMessage, completion: @escaping ((ResultR)->())){
840+ static func sendMessage(message: SendMessage, completion: @escaping (()->())){
1060841
1061842 var request = URLRequest(url: messagesSendURL)
1062843 request.setValue("application/json; charset=utf-8", forHTTPHeaderField: "Content-Type")
@@ -1066,84 +847,6 @@ class Model{
1066847 AF.request(request).response { (response) in
1067848 isValidTocken?(response.response?.statusCode ?? 498)
1068849
1069− if let code = response.response?.statusCode, code == 498 {
1070− return
1071− }
1072−
1073− if let result = ResultR(rawValue: response.response!.statusCode){
1074− completion(result)
1075− } else {
1076− completion(.internalServerError)
1077− }
1078− }
1079− }
1080−
1081− struct Faculty: Codable
1082− {
1083−
1084− var path: String
1085− var url: String
1086− var campusName: String
1087− var campusCode: String
1088− var name: String
1089− var tags: [String]
1090− var address: String
1091−
1092− }
1093−
1094− static func searchFaculty(string: String, completion: @escaping (([Model.Faculty])->()))
1095− {
1096− var request = URLRequest(url: facultySearchURL)
1097− request.httpMethod = "POST"
1098− request.httpBody = string.data(using: .utf8)
1099− request.setValue("text/plain;charset=utf-8", forHTTPHeaderField: "Content-Type")
1100−
1101− AF.request(request).response { (response) in
1102− isValidTocken?(response.response?.statusCode ?? 498)
1103−
1104− if let code = response.response?.statusCode, code == 498 {
1105− return
1106− }
1107−
1108− guard let json = response.data else { return }
1109− guard let faculties = try? decoder.decode([Faculty].self, from: json) else { return }
1110−
1111− completion(faculties)
1112− }
1113− }
1114−
1115− static func userUpdate(with newUser: NewRegistration, completion: @escaping ((Bool)->())) {
1116− var request = URLRequest(url: usersUpdateURL)
1117− request.setValue("application/json; charset=utf-8", forHTTPHeaderField: "Content-Type")
1118− request.httpMethod = "POST"
1119− request.httpBody = try? JSONEncoder().encode(newUser)
1120−
1121− AF.request(request).response { (response) in
1122− isValidTocken?(response.response?.statusCode ?? 498)
1123−
1124− if let code = response.response?.statusCode, code == 498 {
1125− return
1126− }
1127−
1128− if let code = response.response?.statusCode, code != 204{
1129− completion (false)
1130− } else {
1131− completion(true)
1132− }
1133− }
1134− }
1135−
1136− static func deactivateAll(completion: @escaping (()->())){
1137− var request = URLRequest(url: deactivateURL)
1138− request.httpMethod = "DELETE"
1139−
1140− AF.request(request).response { (responce) in
1141− isValidTocken?(responce.response?.statusCode ?? 498)
1142−
1143− if let code = responce.response?.statusCode, code == 498 {
1144− return
1145− }
1146−
1147850 completion()
1148851 }
1149852 }