removed kicad-libs and teenstep after moving to github
[svn42.git] / go / door_nick_lookup_zmq / keys_file.go
1 // (c) Bernhard Tittelbach, 2013
2
3 package main
4
5 import (
6     "log"
7     "regexp"
8     "strconv"
9     "errors"
10     "os"
11     "bufio"
12 )
13
14 var re_keynickline *regexp.Regexp = regexp.MustCompile("^\\s*([0-9a-fA-F]+)\\s+((?:\\p{Latin}|\\d)+).*")
15
16 type KeyNickStore map[uint64]string
17
18 func (key_nick_map *KeyNickStore) LoadKeysFile(filename string) error {
19     keysfile, err := os.OpenFile(filename, os.O_RDONLY, 0400) // For read access.
20     defer keysfile.Close()
21     if err != nil {
22         return err
23     }
24     
25     //clear map
26     *key_nick_map = make(KeyNickStore)
27     
28     linescanner := bufio.NewScanner(keysfile)
29     linescanner.Split(bufio.ScanLines)
30     for linescanner.Scan() {
31         m := re_keynickline.FindStringSubmatch(linescanner.Text())
32         if len(m) > 2 {
33             if kuint, err := strconv.ParseUint(m[1], 16, 64); err == nil {
34                 (*key_nick_map)[kuint] = m[2]
35             } else {
36                 log.Print("Error converting hex-cardid:",m[0])
37             }
38         }
39     }
40     return nil
41 }
42
43 func (key_nick_map *KeyNickStore) LookupHexKeyNick( key string ) (string, error) {
44     kuint, err := strconv.ParseUint(key, 16, 64)
45     if err != nil {
46         return "", errors.New("Invalid Hex-Card-Id")
47     }
48     nick, present := (*key_nick_map)[kuint]
49     if present {
50         return nick, nil
51     } else {
52         return "", errors.New("Key Unknown")
53     }
54 }