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")
+}
+