diff options
Diffstat (limited to 'gerrit-server/src/main/java/com/google/gerrit/server/account/AccountState.java')
-rw-r--r-- | gerrit-server/src/main/java/com/google/gerrit/server/account/AccountState.java | 188 |
1 files changed, 0 insertions, 188 deletions
diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/account/AccountState.java b/gerrit-server/src/main/java/com/google/gerrit/server/account/AccountState.java deleted file mode 100644 index 770ecf57d4..0000000000 --- a/gerrit-server/src/main/java/com/google/gerrit/server/account/AccountState.java +++ /dev/null @@ -1,188 +0,0 @@ -// Copyright (C) 2009 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 static com.google.gerrit.server.account.externalids.ExternalId.SCHEME_MAILTO; -import static com.google.gerrit.server.account.externalids.ExternalId.SCHEME_USERNAME; - -import com.google.common.base.Function; -import com.google.common.base.Strings; -import com.google.common.cache.Cache; -import com.google.common.cache.CacheBuilder; -import com.google.gerrit.common.Nullable; -import com.google.gerrit.reviewdb.client.Account; -import com.google.gerrit.server.CurrentUser.PropertyKey; -import com.google.gerrit.server.IdentifiedUser; -import com.google.gerrit.server.account.WatchConfig.NotifyType; -import com.google.gerrit.server.account.WatchConfig.ProjectWatchKey; -import com.google.gerrit.server.account.externalids.ExternalId; -import com.google.gerrit.server.config.AllUsersName; -import java.util.Collection; -import java.util.HashSet; -import java.util.Map; -import java.util.Set; -import org.apache.commons.codec.DecoderException; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -public class AccountState { - private static final Logger logger = LoggerFactory.getLogger(AccountState.class); - - public static final Function<AccountState, Account.Id> ACCOUNT_ID_FUNCTION = - a -> a.getAccount().getId(); - - private final AllUsersName allUsersName; - private final Account account; - private final Collection<ExternalId> externalIds; - private final Map<ProjectWatchKey, Set<NotifyType>> projectWatches; - private Cache<IdentifiedUser.PropertyKey<Object>, Object> properties; - - public AccountState( - AllUsersName allUsersName, - Account account, - Collection<ExternalId> externalIds, - Map<ProjectWatchKey, Set<NotifyType>> projectWatches) { - this.allUsersName = allUsersName; - this.account = account; - this.externalIds = externalIds; - this.projectWatches = projectWatches; - this.account.setUserName(getUserName(externalIds)); - } - - public AllUsersName getAllUsersNameForIndexing() { - return allUsersName; - } - - /** Get the cached account metadata. */ - public Account getAccount() { - return account; - } - - /** - * Get the username, if one has been declared for this user. - * - * <p>The username is the {@link ExternalId} using the scheme {@link ExternalId#SCHEME_USERNAME}. - */ - public String getUserName() { - return account.getUserName(); - } - - public boolean checkPassword(String password, String username) { - if (password == null) { - return false; - } - for (ExternalId id : getExternalIds()) { - // Only process the "username:$USER" entry, which is unique. - if (!id.isScheme(SCHEME_USERNAME) || !username.equals(id.key().id())) { - continue; - } - - String hashedStr = id.password(); - if (!Strings.isNullOrEmpty(hashedStr)) { - try { - return HashedPassword.decode(hashedStr).checkPassword(password); - } catch (DecoderException e) { - logger.error("DecoderException for user {}: {}", username, e.getMessage()); - return false; - } - } - } - return false; - } - - /** The external identities that identify the account holder. */ - public Collection<ExternalId> getExternalIds() { - return externalIds; - } - - /** The project watches of the account. */ - public Map<ProjectWatchKey, Set<NotifyType>> getProjectWatches() { - return projectWatches; - } - - public static String getUserName(Collection<ExternalId> ids) { - for (ExternalId extId : ids) { - if (extId.isScheme(SCHEME_USERNAME)) { - return extId.key().id(); - } - } - return null; - } - - public static Set<String> getEmails(Collection<ExternalId> ids) { - Set<String> emails = new HashSet<>(); - for (ExternalId extId : ids) { - if (extId.isScheme(SCHEME_MAILTO)) { - emails.add(extId.key().id()); - } - } - return emails; - } - - /** - * Lookup a previously stored property. - * - * <p>All properties are automatically cleared when the account cache invalidates the {@code - * AccountState}. This method is thread-safe. - * - * @param key unique property key. - * @return previously stored value, or {@code null}. - */ - @Nullable - public <T> T get(PropertyKey<T> key) { - Cache<PropertyKey<Object>, Object> p = properties(false); - if (p != null) { - @SuppressWarnings("unchecked") - T value = (T) p.getIfPresent(key); - return value; - } - return null; - } - - /** - * Store a property for later retrieval. - * - * <p>This method is thread-safe. - * - * @param key unique property key. - * @param value value to store; or {@code null} to clear the value. - */ - public <T> void put(PropertyKey<T> key, @Nullable T value) { - Cache<PropertyKey<Object>, Object> p = properties(value != null); - if (p != null) { - @SuppressWarnings("unchecked") - PropertyKey<Object> k = (PropertyKey<Object>) key; - if (value != null) { - p.put(k, value); - } else { - p.invalidate(k); - } - } - } - - private synchronized Cache<PropertyKey<Object>, Object> properties(boolean allocate) { - if (properties == null && allocate) { - properties = - CacheBuilder.newBuilder() - .concurrencyLevel(1) - .initialCapacity(16) - // Use weakKeys to ensure plugins that garbage collect will also - // eventually release data held in any still live AccountState. - .weakKeys() - .build(); - } - return properties; - } -} |