org.springframework.ide.eclipse.boot.dash.cloudfoundry.client.CFCredentials.java Source code

Java tutorial

Introduction

Here is the source code for org.springframework.ide.eclipse.boot.dash.cloudfoundry.client.CFCredentials.java

Source

/*******************************************************************************
 * Copyright (c) 2016 Pivotal, Inc.
 * All rights reserved. This program and the accompanying materials
 * are made available under the terms of the Eclipse Public License v1.0
 * which accompanies this distribution, and is available at
 * https://www.eclipse.org/legal/epl-v10.html
 *
 * Contributors:
 *     Pivotal, Inc. - initial API and implementation
 *******************************************************************************/
package org.springframework.ide.eclipse.boot.dash.cloudfoundry.client;

import org.eclipse.core.runtime.Assert;
import org.springframework.ide.eclipse.boot.dash.cloudfoundry.CloudFoundryTargetWizardModel.LoginMethod;

public class CFCredentials {

    public enum CFCredentialType {
        PASSWORD, TEMPORARY_CODE, REFRESH_TOKEN;

        public LoginMethod toLoginMethod() {
            switch (this) {
            case PASSWORD:
                return LoginMethod.PASSWORD;
            case TEMPORARY_CODE:
                return LoginMethod.TEMPORARY_CODE;
            default:
                return null;
            }
        }
    }

    private final CFCredentialType type;
    private final String secret;

    /**
     * Deprecated, use fromLogin instead
     */
    @Deprecated
    public static CFCredentials fromPassword(String password) {
        return fromLogin(LoginMethod.PASSWORD, password);
    }

    public static CFCredentials fromLogin(LoginMethod method, String secret) {
        CFCredentialType type;
        switch (method) {
        case PASSWORD:
            type = CFCredentialType.PASSWORD;
            break;
        case TEMPORARY_CODE:
            type = CFCredentialType.TEMPORARY_CODE;
            break;
        default:
            throw new IllegalStateException("Bug! Missing switch case?");
        }
        return new CFCredentials(type, secret);
    }

    public static CFCredentials fromRefreshToken(String refreshToken) {
        Assert.isNotNull(refreshToken);
        return new CFCredentials(CFCredentialType.REFRESH_TOKEN, refreshToken);
    }

    public String getSecret() {
        return secret;
    }

    /////////////////////////////////////////////////////////////////////////

    /**
     * Private constuctor, use static `fromXXX` factory methods instead.
     */
    private CFCredentials(CFCredentialType type, String secret) {
        this.type = type;
        this.secret = secret;
    }

    @Override
    public int hashCode() {
        final int prime = 31;
        int result = 1;
        result = prime * result + ((secret == null) ? 0 : secret.hashCode());
        result = prime * result + ((type == null) ? 0 : type.hashCode());
        return result;
    }

    @Override
    public boolean equals(Object obj) {
        if (this == obj)
            return true;
        if (obj == null)
            return false;
        if (getClass() != obj.getClass())
            return false;
        CFCredentials other = (CFCredentials) obj;
        if (secret == null) {
            if (other.secret != null)
                return false;
        } else if (!secret.equals(other.secret))
            return false;
        if (type != other.type)
            return false;
        return true;
    }

    @Override
    public String toString() {
        return "CFCredentials [type=" + type + ", secret=" + hidePassword(type, secret) + "]";
    }

    private String hidePassword(CFCredentialType type, String password) {
        if (password == null) {
            return null;
        }
        return type == CFCredentialType.PASSWORD ? "****" : password;
    }

    public CFCredentialType getType() {
        return type;
    }

    public static CFCredentials fromSsoToken(String ssoToken) {
        return CFCredentials.fromLogin(LoginMethod.TEMPORARY_CODE, ssoToken);
    }
}