]> git.rkrishnan.org Git - tahoe-lafs/tahoe-lafs.git/blob - src/allmydata/scripts/admin.py
cli: improve formatting of all commands
[tahoe-lafs/tahoe-lafs.git] / src / allmydata / scripts / admin.py
1
2 from twisted.python import usage
3 from allmydata.scripts.common import BaseOptions
4
5 class GenerateKeypairOptions(BaseOptions):
6
7     def getUsage(self, width=None):
8         t = BaseOptions.getUsage(self, width)
9         t += """
10 Generate a public/private keypair, dumped to stdout as two lines of ASCII..
11
12 """
13         return t
14
15 def print_keypair(options):
16     from allmydata.util.keyutil import make_keypair
17     out = options.stdout
18     privkey_vs, pubkey_vs = make_keypair()
19     print >>out, "private:", privkey_vs
20     print >>out, "public:", pubkey_vs
21
22 class DerivePubkeyOptions(BaseOptions):
23     def parseArgs(self, privkey):
24         self.privkey = privkey
25
26     def getSynopsis(self):
27         return "Usage: tahoe [global-options] admin derive-pubkey PRIVKEY"
28
29     def getUsage(self, width=None):
30         t = BaseOptions.getUsage(self, width)
31         t += """
32 Given a private (signing) key that was previously generated with
33 generate-keypair, derive the public key and print it to stdout.
34
35 """
36         return t
37
38 def derive_pubkey(options):
39     out = options.stdout
40     from allmydata.util import keyutil
41     privkey_vs = options.privkey
42     sk, pubkey_vs = keyutil.parse_privkey(privkey_vs)
43     print >>out, "private:", privkey_vs
44     print >>out, "public:", pubkey_vs
45     return 0
46
47 class AdminCommand(BaseOptions):
48     subCommands = [
49         ("generate-keypair", None, GenerateKeypairOptions,
50          "Generate a public/private keypair, write to stdout."),
51         ("derive-pubkey", None, DerivePubkeyOptions,
52          "Derive a public key from a private key."),
53         ]
54     def postOptions(self):
55         if not hasattr(self, 'subOptions'):
56             raise usage.UsageError("must specify a subcommand")
57     def getSynopsis(self):
58         return "Usage: tahoe [global-options] admin SUBCOMMAND"
59     def getUsage(self, width=None):
60         t = BaseOptions.getUsage(self, width)
61         t += """
62 Please run e.g. 'tahoe admin generate-keypair --help' for more details on
63 each subcommand.
64 """
65         return t
66
67 subDispatch = {
68     "generate-keypair": print_keypair,
69     "derive-pubkey": derive_pubkey,
70     }
71
72 def do_admin(options):
73     so = options.subOptions
74     so.stdout = options.stdout
75     so.stderr = options.stderr
76     f = subDispatch[options.subCommand]
77     return f(so)
78
79
80 subCommands = [
81     ["admin", None, AdminCommand, "admin subcommands: use 'tahoe admin' for a list"],
82     ]
83
84 dispatch = {
85     "admin": do_admin,
86     }