Browse Source

allow passing in the base server url

master
Brett Langdon 10 years ago
parent
commit
c6f4b0d10a
2 changed files with 23 additions and 12 deletions
  1. +11
    -3
      cmd/terse/terse.go
  2. +12
    -9
      server.go

+ 11
- 3
cmd/terse/terse.go View File

@ -1,6 +1,7 @@
package main package main
import ( import (
"fmt"
"log" "log"
"github.com/brettlangdon/go-arg" "github.com/brettlangdon/go-arg"
@ -10,17 +11,24 @@ import (
var args struct { var args struct {
MaxEntries int `arg:"-m,--max,help:max number of links to keep [default: 1000]"` MaxEntries int `arg:"-m,--max,help:max number of links to keep [default: 1000]"`
Bind string `arg:"-b,--bind,help:\"[host]:<port>\" to bind the server to [default: 127.0.0.1:5892]"` Bind string `arg:"-b,--bind,help:\"[host]:<port>\" to bind the server to [default: 127.0.0.1:5892]"`
ServerURL string `arg:"-s,--server,help:base server url to generate links as (e.g. \"https://short.domain.com\") [default: \"http://<bind>\"]"`
} }
func main() { func main() {
// Setup default args // Setup default args
args.MaxEntries = 1000 args.MaxEntries = 1000
args.Bind = "127.0.0.1:5892" args.Bind = "127.0.0.1:5892"
// Parse args from CLI // Parse args from CLI
arg.MustParse(&args) arg.MustParse(&args)
if args.ServerURL == "" {
args.ServerURL = fmt.Sprintf("http://%s", args.Bind)
}
// Start the server // Start the server
server := terse.NewServer(args.Bind, args.MaxEntries)
log.Fatal(server.ListenAndServe())
server, err := terse.NewServer(args.Bind, args.MaxEntries, args.ServerURL)
if err == nil {
err = server.ListenAndServe()
}
log.Fatal(err)
} }

+ 12
- 9
server.go View File

@ -11,7 +11,8 @@ import (
) )
type Handler struct { type Handler struct {
cache *lru.Cache
cache *lru.Cache
serverURL *url.URL
} }
func (handler *Handler) ServeHTTP(w http.ResponseWriter, r *http.Request) { func (handler *Handler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
@ -61,19 +62,21 @@ func (handler *Handler) HandlePost(w http.ResponseWriter, r *http.Request) {
handler.cache.Add(code, cleanUrl) handler.cache.Add(code, cleanUrl)
// Generate response url // Generate response url
codeUrl := &url.URL{
Scheme: "https",
Host: r.Host,
Path: "/" + code,
}
codeUrl := handler.serverURL
codeUrl.Path = "/" + code
fmt.Fprintf(w, codeUrl.String()) fmt.Fprintf(w, codeUrl.String())
} }
func NewServer(bind string, maxEntries int) *http.Server {
func NewServer(bind string, maxEntries int, serverURL string) (*http.Server, error) {
parsedURL, err := url.ParseRequestURI(serverURL)
if err != nil {
return nil, err
}
return &http.Server{ return &http.Server{
Addr: bind, Addr: bind,
Handler: &Handler{ Handler: &Handler{
cache: lru.New(maxEntries),
cache: lru.New(maxEntries),
serverURL: parsedURL,
}, },
}
}, nil
} }

Loading…
Cancel
Save