0
|
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
|