From 5afe609d9e6adac6d3fa830f3440419b10c30c06 Mon Sep 17 00:00:00 2001 From: Christoph Bayer Date: Fri, 8 Mar 2019 20:31:57 +0100 Subject: [PATCH 1/2] Add support for getting current session --- lib/parse_server_sdk.dart | 2 + lib/src/base/parse_constants.dart | 2 + lib/src/objects/parse_session.dart | 82 ++++++++++++++++++++++++++++++ 3 files changed, 86 insertions(+) create mode 100644 lib/src/objects/parse_session.dart diff --git a/lib/parse_server_sdk.dart b/lib/parse_server_sdk.dart index acd4616df..3df9b6aaa 100644 --- a/lib/parse_server_sdk.dart +++ b/lib/parse_server_sdk.dart @@ -48,6 +48,8 @@ part 'src/objects/parse_response.dart'; part 'src/objects/parse_user.dart'; +part 'src/objects/parse_session.dart'; + part 'src/objects/parse_installation.dart'; part 'src/utils/parse_decoder.dart'; diff --git a/lib/src/base/parse_constants.dart b/lib/src/base/parse_constants.dart index b900b15a4..194262336 100644 --- a/lib/src/base/parse_constants.dart +++ b/lib/src/base/parse_constants.dart @@ -9,6 +9,7 @@ const String keyEndPointUserName = '/users/me'; const String keyEndPointLogin = '/login'; const String keyEndPointLogout = '/logout'; const String keyEndPointUsers = '/users'; +const String keyEndPointSessions = '/sessions'; const String keyEndPointVerificationEmail = '/verificationEmailRequest'; const String keyEndPointRequestPasswordReset = '/requestPasswordReset'; const String keyEndPointClasses = '/classes/'; @@ -28,6 +29,7 @@ const String keyVarAcl = 'ACL'; // Classes const String keyClassMain = 'ParseMain'; const String keyClassUser = '_User'; +const String keyClassSession = '_Session'; const String keyClassInstallation = '_Installation'; const String keyGeoPoint = 'GeoPoint'; const String keyFile = 'File'; diff --git a/lib/src/objects/parse_session.dart b/lib/src/objects/parse_session.dart new file mode 100644 index 000000000..8fd0d9a48 --- /dev/null +++ b/lib/src/objects/parse_session.dart @@ -0,0 +1,82 @@ +part of flutter_parse_sdk; + +class ParseSession extends ParseObject implements ParseCloneable { + @override + clone(Map map) { + print(map); + return this.fromJson(map); + } + + static final String keyVarUser = 'user'; + static final String keyVarCreatedWith = 'createdWith'; + static final String keyVarRestricted = 'restricted'; + static final String keyVarExpiresAt = 'expiresAt'; + static final String keyVarInstallationId = 'installationId'; + + String get sessionToken => super.get(keyVarSessionToken); + + ParseObject get user => super.get(keyVarUser); + + Map get createdWith => + super.get>(keyVarCreatedWith); + + bool get restricted => super.get(keyVarRestricted); + + DateTime get expiresAt => super.get(keyVarExpiresAt); + + String get installationId => super.get(keyVarInstallationId); + + ParseSession({String sessionToken, bool debug, ParseHTTPClient client}) + : super(keyClassSession) { + _debug = isDebugEnabled(objectLevelDebug: debug); + _client = client ?? + ParseHTTPClient( + autoSendSessionId: true, + securityContext: ParseCoreData().securityContext); + } + + Future getCurrentSessionFromServer() async { + try { + Uri tempUri = Uri.parse(_client.data.serverUrl); + + Uri url = Uri( + scheme: tempUri.scheme, + host: tempUri.host, + path: "${tempUri.path}$keyEndPointSessions/me"); + + final response = await _client.get(url); + + return _handleResponse( + this, response, ParseApiRQ.logout, _debug, className); + } on Exception catch (e) { + return _handleException(e, ParseApiRQ.logout, _debug, className); + } + } + + /// Handles an API response and logs data if [bool] debug is enabled + static ParseResponse _handleException( + Exception exception, ParseApiRQ type, bool debug, String className) { + ParseResponse parseResponse = ParseResponse.handleException(exception); + + if (debug) { + logger( + ParseCoreData().appName, className, type.toString(), parseResponse); + } + + return parseResponse; + } + + /// Handles all the response data for this class + static ParseResponse _handleResponse(ParseSession session, Response response, + ParseApiRQ type, bool debug, String className) { + ParseResponse parseResponse = + ParseResponse.handleResponse(session, response); + + if (debug) { + logger( + ParseCoreData().appName, className, type.toString(), parseResponse); + } + + return parseResponse; + } +} From f206b54439d78e84c3db5cc69fdf703125207635 Mon Sep 17 00:00:00 2001 From: Christoph Bayer Date: Sat, 9 Mar 2019 20:40:08 +0100 Subject: [PATCH 2/2] Remove forgotten debug output --- lib/src/objects/parse_session.dart | 1 - 1 file changed, 1 deletion(-) diff --git a/lib/src/objects/parse_session.dart b/lib/src/objects/parse_session.dart index 8fd0d9a48..1bd2fd88b 100644 --- a/lib/src/objects/parse_session.dart +++ b/lib/src/objects/parse_session.dart @@ -3,7 +3,6 @@ part of flutter_parse_sdk; class ParseSession extends ParseObject implements ParseCloneable { @override clone(Map map) { - print(map); return this.fromJson(map); }