gerrit/gerrit-httpd/src/main/java/com/google/gerrit/httpd/rpc/account/ExternalIdDetailFactory.java
Shawn O. Pearce f2bab2afc9 Move sshUserName from Account to AccountExternalId
We remove the secondary unique column sshUserName and store it in
the AccountExternalId entity instead.  This change is necessary to
support databases which do not allow mulitiple key attributes for
an entity.

Change-Id: I20076a05f2ea083da6044a4f1ed2f0672e85739a
Signed-off-by: Shawn O. Pearce <sop@google.com>
2010-01-13 14:40:26 -08:00

72 lines
2.4 KiB
Java

// 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.httpd.rpc.account;
import static com.google.gerrit.reviewdb.AccountExternalId.SCHEME_USERNAME;
import com.google.gerrit.httpd.WebSession;
import com.google.gerrit.httpd.rpc.Handler;
import com.google.gerrit.reviewdb.AccountExternalId;
import com.google.gerrit.reviewdb.ReviewDb;
import com.google.gerrit.server.IdentifiedUser;
import com.google.gerrit.server.config.AuthConfig;
import com.google.gwtorm.client.OrmException;
import com.google.inject.Inject;
import java.util.Collections;
import java.util.List;
class ExternalIdDetailFactory extends Handler<List<AccountExternalId>> {
interface Factory {
ExternalIdDetailFactory create();
}
private final ReviewDb db;
private final IdentifiedUser user;
private final AuthConfig authConfig;
private final WebSession session;
@Inject
ExternalIdDetailFactory(final ReviewDb db, final IdentifiedUser user,
final AuthConfig authConfig, final WebSession session) {
this.db = db;
this.user = user;
this.authConfig = authConfig;
this.session = session;
}
@Override
public List<AccountExternalId> call() throws OrmException {
final AccountExternalId.Key last = session.getLastLoginExternalId();
final List<AccountExternalId> ids =
db.accountExternalIds().byAccount(user.getAccountId()).toList();
for (final AccountExternalId e : ids) {
e.setTrusted(authConfig.isIdentityTrustable(Collections.singleton(e)));
// The identity can be deleted only if its not the one used to
// establish this web session, and if only if an identity was
// actually used to establish this web session.
//
if (e.isScheme(SCHEME_USERNAME)) {
e.setCanDelete(false);
} else {
e.setCanDelete(last != null && !last.equals(e.getKey()));
}
}
return ids;
}
}