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