Extract code to change inactive flag into its own class
This will allow to reuse the logic to activate/deactivate account without calling the REST endpoints which do extra validation. Change-Id: I8f376942454522c17b1251c8f8cf76b07176a91e
This commit is contained in:
@@ -17,12 +17,9 @@ package com.google.gerrit.server.account;
|
||||
import com.google.gerrit.common.data.GlobalCapability;
|
||||
import com.google.gerrit.extensions.annotations.RequiresCapability;
|
||||
import com.google.gerrit.extensions.restapi.ResourceConflictException;
|
||||
import com.google.gerrit.extensions.restapi.ResourceNotFoundException;
|
||||
import com.google.gerrit.extensions.restapi.Response;
|
||||
import com.google.gerrit.extensions.restapi.RestApiException;
|
||||
import com.google.gerrit.extensions.restapi.RestModifyView;
|
||||
import com.google.gerrit.reviewdb.client.Account;
|
||||
import com.google.gerrit.reviewdb.server.ReviewDb;
|
||||
import com.google.gerrit.server.IdentifiedUser;
|
||||
import com.google.gerrit.server.account.DeleteActive.Input;
|
||||
import com.google.gwtorm.server.OrmException;
|
||||
@@ -30,7 +27,6 @@ import com.google.inject.Inject;
|
||||
import com.google.inject.Provider;
|
||||
import com.google.inject.Singleton;
|
||||
import java.io.IOException;
|
||||
import java.util.concurrent.atomic.AtomicBoolean;
|
||||
import org.eclipse.jgit.errors.ConfigInvalidException;
|
||||
|
||||
@RequiresCapability(GlobalCapability.MODIFY_ACCOUNT)
|
||||
@@ -38,17 +34,12 @@ import org.eclipse.jgit.errors.ConfigInvalidException;
|
||||
public class DeleteActive implements RestModifyView<AccountResource, Input> {
|
||||
public static class Input {}
|
||||
|
||||
private final Provider<ReviewDb> dbProvider;
|
||||
private final AccountsUpdate.Server accountsUpdate;
|
||||
private final Provider<IdentifiedUser> self;
|
||||
private final SetInactiveFlag setInactiveFlag;
|
||||
|
||||
@Inject
|
||||
DeleteActive(
|
||||
Provider<ReviewDb> dbProvider,
|
||||
AccountsUpdate.Server accountsUpdate,
|
||||
Provider<IdentifiedUser> self) {
|
||||
this.dbProvider = dbProvider;
|
||||
this.accountsUpdate = accountsUpdate;
|
||||
DeleteActive(SetInactiveFlag setInactiveFlag, Provider<IdentifiedUser> self) {
|
||||
this.setInactiveFlag = setInactiveFlag;
|
||||
this.self = self;
|
||||
}
|
||||
|
||||
@@ -58,27 +49,6 @@ public class DeleteActive implements RestModifyView<AccountResource, Input> {
|
||||
if (self.get() == rsrc.getUser()) {
|
||||
throw new ResourceConflictException("cannot deactivate own account");
|
||||
}
|
||||
|
||||
AtomicBoolean alreadyInactive = new AtomicBoolean(false);
|
||||
Account account =
|
||||
accountsUpdate
|
||||
.create()
|
||||
.update(
|
||||
dbProvider.get(),
|
||||
rsrc.getUser().getAccountId(),
|
||||
a -> {
|
||||
if (!a.isActive()) {
|
||||
alreadyInactive.set(true);
|
||||
} else {
|
||||
a.setActive(false);
|
||||
}
|
||||
});
|
||||
if (account == null) {
|
||||
throw new ResourceNotFoundException("account not found");
|
||||
}
|
||||
if (alreadyInactive.get()) {
|
||||
throw new ResourceConflictException("account not active");
|
||||
}
|
||||
return Response.none();
|
||||
return setInactiveFlag.deactivate(rsrc.getUser());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -19,15 +19,11 @@ import com.google.gerrit.extensions.annotations.RequiresCapability;
|
||||
import com.google.gerrit.extensions.restapi.ResourceNotFoundException;
|
||||
import com.google.gerrit.extensions.restapi.Response;
|
||||
import com.google.gerrit.extensions.restapi.RestModifyView;
|
||||
import com.google.gerrit.reviewdb.client.Account;
|
||||
import com.google.gerrit.reviewdb.server.ReviewDb;
|
||||
import com.google.gerrit.server.account.PutActive.Input;
|
||||
import com.google.gwtorm.server.OrmException;
|
||||
import com.google.inject.Inject;
|
||||
import com.google.inject.Provider;
|
||||
import com.google.inject.Singleton;
|
||||
import java.io.IOException;
|
||||
import java.util.concurrent.atomic.AtomicBoolean;
|
||||
import org.eclipse.jgit.errors.ConfigInvalidException;
|
||||
|
||||
@RequiresCapability(GlobalCapability.MODIFY_ACCOUNT)
|
||||
@@ -35,35 +31,16 @@ import org.eclipse.jgit.errors.ConfigInvalidException;
|
||||
public class PutActive implements RestModifyView<AccountResource, Input> {
|
||||
public static class Input {}
|
||||
|
||||
private final Provider<ReviewDb> dbProvider;
|
||||
private final AccountsUpdate.Server accountsUpdate;
|
||||
private final SetInactiveFlag setInactiveFlag;
|
||||
|
||||
@Inject
|
||||
PutActive(Provider<ReviewDb> dbProvider, AccountsUpdate.Server accountsUpdate) {
|
||||
this.dbProvider = dbProvider;
|
||||
this.accountsUpdate = accountsUpdate;
|
||||
PutActive(SetInactiveFlag setInactiveFlag) {
|
||||
this.setInactiveFlag = setInactiveFlag;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Response<String> apply(AccountResource rsrc, Input input)
|
||||
throws ResourceNotFoundException, OrmException, IOException, ConfigInvalidException {
|
||||
AtomicBoolean alreadyActive = new AtomicBoolean(false);
|
||||
Account account =
|
||||
accountsUpdate
|
||||
.create()
|
||||
.update(
|
||||
dbProvider.get(),
|
||||
rsrc.getUser().getAccountId(),
|
||||
a -> {
|
||||
if (a.isActive()) {
|
||||
alreadyActive.set(true);
|
||||
} else {
|
||||
a.setActive(true);
|
||||
}
|
||||
});
|
||||
if (account == null) {
|
||||
throw new ResourceNotFoundException("account not found");
|
||||
}
|
||||
return alreadyActive.get() ? Response.ok("") : Response.created("");
|
||||
return setInactiveFlag.activate(rsrc.getUser());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,90 @@
|
||||
// Copyright (C) 2017 The Android Open Source Project
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
package com.google.gerrit.server.account;
|
||||
|
||||
import com.google.gerrit.extensions.restapi.ResourceConflictException;
|
||||
import com.google.gerrit.extensions.restapi.ResourceNotFoundException;
|
||||
import com.google.gerrit.extensions.restapi.Response;
|
||||
import com.google.gerrit.extensions.restapi.RestApiException;
|
||||
import com.google.gerrit.reviewdb.client.Account;
|
||||
import com.google.gerrit.reviewdb.server.ReviewDb;
|
||||
import com.google.gerrit.server.IdentifiedUser;
|
||||
import com.google.gwtorm.server.OrmException;
|
||||
import com.google.inject.Inject;
|
||||
import com.google.inject.Provider;
|
||||
import com.google.inject.Singleton;
|
||||
import java.io.IOException;
|
||||
import java.util.concurrent.atomic.AtomicBoolean;
|
||||
import org.eclipse.jgit.errors.ConfigInvalidException;
|
||||
|
||||
@Singleton
|
||||
public class SetInactiveFlag {
|
||||
|
||||
private final Provider<ReviewDb> dbProvider;
|
||||
private final AccountsUpdate.Server accountsUpdate;
|
||||
|
||||
@Inject
|
||||
SetInactiveFlag(Provider<ReviewDb> dbProvider, AccountsUpdate.Server accountsUpdate) {
|
||||
this.dbProvider = dbProvider;
|
||||
this.accountsUpdate = accountsUpdate;
|
||||
}
|
||||
|
||||
public Response<?> deactivate(IdentifiedUser user)
|
||||
throws RestApiException, OrmException, IOException, ConfigInvalidException {
|
||||
AtomicBoolean alreadyInactive = new AtomicBoolean(false);
|
||||
Account account =
|
||||
accountsUpdate
|
||||
.create()
|
||||
.update(
|
||||
dbProvider.get(),
|
||||
user.getAccountId(),
|
||||
a -> {
|
||||
if (!a.isActive()) {
|
||||
alreadyInactive.set(true);
|
||||
} else {
|
||||
a.setActive(false);
|
||||
}
|
||||
});
|
||||
if (account == null) {
|
||||
throw new ResourceNotFoundException("account not found");
|
||||
}
|
||||
if (alreadyInactive.get()) {
|
||||
throw new ResourceConflictException("account not active");
|
||||
}
|
||||
return Response.none();
|
||||
}
|
||||
|
||||
public Response<String> activate(IdentifiedUser user)
|
||||
throws ResourceNotFoundException, OrmException, IOException, ConfigInvalidException {
|
||||
AtomicBoolean alreadyActive = new AtomicBoolean(false);
|
||||
Account account =
|
||||
accountsUpdate
|
||||
.create()
|
||||
.update(
|
||||
dbProvider.get(),
|
||||
user.getAccountId(),
|
||||
a -> {
|
||||
if (a.isActive()) {
|
||||
alreadyActive.set(true);
|
||||
} else {
|
||||
a.setActive(true);
|
||||
}
|
||||
});
|
||||
if (account == null) {
|
||||
throw new ResourceNotFoundException("account not found");
|
||||
}
|
||||
return alreadyActive.get() ? Response.ok("") : Response.created("");
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user