Skip to main content

Password Encrypt Utility Plugins


Password Encrypt Utility Plugins

About

Password Utility Plugin allows you defined custom password encrypter through the Password Utility GUI. Then, using the GUI you will be able to encrypt password or text values with a custom encrypter that you determine.

Use

Create a Password Utility Plugin and install it as a Rundeck Plugin. You will need to implement the PasswordUtilityEncrypterPlugin interface.

Then, on the System > Password Utility menu option.

You will see your plugin on the available encoders list

Figure: Encoders List
Figure: Encoders List

Select your plugin and the plugin's attributes will be displayed on the form.

Figure: Encoders Form
Figure: Encoders Form

Finally, run the encryption

Figure: Encoders Result
Figure: Encoders Result

Java Plugin Type

package com.plugin.example;

import com.dtolabs.rundeck.core.encrypter.EncryptorResponse;
import com.dtolabs.rundeck.core.encrypter.PasswordUtilityEncrypterPlugin;
import com.dtolabs.rundeck.core.plugins.Plugin;
import com.dtolabs.rundeck.core.plugins.configuration.*;
import com.dtolabs.rundeck.plugins.ServiceNameConstants;
import com.dtolabs.rundeck.plugins.descriptions.PluginDescription;
import com.dtolabs.rundeck.plugins.util.*;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;

@Plugin(service = ServiceNameConstants.PasswordUtilityEncrypter, name ="MyPasswordEncrypterTest")
@PluginDescription(title = "MyPasswordEncrypterTest", description = "MyPasswordEncrypterTest")
/**
 * new MyPasswordEncrypterTest plugin, will provide the encrypt function on the rundeck GUI (Password Utility page)
 */
public class MyPasswordEncrypterTest implements PasswordUtilityEncrypterPlugin, Describable {

    static Description DESCRIPTION = DescriptionBuilder.builder()
            .name("MyPasswordEncrypterTest")
            .title("MyPasswordEncrypterTest")
            .description("MyPasswordEncrypterTest description")
            .property(PropertyUtil.string("value", "value", "value to encrypt", true, null))
            .build();


    @Override
    public Description getDescription() {
        return DESCRIPTION;
    }
    
    /**
     * will perform the encrypt process based on the parameters set on formProperties()
     * The {@link config} map of parametes passing form gue GUI.
     */
    @Override
    public EncryptorResponse encrypt(Map config) {

        EncryptorResponseImpl result = new EncryptorResponseImpl();

        try {
            //get the value set on the GUI form
            String valToEncrypt = (String) config.get("value");

            //my custom encripter (you will need to define your custom encryptor)
            CustomEncryptor encryptor = ...
            String encryptedValue = encryptor.encrypt(valToEncrypt);
            result.setValid(true);

            //this will be returned to the page, this map will be printed on the GUI
            Map<String, String> outputs = new HashMap();
            outputs.put("original", valToEncrypt);
            outputs.put("encrypted", "encryptedValue");
            result.setOuputs(outputs);

        }catch (Exception e){
            result.setValid(false);
            result.setError(e.getMessage());
        }

        return result;
    }

    class EncryptorResponseImpl implements EncryptorResponse{
        boolean isValid;
        String error;
        Map<String, String> ouputs;

        public void setValid(boolean valid) {
            isValid = valid;
        }

        public void setError(String error) {
            this.error = error;
        }

        public void setOuputs(Map<String, String> ouputs) {
            this.ouputs = ouputs;
        }

        @Override
        public boolean isValid() {
            return isValid;
        }

        @Override
        public String getError() {
            return error;
        }

        @Override
        public Map<String, String> getOutputs() {
            return ouputs;
        }

    }
}