Mercurial > mercurial > hgweb_lesearcher.cgi
diff lsserver.go @ 0:615a15029602 default tip
first commit.
author | pyon@macmini |
---|---|
date | Sun, 10 Nov 2019 08:39:41 +0900 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/lsserver.go Sun Nov 10 08:39:41 2019 +0900 @@ -0,0 +1,189 @@ +/* + server.go : server-program. + Version : 0.1 + Last Change: 2019-11-08 金 17:47:26. +*/ +package main + +import ( + "bufio" + "fmt" + "log" + "net/http" + "os" + "strconv" + "strings" +) + +const ( + version = "0.1" + + userdb = "user.gz.txt" + hhsdb = "hhsdb.gz.txt" + indexdb = "indexdb.gz.txt" +) + +var ( + server string + + userhash map[string]user + hhshash map[string]hhs +) + +type user struct { + id string + group int + name string +} + +type hhs struct { + no string + name string + kana string + addr string + birth string + sex string + dates []string +} + +func (h *hhs) Info() string { + dates := "" + for _, d := range h.dates { + dates += ":" + d + } + s := []string{h.name, h.addr, dates} + return strings.Join(s, ",") +} + +func init() { + server = "localhost:80" +} + +func main() { + load_user() + load_hhs() + load_index() + + // start Web-server + fmt.Println("Le:Searcher-Server start [", server, "] ( version", version, ")") + http.HandleFunc("/auth/", auth_handler) + http.HandleFunc("/search/", search_handler) + http.HandleFunc("/index/", index_handler) + log.Fatal(http.ListenAndServe(server, nil)) +} + +// DB-Load Functions +func load_user() error { + // userid:n + userhash = make(map[string]user) + + f, err := os.OpenFile(userdb, os.O_RDONLY, 0644) + if err != nil { + return err + } + scanner := bufio.NewScanner(f) + for scanner.Scan() { + s := strings.Split(scanner.Text(), ":") + g, _ := strconv.Atoi(s[1]) + u := user{id: s[0], group: g, name: s[2]} + userhash[s[0]] = u + } + if err := scanner.Err(); err != nil { + fmt.Fprintln(os.Stderr, "reading userdb", err) + } + if err := f.Close(); err != nil { + return err + } + return nil +} + +func load_hhs() error { + hhshash = make(map[string]hhs) + + f, err := os.OpenFile(hhsdb, os.O_RDONLY, 0644) + if err != nil { + return err + } + scanner := bufio.NewScanner(f) + for scanner.Scan() { + s := strings.Split(scanner.Text(), ",") + h := hhs{no: s[0], name: s[1]} + hhshash[s[0]] = h + } + if err := scanner.Err(); err != nil { + fmt.Fprintln(os.Stderr, "reading hhsdb", err) + } + if err := f.Close(); err != nil { + return err + } + return nil +} + +func load_index() error { + // hhsno:date + f, err := os.OpenFile(indexdb, os.O_RDONLY, 0644) + if err != nil { + return err + } + scanner := bufio.NewScanner(f) + for scanner.Scan() { + s := strings.Split(scanner.Text(), ":") + h := hhshash[s[0]] + h.dates = append(h.dates, s[1]) + hhshash[s[0]] = h + } + if err := scanner.Err(); err != nil { + fmt.Fprintln(os.Stderr, "reading indexdb", err) + } + if err := f.Close(); err != nil { + return err + } + return nil +} + +// HTTP Handlers +func auth_handler(w http.ResponseWriter, r *http.Request) { + // Toggle Le:Searcher-Client menu + // userid : UpdateDB, Index, M&M, BPrint, UserMng + // 7moon : 1, 1, 1, 1, 1 => manager :0 + // kaigo : 0, 1, 1, 1, 0 => staff :1 # acl by IPaddress + // chosha : 0, 0, 0, 0, 0 => chosa :2 + fmt.Println("auth") + + id := r.URL.Path[len("/auth/"):] + fmt.Println(id) + g := 0 + switch g { + case 0: + w.Write([]byte("0")) + case 1: + w.Write([]byte("1")) + default: + w.Write([]byte("2")) + } +} + +func search_handler(w http.ResponseWriter, r *http.Request) { + // /search/userid:hhsno:date + // n=00000000 -> name & address & dates + // n>00000000 -> tif image + fmt.Println("search") + + p := r.URL.Path[len("/search/"):] + s := strings.Split(p, ":") + if false { // invalid user + http.NotFound(w, r) + return + } + if strings.Compare(s[1], "00000000") == 0 { + h := hhshash[s[1]] + w.Write([]byte(h.Info())) + return + } + +} + +func index_handler(w http.ResponseWriter, r *http.Request) { + fmt.Println("index") +} +