138 lines
		
	
	
		
			4.3 KiB
		
	
	
	
		
			Dart
		
	
	
			
		
		
	
	
			138 lines
		
	
	
		
			4.3 KiB
		
	
	
	
		
			Dart
		
	
	
| import 'dart:convert';
 | ||
| import 'dart:io';
 | ||
| import 'package:encrypt/encrypt.dart' as encrypt;
 | ||
| import 'package:flutter/src/widgets/framework.dart';
 | ||
| import 'package:pointycastle/asymmetric/api.dart' show RSAPublicKey;
 | ||
| import 'package:qhd_prevention/pages/mine/mine_set_pwd_page.dart';
 | ||
| import 'package:qhd_prevention/tools/tools.dart';
 | ||
| import 'package:shared_preferences/shared_preferences.dart';
 | ||
| import 'package:fluttertoast/fluttertoast.dart';
 | ||
| import 'package:permission_handler/permission_handler.dart';
 | ||
| import '../http/ApiService.dart';
 | ||
| 
 | ||
| class AuthService {
 | ||
|   static const _keyUser = 'USER';
 | ||
|   static const _keyRemember = 'remember';
 | ||
|   static const _keyIsLoggedIn = 'isLoggedIn';
 | ||
| 
 | ||
|   /// 登录
 | ||
|   static Future<Map<String, dynamic>> login(String username, String password) async {
 | ||
|     final parser = encrypt.RSAKeyParser();
 | ||
|     final pub = parser.parse(ApiService.publicKey) as RSAPublicKey;
 | ||
|     final encrypter = encrypt.Encrypter(encrypt.RSA(publicKey: pub));
 | ||
| 
 | ||
|     final plain = 'zcloudchina$username,zy,$password';
 | ||
| 
 | ||
|     String encrypted;
 | ||
|     try {
 | ||
|       encrypted = encrypter.encrypt(plain).base64;
 | ||
|     } catch (e) {
 | ||
|       Fluttertoast.showToast(msg: '加密失败:$e');
 | ||
|       return {} ;
 | ||
|       // return false;
 | ||
|     }
 | ||
| 
 | ||
|     final data = await ApiService.loginCheck(encrypted);
 | ||
|     final result = data['result'] as String? ?? '';
 | ||
|     if (result != 'success') {
 | ||
|       Fluttertoast.showToast(msg: data['msg'] ?? '');
 | ||
|       return data;
 | ||
|       // return false;
 | ||
|     }
 | ||
| 
 | ||
| 
 | ||
| 
 | ||
|     final prefs = await SharedPreferences.getInstance();
 | ||
|     await prefs.setString(_keyUser, json.encode(data));
 | ||
|     await prefs.setStringList(_keyRemember, [username, password]);
 | ||
|     await prefs.setBool(_keyIsLoggedIn, true);
 | ||
| 
 | ||
|     SessionService.instance
 | ||
|       ..setLoginUserId(data['USER_ID'] as String)
 | ||
|       ..setCorpinfoId(data['CORPINFO_ID'] as String)
 | ||
|       ..setDeptId(data['DEPARTMENT_ID'] as String)
 | ||
|       ..setDeptLevel(data['DEPARTMENT_LEVEL'] as String)
 | ||
|       ..setIsRest(data['ISREST'] as String)
 | ||
|       ..setUsername(data['NAME'] as String)
 | ||
|       ..setLoginUser(data);
 | ||
| 
 | ||
|     return data;
 | ||
|     // return true;
 | ||
|   }
 | ||
|   /// 检查更新
 | ||
|   static Future<Map<String, dynamic>> checkUpdate() async {
 | ||
|     final data = await ApiService.getUpdateInfo();
 | ||
|     final result = data['result'] as String? ?? '';
 | ||
|     if (result == 'success') {
 | ||
|       return data;
 | ||
|     }
 | ||
|     return {};
 | ||
|   }
 | ||
|   // 检查并请求相机权限
 | ||
|   static Future<bool> checkCameraPermission() async {
 | ||
|     final status = await Permission.camera.status;
 | ||
|     if (status.isDenied) {
 | ||
|       final result = await Permission.camera.request();
 | ||
|       return result.isGranted;
 | ||
|     }
 | ||
|     return status.isGranted;
 | ||
|   }
 | ||
| 
 | ||
| // 检查并请求照片库权限(iOS)和存储权限(Android)
 | ||
|   static Future<bool> checkPhotoLibraryPermission() async {
 | ||
|     if (Platform.isIOS) {
 | ||
|       final status = await Permission.photos.status;
 | ||
|       if (status.isDenied) {
 | ||
|         final result = await Permission.photos.request();
 | ||
|         return result.isGranted;
 | ||
|       }
 | ||
|       return status.isGranted;
 | ||
|     } else {
 | ||
|       final status = await Permission.storage.status;
 | ||
|       if (status.isDenied) {
 | ||
|         final result = await Permission.storage.request();
 | ||
|         return result.isGranted;
 | ||
|       }
 | ||
|       return status.isGranted;
 | ||
|     }
 | ||
|   }
 | ||
| 
 | ||
|   /// 验证是否已登录(通过重新登录)
 | ||
|   static Future<Map<String, dynamic>> isLoggedIn() async {
 | ||
|     final prefs = await SharedPreferences.getInstance();
 | ||
|     final isLocalLoggedIn = prefs.getBool(_keyIsLoggedIn) ?? false;
 | ||
|     if (!isLocalLoggedIn) return {};
 | ||
| 
 | ||
|     final remember = prefs.getStringList(_keyRemember);
 | ||
|     if (remember == null || remember.length < 2) return {};
 | ||
| 
 | ||
|     final username = remember[0];
 | ||
|     final password = remember[1];
 | ||
| 
 | ||
|     // 用存储的账号密码重新登录
 | ||
|     final data = await login(username, password);
 | ||
|     if (data.isEmpty||data['result']!= 'success') {
 | ||
|       await logout();
 | ||
|       return data;
 | ||
|     }
 | ||
|     return data;
 | ||
|   }
 | ||
| 
 | ||
| 
 | ||
|   /// 获取已保存的用户信息
 | ||
|   static Future<Map<String, dynamic>?> getUser() async {
 | ||
|     final prefs = await SharedPreferences.getInstance();
 | ||
|     final jsonStr = prefs.getString(_keyUser);
 | ||
|     if (jsonStr == null) return null;
 | ||
|     return json.decode(jsonStr);
 | ||
|   }
 | ||
| 
 | ||
|   /// 登出
 | ||
|   static Future<void> logout() async {
 | ||
|     final prefs = await SharedPreferences.getInstance();
 | ||
|     await prefs.remove(_keyUser);
 | ||
|     await prefs.remove(_keyRemember);
 | ||
|     await prefs.setBool(_keyIsLoggedIn, false);
 | ||
|   }
 | ||
| }
 |