Package restx.core.shell

Source Code of restx.core.shell.HashShellCommand

package restx.core.shell;

import com.google.common.base.CharMatcher;
import com.google.common.base.Charsets;
import com.google.common.base.Optional;
import com.google.common.base.Splitter;
import com.google.common.collect.ImmutableList;
import com.google.common.hash.Hashing;
import com.google.common.io.Files;
import jline.console.completer.ArgumentCompleter;
import jline.console.completer.Completer;
import jline.console.completer.StringsCompleter;
import org.apache.ivy.Ivy;
import org.apache.ivy.core.report.ResolveReport;
import org.apache.ivy.core.retrieve.RetrieveOptions;
import org.mindrot.jbcrypt.BCrypt;
import restx.build.*;
import restx.factory.Component;
import restx.plugins.ModulesManager;
import restx.shell.RestxShell;
import restx.shell.ShellCommandRunner;
import restx.shell.ShellIvy;
import restx.shell.StdShellCommand;

import java.io.*;
import java.net.URL;
import java.nio.file.Path;
import java.util.ArrayList;
import java.util.List;

import static java.util.Arrays.asList;

/**
* User: xavierhanin
* Date: 4/10/13
* Time: 8:53 PM
*/
@Component
public class HashShellCommand extends StdShellCommand {
    public HashShellCommand() {
        super(ImmutableList.of("hash"), "hash commands, to easily generate password hashes");
    }

    @Override
    protected String resourceMan() {
        return "restx/core/shell/hash.man";
    }

    @Override
    protected Optional<? extends ShellCommandRunner> doMatch(String line) {
        List<String> args = splitArgs(line);

        if (args.size() < 3) {
            return Optional.absent();
        }

        return Optional.of(new HashCommandRunner(args.get(1), args.get(2)));
    }

    @Override
    public Iterable<Completer> getCompleters() {
        return ImmutableList.<Completer>of(new ArgumentCompleter(
                new StringsCompleter("hash"),
                new StringsCompleter("md5", "sha1", "bcrypt", "md5+bcrypt", "sha1+bcrypt")));
    }

    private class HashCommandRunner implements ShellCommandRunner {
        private final String hash;
        private final String plaintext;

        public HashCommandRunner(String hash, String plaintext) {
            this.hash = hash;
            this.plaintext = plaintext;
        }

        @Override
        public void run(RestxShell shell) throws Exception {
            switch (hash) {
                case "md5":
                    shell.println(Hashing.md5().hashString(plaintext, Charsets.UTF_8).toString());
                    break;
                case "sha1":
                    shell.println(Hashing.sha1().hashString(plaintext, Charsets.UTF_8).toString());
                    break;
                case "bcrypt":
                    shell.println(BCrypt.hashpw(plaintext, BCrypt.gensalt()));
                    break;
                case "md5+bcrypt":
                    shell.println(BCrypt.hashpw(Hashing.md5().hashString(plaintext, Charsets.UTF_8).toString(), BCrypt.gensalt()));
                    break;
                case "sha1+bcrypt":
                    shell.println(BCrypt.hashpw(Hashing.sha1().hashString(plaintext, Charsets.UTF_8).toString(), BCrypt.gensalt()));
                    break;
                default:
                    shell.printIn("unknown hash function: " + hash, RestxShell.AnsiCodes.ANSI_RED);
                    shell.println("");
            }
        }
    }
}
TOP

Related Classes of restx.core.shell.HashShellCommand

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.