| // 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.client.account; |
| |
| import com.google.gerrit.client.auth.openid.OpenIdUtil; |
| import com.google.gerrit.common.auth.openid.OpenIdUrls; |
| import com.google.gerrit.extensions.client.AuthType; |
| import com.google.gwt.core.client.JavaScriptObject; |
| |
| public class ExternalIdInfo extends JavaScriptObject implements Comparable<ExternalIdInfo> { |
| /** |
| * Scheme used for {@link AuthType#LDAP}, {@link AuthType#CLIENT_SSL_CERT_LDAP}, {@link |
| * AuthType#HTTP_LDAP}, and {@link AuthType#LDAP_BIND} usernames. |
| * |
| * <p>The name {@code gerrit:} was a very poor choice. |
| */ |
| private static final String SCHEME_GERRIT = "gerrit:"; |
| |
| /** Scheme used to represent only an email address. */ |
| private static final String SCHEME_MAILTO = "mailto:"; |
| |
| /** Scheme for the username used to authenticate an account, e.g. over SSH. */ |
| private static final String SCHEME_USERNAME = "username:"; |
| |
| public final native String identity() /*-{ return this.identity; }-*/; |
| |
| public final native String emailAddress() /*-{ return this.email_address; }-*/; |
| |
| public final native boolean isTrusted() /*-{ return this['trusted'] ? true : false; }-*/; |
| |
| public final native boolean canDelete() /*-{ return this['can_delete'] ? true : false; }-*/; |
| |
| public final boolean isUsername() { |
| return isScheme(SCHEME_USERNAME); |
| } |
| |
| public final String describe() { |
| if (isScheme(SCHEME_GERRIT)) { |
| // A local user identity should just be itself. |
| return getSchemeRest(); |
| } else if (isScheme(SCHEME_USERNAME)) { |
| // A local user identity should just be itself. |
| return getSchemeRest(); |
| } else if (isScheme(SCHEME_MAILTO)) { |
| // Describe a mailto address as just its email address, |
| // which is already shown in the email address field. |
| return ""; |
| } else if (isScheme(OpenIdUrls.URL_LAUNCHPAD)) { |
| return OpenIdUtil.C.nameLaunchpad(); |
| } else if (isScheme(OpenIdUrls.URL_YAHOO)) { |
| return OpenIdUtil.C.nameYahoo(); |
| } |
| |
| return identity(); |
| } |
| |
| @Override |
| public final int compareTo(ExternalIdInfo a) { |
| return emailOf(this).compareTo(emailOf(a)); |
| } |
| |
| private boolean isScheme(String scheme) { |
| return identity() != null && identity().startsWith(scheme); |
| } |
| |
| private String getSchemeRest() { |
| int colonIdx = identity().indexOf(':'); |
| String scheme = (colonIdx > 0) ? identity().substring(0, colonIdx) : null; |
| return scheme != null ? identity().substring(scheme.length() + 1) : null; |
| } |
| |
| private String emailOf(ExternalIdInfo a) { |
| return a.emailAddress() != null ? a.emailAddress() : ""; |
| } |
| |
| protected ExternalIdInfo() {} |
| } |