flutter_integrated_whb/lib/services/auth_service.dart

138 lines
4.3 KiB
Dart
Raw Normal View History

2025-08-19 11:06:16 +08:00
import 'dart:convert';
2025-09-15 15:54:03 +08:00
import 'dart:io';
2025-08-19 11:06:16 +08:00
import 'package:encrypt/encrypt.dart' as encrypt;
2025-09-09 20:08:10 +08:00
import 'package:flutter/src/widgets/framework.dart';
2025-08-19 11:06:16 +08:00
import 'package:pointycastle/asymmetric/api.dart' show RSAPublicKey;
2025-09-08 17:53:44 +08:00
import 'package:qhd_prevention/pages/mine/mine_set_pwd_page.dart';
2025-08-19 11:06:16 +08:00
import 'package:qhd_prevention/tools/tools.dart';
import 'package:shared_preferences/shared_preferences.dart';
import 'package:fluttertoast/fluttertoast.dart';
2025-09-15 15:54:03 +08:00
import 'package:permission_handler/permission_handler.dart';
2025-08-19 11:06:16 +08:00
import '../http/ApiService.dart';
class AuthService {
static const _keyUser = 'USER';
static const _keyRemember = 'remember';
static const _keyIsLoggedIn = 'isLoggedIn';
/// 登录
2025-09-09 20:08:10 +08:00
static Future<Map<String, dynamic>> login(String username, String password) async {
2025-08-19 11:06:16 +08:00
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');
2025-09-09 20:08:10 +08:00
return {} ;
// return false;
2025-08-19 11:06:16 +08:00
}
final data = await ApiService.loginCheck(encrypted);
final result = data['result'] as String? ?? '';
if (result != 'success') {
2025-08-29 09:52:48 +08:00
Fluttertoast.showToast(msg: data['msg'] ?? '');
2025-09-09 20:08:10 +08:00
return data;
// return false;
2025-08-19 11:06:16 +08:00
}
2025-09-09 20:08:10 +08:00
2025-09-08 17:53:44 +08:00
2025-08-19 11:06:16 +08:00
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
2025-09-19 09:36:32 +08:00
..setLoginUserId(data['USER_ID'] ?? '' )
..setCorpinfoId(data['CORPINFO_ID'] ?? '' )
..setDeptId(data['DEPARTMENT_ID'] ?? '' )
..setDeptLevel(data['DEPARTMENT_LEVEL'] ?? '' )
..setIsRest(data['ISREST'] ?? '' )
..setUsername(data['NAME'] ?? '' )
2025-08-19 11:06:16 +08:00
..setLoginUser(data);
2025-09-09 20:08:10 +08:00
return data;
// return true;
2025-08-19 11:06:16 +08:00
}
/// 检查更新
static Future<Map<String, dynamic>> checkUpdate() async {
final data = await ApiService.getUpdateInfo();
final result = data['result'] as String? ?? '';
if (result == 'success') {
return data;
}
return {};
}
2025-09-15 15:54:03 +08:00
// 检查并请求相机权限
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;
}
2025-08-19 11:06:16 +08:00
2025-09-15 15:54:03 +08:00
// 检查并请求照片库权限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;
}
}
2025-08-19 11:06:16 +08:00
/// 验证是否已登录(通过重新登录)
2025-09-09 20:08:10 +08:00
static Future<Map<String, dynamic>> isLoggedIn() async {
2025-08-19 11:06:16 +08:00
final prefs = await SharedPreferences.getInstance();
final isLocalLoggedIn = prefs.getBool(_keyIsLoggedIn) ?? false;
2025-09-09 20:08:10 +08:00
if (!isLocalLoggedIn) return {};
2025-08-19 11:06:16 +08:00
final remember = prefs.getStringList(_keyRemember);
2025-09-09 20:08:10 +08:00
if (remember == null || remember.length < 2) return {};
2025-08-19 11:06:16 +08:00
final username = remember[0];
final password = remember[1];
// 用存储的账号密码重新登录
2025-09-09 20:08:10 +08:00
final data = await login(username, password);
if (data.isEmpty||data['result']!= 'success') {
2025-08-19 11:06:16 +08:00
await logout();
2025-09-09 20:08:10 +08:00
return data;
2025-08-19 11:06:16 +08:00
}
2025-09-09 20:08:10 +08:00
return data;
2025-08-19 11:06:16 +08:00
}
/// 获取已保存的用户信息
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);
}
}