| | |
| | | import com.gitblit.transport.ssh.commands.CommandMetaData; |
| | | import com.gitblit.transport.ssh.commands.DispatchCommand; |
| | | import com.gitblit.transport.ssh.commands.SshCommand; |
| | | import com.gitblit.transport.ssh.commands.UsageExample; |
| | | import com.gitblit.utils.FlipTable; |
| | | import com.gitblit.utils.FlipTable.Borders; |
| | | |
| | |
| | | } |
| | | |
| | | @CommandMetaData(name = "add", description = "Add an SSH public key to your account") |
| | | @UsageExample(syntax = "cat ~/.ssh/id_rsa.pub | ${ssh} ${cmd} -", description = "Upload your SSH public key and add it to your account") |
| | | public static class AddKey extends BaseKeyCommand { |
| | | |
| | | protected final Logger log = LoggerFactory.getLogger(getClass()); |
| | | |
| | | @Argument(metaVar = "<stdin>|KEY", usage = "the key to add") |
| | | @Argument(metaVar = "-|<KEY>", usage = "the key(s) to add", required = true) |
| | | private List<String> addKeys = new ArrayList<String>(); |
| | | |
| | | @Override |
| | |
| | | } |
| | | |
| | | @CommandMetaData(name = "remove", aliases = { "rm" }, description = "Remove an SSH public key from your account") |
| | | @UsageExample(syntax = "${cmd} 2", description = "Remove the SSH key identified as #2 in `keys list`") |
| | | public static class RemoveKey extends BaseKeyCommand { |
| | | |
| | | protected final Logger log = LoggerFactory.getLogger(getClass()); |
| | |
| | | } |
| | | } |
| | | |
| | | @CommandMetaData(name = "list", aliases = { "ls" }, description = "List your registered public keys") |
| | | @CommandMetaData(name = "list", aliases = { "ls" }, description = "List your registered SSH public keys") |
| | | public static class ListKeys extends SshCommand { |
| | | |
| | | @Option(name = "-L", usage = "list complete public key parameters") |
| | |
| | | IPublicKeyManager keyManager = getContext().getGitblit().getPublicKeyManager(); |
| | | String username = getContext().getClient().getUsername(); |
| | | List<SshKey> keys = keyManager.getKeys(username); |
| | | if (keys == null || keys.isEmpty()) { |
| | | stdout.println("You have not registered any public keys for ssh authentication."); |
| | | return; |
| | | } |
| | | |
| | | if (showRaw) { |
| | | asRaw(keys); |
| | |
| | | |
| | | /* output in the same format as authorized_keys */ |
| | | protected void asRaw(List<SshKey> keys) { |
| | | if (keys == null) { |
| | | return; |
| | | } |
| | | for (SshKey key : keys) { |
| | | stdout.println(key.getRawData()); |
| | | } |
| | |
| | | |
| | | protected void asTable(List<SshKey> keys) { |
| | | String[] headers = { "#", "Fingerprint", "Comment", "Type" }; |
| | | String[][] data = new String[keys.size()][]; |
| | | for (int i = 0; i < keys.size(); i++) { |
| | | int len = keys == null ? 0 : keys.size(); |
| | | Object[][] data = new Object[len][]; |
| | | for (int i = 0; i < len; i++) { |
| | | // show 1-based index numbers with the fingerprint |
| | | // this is useful for comparing with "ssh-add -l" |
| | | SshKey k = keys.get(i); |
| | | data[i] = new String[] { "" + (i + 1), k.getFingerprint(), k.getComment(), k.getAlgorithm() }; |
| | | data[i] = new Object[] { (i + 1), k.getFingerprint(), k.getComment(), k.getAlgorithm() }; |
| | | } |
| | | |
| | | stdout.println(FlipTable.of(headers, data, Borders.BODY_COLS)); |
| | | stdout.println(FlipTable.of(headers, data, Borders.BODY_HCOLS)); |
| | | } |
| | | } |
| | | } |