All Downloads are FREE. Search and download functionalities are using the official Maven repository.

io.imunity.fido.web.FidoCredentialDefinitionEditor Maven / Gradle / Ivy

/*
 * Copyright (c) 2020 Bixbit - Krzysztof Benedyczak All rights reserved.
 * See LICENCE.txt file for licensing information.
 */
package io.imunity.fido.web;

import static io.imunity.tooltip.TooltipExtension.tooltip;
import static java.util.Objects.isNull;

import com.fasterxml.jackson.core.JsonProcessingException;
import com.vaadin.ui.CheckBox;
import com.vaadin.ui.ComboBox;
import com.vaadin.ui.Component;
import com.vaadin.ui.FormLayout;
import com.vaadin.ui.TextField;
import com.yubico.webauthn.data.AttestationConveyancePreference;
import com.yubico.webauthn.data.UserVerificationRequirement;

import io.imunity.fido.credential.FidoCredential;
import pl.edu.icm.unity.Constants;
import pl.edu.icm.unity.MessageSource;
import pl.edu.icm.unity.exceptions.IllegalCredentialException;
import pl.edu.icm.unity.webui.common.credentials.CredentialDefinitionEditor;
import pl.edu.icm.unity.webui.common.credentials.CredentialDefinitionViewer;

/**
 * Basic Fido credential definition editor. Requires configuration to be added.
 *
 * @author R. Ledzinski
 */
class FidoCredentialDefinitionEditor implements CredentialDefinitionEditor, CredentialDefinitionViewer
{
	private MessageSource msg;

	private ComboBox attestationConveyance;
	private ComboBox userVerification;
	private CheckBox loginLessAllowed;
	private TextField hostName;

	public FidoCredentialDefinitionEditor(MessageSource msg)
	{
		this.msg = msg;
	}

	@Override
	public Component getEditor(String credentialDefinitionConfiguration)
	{
		attestationConveyance = new ComboBox<>(msg.getMessage("Fido.credEditor.attestationConveyance"));
		attestationConveyance.setItems(AttestationConveyancePreference.values());
		attestationConveyance.setEmptySelectionAllowed(false);
		attestationConveyance.setTextInputAllowed(false);
		tooltip(attestationConveyance, msg.getMessage("Fido.credEditor.attestationConveyance.tip"));
		userVerification = new ComboBox<>(msg.getMessage("Fido.credEditor.userVerification"));
		userVerification.setItems(UserVerificationRequirement.values());
		userVerification.setEmptySelectionAllowed(false);
		userVerification.setTextInputAllowed(false);
		loginLessAllowed = new CheckBox(msg.getMessage("Fido.credEditor.loginLess"));
		tooltip(loginLessAllowed, msg.getMessage("Fido.credEditor.loginLess.tip"));
		tooltip(userVerification, msg.getMessage("Fido.credEditor.userVerification.tip"));
		hostName = new TextField(msg.getMessage("Fido.credEditor.hostName"));
		tooltip(hostName, msg.getMessage("Fido.credEditor.hostName.tip"));

		FormLayout ret = new FormLayout(attestationConveyance, userVerification, hostName, loginLessAllowed);
		ret.setMargin(true);
		
		FidoCredential credential = isNull(credentialDefinitionConfiguration) ? 
				new FidoCredential() : FidoCredential.deserialize(credentialDefinitionConfiguration);
		initUIState(credential);

		return ret;
	}

	private void initUIState(FidoCredential credential)
	{
		attestationConveyance.setValue(AttestationConveyancePreference.valueOf(credential.getAttestationConveyance()));
		userVerification.setValue(UserVerificationRequirement.valueOf(credential.getUserVerification()));
		hostName.setValue(credential.getHostName());
		loginLessAllowed.setValue(credential.isLoginLessAllowed());
	}

	@Override
	public String getCredentialDefinition() throws IllegalCredentialException
	{
		try
		{
			return Constants.MAPPER.writeValueAsString(getCredential());
		} catch (JsonProcessingException e)
		{
			throw new IllegalCredentialException("Cannot serialize credential object", e);
		}
	}

	@Override
	public Component getViewer(String credentialDefinitionConfiguration)
	{
		return getEditor(credentialDefinitionConfiguration);
	}

	private FidoCredential getCredential()
	{
		FidoCredential credential = new FidoCredential();
		credential.setAttestationConveyance(attestationConveyance.getValue().toString());
		credential.setUserVerification(userVerification.getValue().toString());
		credential.setHostName(hostName.getValue());
		credential.setLoginLessOption(loginLessAllowed.getValue());
		return credential;
	}
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy