| 
									
										
										
										
											2023-08-09 20:27:52 +08:00
										 |  |  | import 'dart:convert'; | 
					
						
							|  |  |  | import 'package:flutter/material.dart'; | 
					
						
							| 
									
										
										
										
											2023-01-28 21:24:49 +09:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-12-11 21:40:35 +08:00
										 |  |  | import 'package:flutter_hbb/models/peer_model.dart'; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-01-28 21:24:49 +09:00
										 |  |  | import '../../models/platform_model.dart'; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-01-06 19:26:19 +09:00
										 |  |  | class HttpType { | 
					
						
							|  |  |  |   static const kAuthReqTypeAccount = "account"; | 
					
						
							|  |  |  |   static const kAuthReqTypeMobile = "mobile"; | 
					
						
							|  |  |  |   static const kAuthReqTypeSMSCode = "sms_code"; | 
					
						
							|  |  |  |   static const kAuthReqTypeEmailCode = "email_code"; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   static const kAuthResTypeToken = "access_token"; | 
					
						
							|  |  |  |   static const kAuthResTypeEmailCheck = "email_check"; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-06-22 00:43:17 +08:00
										 |  |  | enum UserStatus { kDisabled, kNormal, kUnverified } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-06-21 23:58:13 +08:00
										 |  |  | // to-do: The UserPayload does not contain all the fields of the user.
 | 
					
						
							|  |  |  | // Is all the fields of the user needed?
 | 
					
						
							| 
									
										
										
										
											2022-12-11 21:40:35 +08:00
										 |  |  | class UserPayload { | 
					
						
							|  |  |  |   String name = ''; | 
					
						
							|  |  |  |   String email = ''; | 
					
						
							|  |  |  |   String note = ''; | 
					
						
							| 
									
										
										
										
											2023-06-22 00:43:17 +08:00
										 |  |  |   UserStatus status; | 
					
						
							| 
									
										
										
										
											2023-01-06 19:26:19 +09:00
										 |  |  |   bool isAdmin = false; | 
					
						
							| 
									
										
										
										
											2022-12-11 21:40:35 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  |   UserPayload.fromJson(Map<String, dynamic> json) | 
					
						
							| 
									
										
										
										
											2023-06-22 00:43:17 +08:00
										 |  |  |       : name = json['name'] ?? '', | 
					
						
							| 
									
										
										
										
											2022-12-11 21:40:35 +08:00
										 |  |  |         email = json['email'] ?? '', | 
					
						
							|  |  |  |         note = json['note'] ?? '', | 
					
						
							| 
									
										
										
										
											2023-06-22 00:43:17 +08:00
										 |  |  |         status = json['status'] == 0 | 
					
						
							|  |  |  |             ? UserStatus.kDisabled | 
					
						
							|  |  |  |             : json['status'] == -1 | 
					
						
							|  |  |  |                 ? UserStatus.kUnverified | 
					
						
							|  |  |  |                 : UserStatus.kNormal, | 
					
						
							| 
									
										
										
										
											2023-01-06 19:26:19 +09:00
										 |  |  |         isAdmin = json['is_admin'] == true; | 
					
						
							| 
									
										
										
										
											2023-06-21 23:58:13 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  |   Map<String, dynamic> toJson() { | 
					
						
							|  |  |  |     final Map<String, dynamic> map = { | 
					
						
							|  |  |  |       'name': name, | 
					
						
							| 
									
										
										
										
											2023-06-22 00:43:17 +08:00
										 |  |  |       'status': status == UserStatus.kDisabled | 
					
						
							|  |  |  |           ? 0 | 
					
						
							|  |  |  |           : status == UserStatus.kUnverified | 
					
						
							|  |  |  |               ? -1 | 
					
						
							|  |  |  |               : 1, | 
					
						
							| 
									
										
										
										
											2023-06-21 23:58:13 +08:00
										 |  |  |     }; | 
					
						
							|  |  |  |     return map; | 
					
						
							|  |  |  |   } | 
					
						
							| 
									
										
										
										
											2022-12-11 21:40:35 +08:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class PeerPayload { | 
					
						
							|  |  |  |   String id = ''; | 
					
						
							|  |  |  |   String info = ''; | 
					
						
							|  |  |  |   int? status; | 
					
						
							|  |  |  |   String user = ''; | 
					
						
							|  |  |  |   String user_name = ''; | 
					
						
							|  |  |  |   String note = ''; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   PeerPayload.fromJson(Map<String, dynamic> json) | 
					
						
							|  |  |  |       : id = json['id'] ?? '', | 
					
						
							|  |  |  |         info = json['info'] ?? '', | 
					
						
							|  |  |  |         status = json['status'], | 
					
						
							|  |  |  |         user = json['user'] ?? '', | 
					
						
							|  |  |  |         user_name = json['user_name'] ?? '', | 
					
						
							|  |  |  |         note = json['note'] ?? ''; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   static Peer toPeer(PeerPayload p) { | 
					
						
							| 
									
										
										
										
											2023-06-21 09:30:32 +08:00
										 |  |  |     return Peer.fromJson({"id": p.id, "username": p.user_name}); | 
					
						
							| 
									
										
										
										
											2022-12-11 21:40:35 +08:00
										 |  |  |   } | 
					
						
							|  |  |  | } | 
					
						
							| 
									
										
										
										
											2023-01-06 19:26:19 +09:00
										 |  |  | 
 | 
					
						
							|  |  |  | class LoginRequest { | 
					
						
							|  |  |  |   String? username; | 
					
						
							|  |  |  |   String? password; | 
					
						
							|  |  |  |   String? id; | 
					
						
							|  |  |  |   String? uuid; | 
					
						
							| 
									
										
										
										
											2023-06-22 22:11:35 +08:00
										 |  |  |   bool? autoLogin; | 
					
						
							| 
									
										
										
										
											2023-01-06 19:26:19 +09:00
										 |  |  |   String? type; | 
					
						
							|  |  |  |   String? verificationCode; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   LoginRequest( | 
					
						
							|  |  |  |       {this.username, | 
					
						
							|  |  |  |       this.password, | 
					
						
							|  |  |  |       this.id, | 
					
						
							|  |  |  |       this.uuid, | 
					
						
							| 
									
										
										
										
											2023-06-22 22:11:35 +08:00
										 |  |  |       this.autoLogin, | 
					
						
							| 
									
										
										
										
											2023-01-06 19:26:19 +09:00
										 |  |  |       this.type, | 
					
						
							| 
									
										
										
										
											2023-01-28 21:24:49 +09:00
										 |  |  |       this.verificationCode}); | 
					
						
							| 
									
										
										
										
											2023-01-06 19:26:19 +09:00
										 |  |  | 
 | 
					
						
							|  |  |  |   Map<String, dynamic> toJson() { | 
					
						
							|  |  |  |     final Map<String, dynamic> data = <String, dynamic>{}; | 
					
						
							| 
									
										
										
										
											2023-06-22 15:09:47 +08:00
										 |  |  |     if (username != null) data['username'] = username; | 
					
						
							|  |  |  |     if (password != null) data['password'] = password; | 
					
						
							|  |  |  |     if (id != null) data['id'] = id; | 
					
						
							|  |  |  |     if (uuid != null) data['uuid'] = uuid; | 
					
						
							| 
									
										
										
										
											2023-06-22 22:11:35 +08:00
										 |  |  |     if (autoLogin != null) data['autoLogin'] = autoLogin; | 
					
						
							| 
									
										
										
										
											2023-06-22 15:09:47 +08:00
										 |  |  |     if (type != null) data['type'] = type; | 
					
						
							|  |  |  |     if (verificationCode != null) { | 
					
						
							|  |  |  |       data['verificationCode'] = verificationCode; | 
					
						
							|  |  |  |     } | 
					
						
							| 
									
										
										
										
											2023-08-09 20:27:52 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  |     Map<String, dynamic> deviceInfo = {}; | 
					
						
							|  |  |  |     try { | 
					
						
							|  |  |  |       deviceInfo = jsonDecode(bind.mainGetLoginDeviceInfo()); | 
					
						
							|  |  |  |     } catch (e) { | 
					
						
							|  |  |  |       debugPrint('Failed to decode get device info: $e'); | 
					
						
							|  |  |  |     } | 
					
						
							| 
									
										
										
										
											2023-01-28 21:24:49 +09:00
										 |  |  |     data['deviceInfo'] = deviceInfo; | 
					
						
							| 
									
										
										
										
											2023-01-06 19:26:19 +09:00
										 |  |  |     return data; | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class LoginResponse { | 
					
						
							|  |  |  |   String? access_token; | 
					
						
							|  |  |  |   String? type; | 
					
						
							|  |  |  |   UserPayload? user; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   LoginResponse({this.access_token, this.type, this.user}); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   LoginResponse.fromJson(Map<String, dynamic> json) { | 
					
						
							|  |  |  |     access_token = json['access_token']; | 
					
						
							|  |  |  |     type = json['type']; | 
					
						
							|  |  |  |     user = json['user'] != null ? UserPayload.fromJson(json['user']) : null; | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class RequestException implements Exception { | 
					
						
							|  |  |  |   int statusCode; | 
					
						
							|  |  |  |   String cause; | 
					
						
							|  |  |  |   RequestException(this.statusCode, this.cause); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   @override | 
					
						
							|  |  |  |   String toString() { | 
					
						
							|  |  |  |     return "RequestException, statusCode: $statusCode, error: $cause"; | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  | } |