1 // (c) Bernhard Tittelbach, 2013
13 // ---------- Main Code -------------
17 door_keys_file_ string
20 //~ syslog_ *log.Logger
24 fmt.Fprintf(os.Stderr, "Usage: door_nick_lookup_zmq [options] [keyid1 [keyid2 [...]]]\n")
29 flag.StringVar(&zmqport_, "zmqport", "ipc:///run/tuer/door_keyname.ipc", "zmq socket path")
30 flag.StringVar(&door_keys_file_, "keysfile", "/flash/keys", "door keys file")
31 //~ flag.BoolVar(&use_syslog_, "syslog", false, "log to syslog local2 facility")
32 flag.BoolVar(&start_server_, "server", false, "open 0mq socket and listen to requests")
37 func getFileMTime(filename string ) (int64, error) {
38 keysfile, err := os.Open(filename)
39 if err != nil { return 0, err }
40 defer keysfile.Close()
41 stat, err := keysfile.Stat()
42 if err != nil { return 0, err }
43 return stat.ModTime().Unix(), nil
47 knstore := new(KeyNickStore)
48 err := knstore.LoadKeysFile(door_keys_file_)
49 if err != nil { panic(err) }
50 door_keys_mtime, err := getFileMTime(door_keys_file_)
51 if err != nil { panic(err) }
53 for _, key := range(flag.Args()) {
54 nick, err := knstore.LookupHexKeyNick(key)
56 fmt.Printf("ERROR: %s for key %s\n", err.Error(), key)
66 zmqctx, zmqchans := ZmqsInit(zmqport_)
70 defer zmqchans.Close()
75 //~ syslog_, logerr = syslog.NewLogger(syslog.LOG_INFO | syslog.LOG_LOCAL2, 0)
76 //~ if logerr != nil { panic(logerr) }
77 //~ syslog_.Print("started")
78 //~ defer syslog_.Print("exiting")
81 for keybytes := range(zmqchans.In()) {
82 current_door_keys_mtime, err := getFileMTime(door_keys_file_)
83 if err == nil && current_door_keys_mtime > door_keys_mtime {
84 door_keys_mtime = current_door_keys_mtime
85 knstore.LoadKeysFile(door_keys_file_)
87 nick, err := knstore.LookupHexKeyNick(string(keybytes[0]))
89 zmqchans.Out() <- [][]byte{[]byte("ERROR"), []byte(err.Error())}
91 zmqchans.Out() <- [][]byte{[]byte("RESULT"), keybytes[0], []byte(nick)}