getCurrentUserData function

Future<Map<String, dynamic>> getCurrentUserData()

Implementation

Future<Map<String, dynamic>> getCurrentUserData() {
  FlutterSecureStorage storage = storageLocator<FlutterSecureStorage>();

  return loadConfig().then((configStr) {
    Map<String, dynamic> config = json.decode(configStr);
    Map<String, dynamic> userData = {
      'config': config,
      'currentUserId': '',
      'apiKey': '',
      'userData': {},
      'error': false,
      'errorMessage': "",
      'isSuperUser': false,
    };

    String jwtToken = config["jwtToken"];
    if (jwtToken.isEmpty) {
      userData['error'] = true;
      userData['errorMessage'] = "Session expired. Please log in again.";
      return Future.value(userData);
    }

    Map<String, dynamic> payload = getJwtPayload(jwtToken);
    userData['currentUserId'] = payload["public_id"];
    String apiUrlUsersGetData = "users/current_user_d";
    if (cusDebug) {
      logDebug('getCurrentUserData | apiUrlUsersGetData: $apiUrlUsersGetData');
    }
    var api = HttpUtilities();
    return api.httpsCall("get", apiUrlUsersGetData, {}, {}, {}).then((data) {
      if (data['error']) {
        return logError(
          'getCurrentUserData | ERROR [1] | data: ${data.toString()}',
          'GCUD-E010',
        ).then((_) {
          userData['error'] = true;
          userData['errorMessage'] = data['error_message'];
          return userData;
        });
      }

      if (cusDebug) {
        logDebug('getCurrentUserData | SUCCESS [1]');
      }

      userData['userData'] = data['resultset'];
      userData['isSuperUser'] = userData['userData']['superuser'] == "1"
          ? true
          : false; // isAdmin
      if (cusDebug) {
        logDebug('getCurrentUserData | userData has been SET');
      }

      if (config['apiKey'] != null) {
        userData['apiKey'] = config['apiKey'];
        return userData;
      }

      String apiUrlUsersGetApiKeys = "users_api_keys";
      Map<String, dynamic> getParams = {"user_id": userData['currentUserId']};

      if (cusDebug) {
        logDebug(
          'getCurrentUserData | apiUrlUsersGetApiKeys: $apiUrlUsersGetApiKeys'
          ' | getParams: ${getParams.toString()}',
        );
      }

      return api
          .httpsCall("get", apiUrlUsersGetApiKeys, {}, {}, getParams)
          .then((data) {
            if (data['error']) {
              logError(
                'getCurrentUserData | ERROR [2] | data: ${data.toString()}',
                'GCUD-E020',
              ).then((_) {
                // Pass
              });
              if (data['status_code'] == 404 ||
                  data['error_message'] == 'Not Found') {
                return userData;
              }
              userData['error'] = true;
              userData['errorMessage'] = data['error_message'];
              return userData;
            }

            if (cusDebug) {
              logDebug('getCurrentUserData | SUCCESS [2]');
            }

            List<dynamic> userDataApiKeys = json.decode(data['resultset']);
            String apiKey = getBestApiKey(userDataApiKeys);
            if (cusDebug) {
              logDebug('getCurrentUserData | apiKey: $apiKey');
            }

            if (apiKey.isNotEmpty) {
              storage.write(key: "api_key", value: apiKey).then((value) {
                if (cusDebug) {
                  logDebug('getCurrentUserData | storage.apiKey has been SET');
                }
              });
            }

            return userData;
          })
          .catchError((error) {
            logError(
              'getCurrentUserData | ERROR [3] | error: $error',
              'GCUD-E030',
            ).then((_) {
              // Pass
            });
            userData['error'] = true;
            userData['errorMessage'] = error.toString();
            return userData;
          });
    });
  });
}