Mercurial > mercurial > hgweb_lesearcher.cgi
view 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 source
/* 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") }