forked from tildetown/bbj2
		
	write some stuff
This commit is contained in:
		
							parent
							
								
									09bd315096
								
							
						
					
					
						commit
						9549c1cd22
					
				| @ -2,6 +2,7 @@ package main | |||||||
| 
 | 
 | ||||||
| import ( | import ( | ||||||
| 	"database/sql" | 	"database/sql" | ||||||
|  | 	"encoding/json" | ||||||
| 	"flag" | 	"flag" | ||||||
| 	"fmt" | 	"fmt" | ||||||
| 	"io" | 	"io" | ||||||
| @ -51,6 +52,7 @@ func main() { | |||||||
| 		}, | 		}, | ||||||
| 		Logf: func(s string, args ...interface{}) { | 		Logf: func(s string, args ...interface{}) { | ||||||
| 			fmt.Fprintf(io.Out, s, args...) | 			fmt.Fprintf(io.Out, s, args...) | ||||||
|  | 			fmt.Fprintf(io.Out, "\n") | ||||||
| 		}, | 		}, | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| @ -89,7 +91,7 @@ func _main(opts *Opts) error { | |||||||
| 	setupAPI(*opts) | 	setupAPI(*opts) | ||||||
| 
 | 
 | ||||||
| 	// TODO TLS or SSL or something | 	// TODO TLS or SSL or something | ||||||
| 	opts.Logf("starting server at %s:%d\n", cfg.Host, cfg.Port) | 	opts.Logf("starting server at %s:%d", cfg.Host, cfg.Port) | ||||||
| 	if err := http.ListenAndServe(fmt.Sprintf("%s:%d", cfg.Host, cfg.Port), nil); err != nil { | 	if err := http.ListenAndServe(fmt.Sprintf("%s:%d", cfg.Host, cfg.Port), nil); err != nil { | ||||||
| 		return fmt.Errorf("http server exited with error: %w", err) | 		return fmt.Errorf("http server exited with error: %w", err) | ||||||
| 	} | 	} | ||||||
| @ -105,8 +107,63 @@ func handler(opts Opts, f http.HandlerFunc) http.HandlerFunc { | |||||||
| 	} | 	} | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | // TODO I'm not entirely sold on this hash system; without transport | ||||||
|  | // encryption, it doesn't really help anything. I'd rather have plaintext + | ||||||
|  | // transport encryption and then, on the server side, proper salted hashing. | ||||||
|  | 
 | ||||||
|  | type User struct { | ||||||
|  | 	// TODO | ||||||
|  | 	ID string | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | type BBJResponse struct { | ||||||
|  | 	Error   bool            `json:"error"` | ||||||
|  | 	Data    interface{}     `json:"data"` | ||||||
|  | 	Usermap map[string]User `json:"usermap"` | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | func writeResponse(w http.ResponseWriter, resp BBJResponse) { | ||||||
|  | 	json.NewEncoder(w).Encode(resp) | ||||||
|  | } | ||||||
|  | 
 | ||||||
| func setupAPI(opts Opts) { | func setupAPI(opts Opts) { | ||||||
|  | 
 | ||||||
| 	http.HandleFunc("/instance", handler(opts, func(w http.ResponseWriter, req *http.Request) { | 	http.HandleFunc("/instance", handler(opts, func(w http.ResponseWriter, req *http.Request) { | ||||||
| 		io.WriteString(w, opts.Config.InstanceName) | 		w.WriteHeader(http.StatusOK) | ||||||
|  | 		w.Header().Set("Content-Type", "application/json") | ||||||
|  | 		writeResponse(w, BBJResponse{ | ||||||
|  | 			Data: opts.Config.InstanceName, | ||||||
|  | 		}) | ||||||
|  | 	})) | ||||||
|  | 
 | ||||||
|  | 	http.HandleFunc("/check_auth", handler(opts, func(w http.ResponseWriter, req *http.Request) { | ||||||
|  | 		if req.Method != "POST" { | ||||||
|  | 			http.Error(w, "bad method", 400) | ||||||
|  | 			return | ||||||
|  | 		} | ||||||
|  | 
 | ||||||
|  | 		type args struct { | ||||||
|  | 			TargetUser string `json:"target_user"` | ||||||
|  | 			TargetHash string `json:"target_hash"` | ||||||
|  | 		} | ||||||
|  | 
 | ||||||
|  | 		var a args | ||||||
|  | 
 | ||||||
|  | 		err := json.NewDecoder(req.Body).Decode(&a) | ||||||
|  | 
 | ||||||
|  | 		if err != nil { | ||||||
|  | 			http.Error(w, "could not parse arguments", 400) | ||||||
|  | 		} | ||||||
|  | 
 | ||||||
|  | 		opts.Logf("got %s %s", a.TargetUser, a.TargetHash) | ||||||
|  | 
 | ||||||
|  | 		// TODO | ||||||
|  | 		result := false | ||||||
|  | 
 | ||||||
|  | 		w.WriteHeader(http.StatusOK) | ||||||
|  | 		w.Header().Set("Content-Type", "application/json") | ||||||
|  | 		writeResponse(w, BBJResponse{ | ||||||
|  | 			Data: result, | ||||||
|  | 		}) | ||||||
| 	})) | 	})) | ||||||
| } | } | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user