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...]")
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):
57 commands["logout"] = cmd_logout
60 def cmd_ping(cmd, args):
62 commands["ping"] = cmd_ping
65 def cmd_lsacct(cmd, args):
66 for acct in sess.accounts:
67 sys.stdout.write("%s (%s): %s\n" % (acct.number, acct.name, acct.balance))
68 commands["lsacct"] = cmd_lsacct
71 def cmd_lstxn(cmd, args):
72 opts, args = getopt.getopt(args, "n:")
78 sys.stderr.write("usage: lstxn [-n NUM] ACCOUNT\n")
81 acct = find(sess.accounts, item=args[0], key=lambda acct: acct.number)
83 sys.stderr.write("netbank: %s: no such account\n" % (args[0]))
85 for i, txn in zip(range(num), acct.transactions()):
86 sys.stdout.write("%s %s: %s\n" % (txn.date.isoformat(), txn.value, txn.message))
87 commands["lstxn"] = cmd_lstxn
92 opts, args = getopt.getopt(sys.argv[1:], "h")
103 sesstype = fulbank.fsb.session
105 sys.stderr.write("netbank: %s: unknown bank id\n" % (args[0]))
107 sesspath = os.path.join(pwd.getpwuid(os.getuid()).pw_dir, ".cache/fulbank", args[0])
111 if os.path.exists(sesspath):
112 sess = sesstype.load(sesspath)
116 commands[cmd](cmd, args)
118 sys.stderr.write("netbank: %s: unknown command\n" % (cmd))
121 sessdir = os.path.dirname(sesspath)
122 if not os.path.isdir(sessdir):
126 if os.path.exists(sesspath):
130 if __name__ == "__main__":
132 except KeyboardInterrupt: