Mercurial > mercurial > hgweb_lesearcher.cgi
comparison lsserver.go @ 0:615a15029602 default tip
first commit.
| author | pyon@macmini |
|---|---|
| date | Sun, 10 Nov 2019 08:39:41 +0900 |
| parents | |
| children |
comparison
equal
deleted
inserted
replaced
| -1:000000000000 | 0:615a15029602 |
|---|---|
| 1 /* | |
| 2 server.go : server-program. | |
| 3 Version : 0.1 | |
| 4 Last Change: 2019-11-08 金 17:47:26. | |
| 5 */ | |
| 6 package main | |
| 7 | |
| 8 import ( | |
| 9 "bufio" | |
| 10 "fmt" | |
| 11 "log" | |
| 12 "net/http" | |
| 13 "os" | |
| 14 "strconv" | |
| 15 "strings" | |
| 16 ) | |
| 17 | |
| 18 const ( | |
| 19 version = "0.1" | |
| 20 | |
| 21 userdb = "user.gz.txt" | |
| 22 hhsdb = "hhsdb.gz.txt" | |
| 23 indexdb = "indexdb.gz.txt" | |
| 24 ) | |
| 25 | |
| 26 var ( | |
| 27 server string | |
| 28 | |
| 29 userhash map[string]user | |
| 30 hhshash map[string]hhs | |
| 31 ) | |
| 32 | |
| 33 type user struct { | |
| 34 id string | |
| 35 group int | |
| 36 name string | |
| 37 } | |
| 38 | |
| 39 type hhs struct { | |
| 40 no string | |
| 41 name string | |
| 42 kana string | |
| 43 addr string | |
| 44 birth string | |
| 45 sex string | |
| 46 dates []string | |
| 47 } | |
| 48 | |
| 49 func (h *hhs) Info() string { | |
| 50 dates := "" | |
| 51 for _, d := range h.dates { | |
| 52 dates += ":" + d | |
| 53 } | |
| 54 s := []string{h.name, h.addr, dates} | |
| 55 return strings.Join(s, ",") | |
| 56 } | |
| 57 | |
| 58 func init() { | |
| 59 server = "localhost:80" | |
| 60 } | |
| 61 | |
| 62 func main() { | |
| 63 load_user() | |
| 64 load_hhs() | |
| 65 load_index() | |
| 66 | |
| 67 // start Web-server | |
| 68 fmt.Println("Le:Searcher-Server start [", server, "] ( version", version, ")") | |
| 69 http.HandleFunc("/auth/", auth_handler) | |
| 70 http.HandleFunc("/search/", search_handler) | |
| 71 http.HandleFunc("/index/", index_handler) | |
| 72 log.Fatal(http.ListenAndServe(server, nil)) | |
| 73 } | |
| 74 | |
| 75 // DB-Load Functions | |
| 76 func load_user() error { | |
| 77 // userid:n | |
| 78 userhash = make(map[string]user) | |
| 79 | |
| 80 f, err := os.OpenFile(userdb, os.O_RDONLY, 0644) | |
| 81 if err != nil { | |
| 82 return err | |
| 83 } | |
| 84 scanner := bufio.NewScanner(f) | |
| 85 for scanner.Scan() { | |
| 86 s := strings.Split(scanner.Text(), ":") | |
| 87 g, _ := strconv.Atoi(s[1]) | |
| 88 u := user{id: s[0], group: g, name: s[2]} | |
| 89 userhash[s[0]] = u | |
| 90 } | |
| 91 if err := scanner.Err(); err != nil { | |
| 92 fmt.Fprintln(os.Stderr, "reading userdb", err) | |
| 93 } | |
| 94 if err := f.Close(); err != nil { | |
| 95 return err | |
| 96 } | |
| 97 return nil | |
| 98 } | |
| 99 | |
| 100 func load_hhs() error { | |
| 101 hhshash = make(map[string]hhs) | |
| 102 | |
| 103 f, err := os.OpenFile(hhsdb, os.O_RDONLY, 0644) | |
| 104 if err != nil { | |
| 105 return err | |
| 106 } | |
| 107 scanner := bufio.NewScanner(f) | |
| 108 for scanner.Scan() { | |
| 109 s := strings.Split(scanner.Text(), ",") | |
| 110 h := hhs{no: s[0], name: s[1]} | |
| 111 hhshash[s[0]] = h | |
| 112 } | |
| 113 if err := scanner.Err(); err != nil { | |
| 114 fmt.Fprintln(os.Stderr, "reading hhsdb", err) | |
| 115 } | |
| 116 if err := f.Close(); err != nil { | |
| 117 return err | |
| 118 } | |
| 119 return nil | |
| 120 } | |
| 121 | |
| 122 func load_index() error { | |
| 123 // hhsno:date | |
| 124 f, err := os.OpenFile(indexdb, os.O_RDONLY, 0644) | |
| 125 if err != nil { | |
| 126 return err | |
| 127 } | |
| 128 scanner := bufio.NewScanner(f) | |
| 129 for scanner.Scan() { | |
| 130 s := strings.Split(scanner.Text(), ":") | |
| 131 h := hhshash[s[0]] | |
| 132 h.dates = append(h.dates, s[1]) | |
| 133 hhshash[s[0]] = h | |
| 134 } | |
| 135 if err := scanner.Err(); err != nil { | |
| 136 fmt.Fprintln(os.Stderr, "reading indexdb", err) | |
| 137 } | |
| 138 if err := f.Close(); err != nil { | |
| 139 return err | |
| 140 } | |
| 141 return nil | |
| 142 } | |
| 143 | |
| 144 // HTTP Handlers | |
| 145 func auth_handler(w http.ResponseWriter, r *http.Request) { | |
| 146 // Toggle Le:Searcher-Client menu | |
| 147 // userid : UpdateDB, Index, M&M, BPrint, UserMng | |
| 148 // 7moon : 1, 1, 1, 1, 1 => manager :0 | |
| 149 // kaigo : 0, 1, 1, 1, 0 => staff :1 # acl by IPaddress | |
| 150 // chosha : 0, 0, 0, 0, 0 => chosa :2 | |
| 151 fmt.Println("auth") | |
| 152 | |
| 153 id := r.URL.Path[len("/auth/"):] | |
| 154 fmt.Println(id) | |
| 155 g := 0 | |
| 156 switch g { | |
| 157 case 0: | |
| 158 w.Write([]byte("0")) | |
| 159 case 1: | |
| 160 w.Write([]byte("1")) | |
| 161 default: | |
| 162 w.Write([]byte("2")) | |
| 163 } | |
| 164 } | |
| 165 | |
| 166 func search_handler(w http.ResponseWriter, r *http.Request) { | |
| 167 // /search/userid:hhsno:date | |
| 168 // n=00000000 -> name & address & dates | |
| 169 // n>00000000 -> tif image | |
| 170 fmt.Println("search") | |
| 171 | |
| 172 p := r.URL.Path[len("/search/"):] | |
| 173 s := strings.Split(p, ":") | |
| 174 if false { // invalid user | |
| 175 http.NotFound(w, r) | |
| 176 return | |
| 177 } | |
| 178 if strings.Compare(s[1], "00000000") == 0 { | |
| 179 h := hhshash[s[1]] | |
| 180 w.Write([]byte(h.Info())) | |
| 181 return | |
| 182 } | |
| 183 | |
| 184 } | |
| 185 | |
| 186 func index_handler(w http.ResponseWriter, r *http.Request) { | |
| 187 fmt.Println("index") | |
| 188 } | |
| 189 |
