From d52e1c7e288a4afbe2d25053458ad650cf9cb5ea Mon Sep 17 00:00:00 2001 From: Owen Li Date: Wed, 14 Jun 2017 10:04:00 -0400 Subject: [PATCH] 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 --- .../gerrit/server/account/DeleteActive.java | 38 +------- .../gerrit/server/account/PutActive.java | 31 +------ .../server/account/SetInactiveFlag.java | 90 +++++++++++++++++++ 3 files changed, 98 insertions(+), 61 deletions(-) create mode 100644 gerrit-server/src/main/java/com/google/gerrit/server/account/SetInactiveFlag.java diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/account/DeleteActive.java b/gerrit-server/src/main/java/com/google/gerrit/server/account/DeleteActive.java index 1fa8ed3004..0ff5342c35 100644 --- a/gerrit-server/src/main/java/com/google/gerrit/server/account/DeleteActive.java +++ b/gerrit-server/src/main/java/com/google/gerrit/server/account/DeleteActive.java @@ -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 { public static class Input {} - private final Provider dbProvider; - private final AccountsUpdate.Server accountsUpdate; private final Provider self; + private final SetInactiveFlag setInactiveFlag; @Inject - DeleteActive( - Provider dbProvider, - AccountsUpdate.Server accountsUpdate, - Provider self) { - this.dbProvider = dbProvider; - this.accountsUpdate = accountsUpdate; + DeleteActive(SetInactiveFlag setInactiveFlag, Provider self) { + this.setInactiveFlag = setInactiveFlag; this.self = self; } @@ -58,27 +49,6 @@ public class DeleteActive implements RestModifyView { 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()); } } diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/account/PutActive.java b/gerrit-server/src/main/java/com/google/gerrit/server/account/PutActive.java index 6051a950c3..825ef1056d 100644 --- a/gerrit-server/src/main/java/com/google/gerrit/server/account/PutActive.java +++ b/gerrit-server/src/main/java/com/google/gerrit/server/account/PutActive.java @@ -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 { public static class Input {} - private final Provider dbProvider; - private final AccountsUpdate.Server accountsUpdate; + private final SetInactiveFlag setInactiveFlag; @Inject - PutActive(Provider dbProvider, AccountsUpdate.Server accountsUpdate) { - this.dbProvider = dbProvider; - this.accountsUpdate = accountsUpdate; + PutActive(SetInactiveFlag setInactiveFlag) { + this.setInactiveFlag = setInactiveFlag; } @Override public Response 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()); } } diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/account/SetInactiveFlag.java b/gerrit-server/src/main/java/com/google/gerrit/server/account/SetInactiveFlag.java new file mode 100644 index 0000000000..b0487de3fa --- /dev/null +++ b/gerrit-server/src/main/java/com/google/gerrit/server/account/SetInactiveFlag.java @@ -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 dbProvider; + private final AccountsUpdate.Server accountsUpdate; + + @Inject + SetInactiveFlag(Provider 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 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(""); + } +}