createUser method
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();
}
}