createUser method

Future<CreatedUserResult> createUser(
  1. UserPublic user
)

Creates a new user. The plaintext CreatedUserResult.temporaryPassword is returned once so the admin can copy it; it is not stored.

Implementation

Future<CreatedUserResult> createUser(UserPublic user) async {
  if (user.permissions.firmId.isEmpty) {
    throw ArgumentError(UserUiStrings.createUserMissingFirmId);
  }

  _isLoading = true;
  _error = null;
  notifyListeners();

  try {
    final temporaryPassword = _generateSecureRandomPassword();
    final pendingUser = PendingUserRequest();
    pendingUser
      ..firstname = user.firstname
      ..lastname = user.lastname
      ..mail = user.mail
      ..permissions = user.permissions
      ..phone = user.phone
      ..password = temporaryPassword;

    final response = await _fenceServiceClient.createPendingUser(pendingUser);

    final createdUser = response.userPublic;
    print('UserProvider: Created user with userId: ${createdUser.userId}');

    _users = [..._users, createdUser];

    await loadUsers();

    return CreatedUserResult(
      user: createdUser,
      temporaryPassword: temporaryPassword,
    );
  } on GrpcError catch (e) {
    _error = '${e.code} ${e.message}';
    _isLoading = false;
    notifyListeners();
    rethrow; // Propagate error to caller so they know creation failed
  } catch (e) {
    _error = e.toString();
    _isLoading = false;
    notifyListeners();
    rethrow; // Propagate error to caller so they know creation failed
  } finally {
    _isLoading = false;
    notifyListeners();
  }
}