3 import sys, os, getopt, pwd
4 from fulbank import auth
9 def find(seq, *, item=None, match=None, key=None, default=LookupError):
12 if match is None and item is not None:
13 match = lambda o: o == item
17 if default is LookupError:
23 out.write("usage: netbank [-h] BANK-ID COMMAND [ARGS...]\n")
28 sys.stderr.write("netbank: %s: no current session\n" % (cmd))
35 def cmd_login(cmd, args):
38 sys.stderr.write("usage: login TYPE\n")
40 sess = sesstype.create()
41 if args[0] == "bankid":
43 sys.stderr.write("usage: login bankid USER-ID\n")
45 with auth.ttyconv() as conv:
46 sess.auth_bankid(args[1], conv)
48 sys.stderr.write("netbank: %s: unknown authentication type\n" % (args[0]))
50 commands["login"] = cmd_login
53 def cmd_logout(cmd, args):
58 commands["logout"] = cmd_logout
61 def cmd_ping(cmd, args):
63 commands["ping"] = cmd_ping
66 def cmd_lsacct(cmd, args):
67 for acct in sess.accounts:
68 sys.stdout.write("%s (%s): %s\n" % (acct.number, acct.name, acct.balance))
69 commands["lsacct"] = cmd_lsacct
72 def cmd_lstxn(cmd, args):
73 opts, args = getopt.getopt(args, "n:")
79 sys.stderr.write("usage: lstxn [-n NUM] ACCOUNT\n")
82 acct = find(sess.accounts, item=args[0], key=lambda acct: acct.number)
84 sys.stderr.write("netbank: %s: no such account\n" % (args[0]))
86 for i, txn in zip(range(num), acct.transactions()):
87 sys.stdout.write("%s %s: %s\n" % (txn.date.isoformat(), txn.value, txn.message))
88 commands["lstxn"] = cmd_lstxn
93 opts, args = getopt.getopt(sys.argv[1:], "h")
104 sesstype = fulbank.fsb.session
106 sys.stderr.write("netbank: %s: unknown bank id\n" % (args[0]))
108 sesspath = os.path.join(pwd.getpwuid(os.getuid()).pw_dir, ".cache/fulbank", args[0])
112 if os.path.exists(sesspath):
113 sess = sesstype.load(sesspath)
117 commands[cmd](cmd, args)
119 sys.stderr.write("netbank: %s: unknown command\n" % (cmd))
122 sessdir = os.path.dirname(sesspath)
123 if not os.path.isdir(sessdir):
127 if os.path.exists(sesspath):
131 if __name__ == "__main__":
133 except KeyboardInterrupt: