in src/main/java/com/googlesource/gerrit/plugins/serviceuser/ServiceUserCollection.java [76:104]
public ServiceUserResource parse(ConfigResource parent, IdString id)
throws ResourceNotFoundException, AuthException, IOException, PermissionBackendException,
ConfigInvalidException, RestApiException {
IdentifiedUser serviceUser = accounts.get().parse(TopLevelResource.INSTANCE, id).getUser();
Config db = storageCache.get();
if (serviceUser == null || !db.getSubsections(USER).contains(serviceUser.getUserName().get())) {
throw new ResourceNotFoundException(id);
}
CurrentUser user = userProvider.get();
if (user == null || !user.isIdentifiedUser()) {
throw new AuthException("Authentication required");
}
if (!permissionBackend.user(user).testOrFalse(ADMINISTRATE_SERVER)) {
String username = serviceUser.getUserName().get();
String owner = db.getString(USER, username, KEY_OWNER);
if (owner != null) {
GroupDescription.Basic group =
groups.parse(TopLevelResource.INSTANCE, IdString.fromDecoded(owner)).getGroup();
if (!user.getEffectiveGroups().contains(group.getGroupUUID())) {
throw new ResourceNotFoundException(id);
}
} else if (!((IdentifiedUser) user)
.getAccountId()
.equals(Account.id(db.getInt(USER, username, KEY_CREATOR_ID, -1)))) {
throw new ResourceNotFoundException(id);
}
}
return new ServiceUserResource(serviceUser);
}