mirror of
https://gitlab.com/comunic/comunicmobile
synced 2024-11-22 12:59:21 +00:00
Upgrade login system
This commit is contained in:
parent
581059cb1d
commit
e5ed4fadda
@ -3,7 +3,6 @@ import 'package:comunic/helpers/preferences_helper.dart';
|
|||||||
import 'package:comunic/helpers/websocket_helper.dart';
|
import 'package:comunic/helpers/websocket_helper.dart';
|
||||||
import 'package:comunic/models/api_request.dart';
|
import 'package:comunic/models/api_request.dart';
|
||||||
import 'package:comunic/models/authentication_details.dart';
|
import 'package:comunic/models/authentication_details.dart';
|
||||||
import 'package:comunic/models/login_tokens.dart';
|
|
||||||
import 'package:comunic/models/new_account.dart';
|
import 'package:comunic/models/new_account.dart';
|
||||||
import 'package:shared_preferences/shared_preferences.dart';
|
import 'package:shared_preferences/shared_preferences.dart';
|
||||||
|
|
||||||
@ -36,7 +35,7 @@ class AccountHelper {
|
|||||||
/// Warning : This method MUST BE CALLED AT LEAST ONCE AFTER APP START !!!
|
/// Warning : This method MUST BE CALLED AT LEAST ONCE AFTER APP START !!!
|
||||||
Future<bool> signedIn() async {
|
Future<bool> signedIn() async {
|
||||||
bool signedIn =
|
bool signedIn =
|
||||||
(await PreferencesHelper.getInstance()).getLoginTokens() != null;
|
(await PreferencesHelper.getInstance()).getLoginToken() != null;
|
||||||
|
|
||||||
// Load current user ID for later use
|
// Load current user ID for later use
|
||||||
if (signedIn && _currentUserID == -1) await _loadCurrentUserID();
|
if (signedIn && _currentUserID == -1) await _loadCurrentUserID();
|
||||||
@ -47,8 +46,8 @@ class AccountHelper {
|
|||||||
/// Sign in user
|
/// Sign in user
|
||||||
Future<AuthResult> signIn(AuthenticationDetails auth) async {
|
Future<AuthResult> signIn(AuthenticationDetails auth) async {
|
||||||
final request = APIRequest(uri: "account/login");
|
final request = APIRequest(uri: "account/login");
|
||||||
request.addString("userMail", auth.email);
|
request.addString("mail", auth.email);
|
||||||
request.addString("userPassword", auth.password);
|
request.addString("password", auth.password);
|
||||||
|
|
||||||
final response = await APIHelper().exec(request);
|
final response = await APIHelper().exec(request);
|
||||||
|
|
||||||
@ -59,10 +58,9 @@ class AccountHelper {
|
|||||||
return AuthResult.TOO_MANY_ATTEMPTS;
|
return AuthResult.TOO_MANY_ATTEMPTS;
|
||||||
else if (response.code != 200) return AuthResult.NETWORK_ERROR;
|
else if (response.code != 200) return AuthResult.NETWORK_ERROR;
|
||||||
|
|
||||||
// Save login tokens
|
// Save login token
|
||||||
final tokensObj = response.getObject()["tokens"];
|
|
||||||
await (await PreferencesHelper.getInstance())
|
await (await PreferencesHelper.getInstance())
|
||||||
.setLoginTokens(LoginTokens(tokensObj["token1"], tokensObj["token2"]));
|
.setLoginToken(response.getObject()["token"]);
|
||||||
|
|
||||||
// Get current user ID
|
// Get current user ID
|
||||||
final userID = await _downloadCurrentUserID();
|
final userID = await _downloadCurrentUserID();
|
||||||
@ -81,10 +79,11 @@ class AccountHelper {
|
|||||||
|
|
||||||
/// Sign out user
|
/// Sign out user
|
||||||
Future<void> signOut() async {
|
Future<void> signOut() async {
|
||||||
await (await PreferencesHelper.getInstance()).setLoginTokens(null);
|
await (await PreferencesHelper.getInstance()).setLoginToken(null);
|
||||||
_currentUserID = 0;
|
_currentUserID = 0;
|
||||||
|
|
||||||
// Close current web socket
|
// Close current web socket
|
||||||
|
await APIRequest.withLogin("account/logout").exec();
|
||||||
WebSocketHelper.close();
|
WebSocketHelper.close();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -178,10 +177,7 @@ class AccountHelper {
|
|||||||
|
|
||||||
/// Get current user ID from the server
|
/// Get current user ID from the server
|
||||||
Future<int> _downloadCurrentUserID() async {
|
Future<int> _downloadCurrentUserID() async {
|
||||||
final response = await APIRequest(
|
final response = await APIRequest.withLogin("account/id").exec();
|
||||||
uri: "user/getCurrentUserID",
|
|
||||||
needLogin: true,
|
|
||||||
).exec();
|
|
||||||
|
|
||||||
if (response.code != 200) return null;
|
if (response.code != 200) return null;
|
||||||
|
|
||||||
|
@ -19,15 +19,13 @@ class APIHelper {
|
|||||||
Future<APIResponse> exec(APIRequest request, {bool multipart = false}) async {
|
Future<APIResponse> exec(APIRequest request, {bool multipart = false}) async {
|
||||||
try {
|
try {
|
||||||
//Add API tokens
|
//Add API tokens
|
||||||
request.addString("serviceName", config().serviceName);
|
request.addString("client", config().clientName);
|
||||||
request.addString("serviceToken", config().serviceToken);
|
|
||||||
|
|
||||||
//Add user tokens (if required)
|
//Add user tokens (if required)
|
||||||
if (request.needLogin) {
|
if (request.needLogin) {
|
||||||
final tokens = (await PreferencesHelper.getInstance()).getLoginTokens();
|
final token = (await PreferencesHelper.getInstance()).getLoginToken();
|
||||||
assert(tokens != null);
|
assert(token != null);
|
||||||
request.addString("userToken1", tokens.tokenOne);
|
request.addString("token", token);
|
||||||
request.addString("userToken2", tokens.tokenTwo);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Determine server URL
|
// Determine server URL
|
||||||
|
@ -1,7 +1,4 @@
|
|||||||
import 'dart:convert';
|
|
||||||
|
|
||||||
import 'package:comunic/models/application_preferences.dart';
|
import 'package:comunic/models/application_preferences.dart';
|
||||||
import 'package:comunic/models/login_tokens.dart';
|
|
||||||
import 'package:shared_preferences/shared_preferences.dart';
|
import 'package:shared_preferences/shared_preferences.dart';
|
||||||
|
|
||||||
/// Preferences helper
|
/// Preferences helper
|
||||||
@ -11,14 +8,14 @@ import 'package:shared_preferences/shared_preferences.dart';
|
|||||||
/// @author Pierre HUBERT
|
/// @author Pierre HUBERT
|
||||||
|
|
||||||
enum PreferencesKeyList {
|
enum PreferencesKeyList {
|
||||||
LOGIN_TOKENS,
|
LOGIN_TOKEN,
|
||||||
ENABLE_DARK_THEME,
|
ENABLE_DARK_THEME,
|
||||||
FORCE_MOBILE_MODE,
|
FORCE_MOBILE_MODE,
|
||||||
SHOW_PERFORMANCE_OVERLAY,
|
SHOW_PERFORMANCE_OVERLAY,
|
||||||
}
|
}
|
||||||
|
|
||||||
const _PreferenceKeysName = {
|
const _PreferenceKeysName = {
|
||||||
PreferencesKeyList.LOGIN_TOKENS: "login_tokens",
|
PreferencesKeyList.LOGIN_TOKEN: "login_token",
|
||||||
PreferencesKeyList.ENABLE_DARK_THEME: "dark_theme",
|
PreferencesKeyList.ENABLE_DARK_THEME: "dark_theme",
|
||||||
PreferencesKeyList.FORCE_MOBILE_MODE: "force_mobile_mode",
|
PreferencesKeyList.FORCE_MOBILE_MODE: "force_mobile_mode",
|
||||||
PreferencesKeyList.SHOW_PERFORMANCE_OVERLAY: "perfs_overlay",
|
PreferencesKeyList.SHOW_PERFORMANCE_OVERLAY: "perfs_overlay",
|
||||||
@ -45,23 +42,28 @@ class PreferencesHelper {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// Set new login tokens
|
/// Set new login tokens
|
||||||
Future<void> setLoginTokens(LoginTokens tokens) async {
|
Future<void> setLoginToken(String token) async {
|
||||||
await setString(PreferencesKeyList.LOGIN_TOKENS,
|
if (token != null)
|
||||||
tokens == null ? "null" : tokens.toString());
|
await setString(PreferencesKeyList.LOGIN_TOKEN, token);
|
||||||
|
else
|
||||||
|
await _sharedPreferences.remove(token);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Get current [LoginTokens]. Returns null if none or in case of failure
|
/// Get current [LoginTokens]. Returns null if none or in case of failure
|
||||||
LoginTokens getLoginTokens() {
|
String getLoginToken() {
|
||||||
try {
|
try {
|
||||||
final string = getString(PreferencesKeyList.LOGIN_TOKENS);
|
final string = getString(PreferencesKeyList.LOGIN_TOKEN);
|
||||||
if (string == null || string == "null") return null;
|
return string;
|
||||||
return LoginTokens.fromJSON(jsonDecode(string));
|
|
||||||
} on Exception catch (e) {
|
} on Exception catch (e) {
|
||||||
print(e.toString());
|
print(e.toString());
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Future<bool> removeKey(PreferencesKeyList key) async {
|
||||||
|
return await _sharedPreferences.remove(_PreferenceKeysName[key]);
|
||||||
|
}
|
||||||
|
|
||||||
Future<bool> setString(PreferencesKeyList key, String value) async {
|
Future<bool> setString(PreferencesKeyList key, String value) async {
|
||||||
return await _sharedPreferences.setString(_PreferenceKeysName[key], value);
|
return await _sharedPreferences.setString(_PreferenceKeysName[key], value);
|
||||||
}
|
}
|
||||||
|
@ -23,8 +23,7 @@ void main() {
|
|||||||
apiServerName: "192.168.1.9:3000",
|
apiServerName: "192.168.1.9:3000",
|
||||||
apiServerUri: "/",
|
apiServerUri: "/",
|
||||||
apiServerSecure: false,
|
apiServerSecure: false,
|
||||||
serviceName: "ComunicFlutter",
|
clientName: "ComunicFlutter",
|
||||||
serviceToken: "G9sZCBmb3IgVWJ1bnR1CkNvbW1lbnRbbmVdPeCkieCkrOCkq",
|
|
||||||
termsOfServicesURL: "http://devweb.local/comunic/current/about.php?cgu",
|
termsOfServicesURL: "http://devweb.local/comunic/current/about.php?cgu",
|
||||||
));
|
));
|
||||||
|
|
||||||
|
@ -10,8 +10,7 @@ void main() {
|
|||||||
apiServerName: "api.communiquons.org",
|
apiServerName: "api.communiquons.org",
|
||||||
apiServerUri: "/",
|
apiServerUri: "/",
|
||||||
apiServerSecure: true,
|
apiServerSecure: true,
|
||||||
serviceName: "ComunicFlutter",
|
clientName: "ComunicFlutter",
|
||||||
serviceToken: "9KfSwmB76U9UUwjXngDG7PeYccNfy",
|
|
||||||
termsOfServicesURL: "https://about.communiquons.org/about/terms/",
|
termsOfServicesURL: "https://about.communiquons.org/about/terms/",
|
||||||
));
|
));
|
||||||
|
|
||||||
|
@ -9,22 +9,20 @@ class Config {
|
|||||||
final String apiServerName;
|
final String apiServerName;
|
||||||
final String apiServerUri;
|
final String apiServerUri;
|
||||||
final bool apiServerSecure;
|
final bool apiServerSecure;
|
||||||
final String serviceName;
|
final String clientName;
|
||||||
final String serviceToken;
|
|
||||||
final String termsOfServicesURL;
|
final String termsOfServicesURL;
|
||||||
|
|
||||||
const Config({
|
const Config({
|
||||||
@required this.apiServerName,
|
@required this.apiServerName,
|
||||||
@required this.apiServerUri,
|
@required this.apiServerUri,
|
||||||
@required this.apiServerSecure,
|
@required this.apiServerSecure,
|
||||||
@required this.serviceName,
|
@required this.clientName,
|
||||||
@required this.serviceToken,
|
|
||||||
@required this.termsOfServicesURL,
|
@required this.termsOfServicesURL,
|
||||||
}) : assert(apiServerName != null),
|
}) : assert(apiServerName != null),
|
||||||
assert(apiServerUri != null),
|
assert(apiServerUri != null),
|
||||||
assert(apiServerSecure != null),
|
assert(apiServerSecure != null),
|
||||||
assert(serviceName != null),
|
assert(clientName != null),
|
||||||
assert(serviceToken != null),
|
|
||||||
assert(termsOfServicesURL != null);
|
assert(termsOfServicesURL != null);
|
||||||
|
|
||||||
/// Get and set static configuration
|
/// Get and set static configuration
|
||||||
|
@ -1,23 +0,0 @@
|
|||||||
import 'dart:convert';
|
|
||||||
|
|
||||||
/// Login tokens model
|
|
||||||
///
|
|
||||||
/// @author Pierre HUBERT
|
|
||||||
|
|
||||||
class LoginTokens {
|
|
||||||
final String tokenOne;
|
|
||||||
final String tokenTwo;
|
|
||||||
|
|
||||||
const LoginTokens(this.tokenOne, this.tokenTwo)
|
|
||||||
: assert(tokenOne != null),
|
|
||||||
assert(tokenTwo != null);
|
|
||||||
|
|
||||||
LoginTokens.fromJSON(Map<String, dynamic> json)
|
|
||||||
: tokenOne = json["token_one"],
|
|
||||||
tokenTwo = json["token_two"];
|
|
||||||
|
|
||||||
@override
|
|
||||||
String toString() {
|
|
||||||
return jsonEncode({"token_one": tokenOne, "token_two": tokenTwo});
|
|
||||||
}
|
|
||||||
}
|
|
Loading…
Reference in New Issue
Block a user