laserproxy: extend deadline to 60min & random changes

Change-Id: I2601d2da8da567d8dd6beecc630de911d5d161c3
diff --git a/hswaw/laserproxy/main.go b/hswaw/laserproxy/main.go
index 07d7bcd..03c2bf8 100644
--- a/hswaw/laserproxy/main.go
+++ b/hswaw/laserproxy/main.go
@@ -22,6 +22,7 @@
 	flagLaserNetworkAddress = "10.11.0.1"
 	flagClientNetworkAddress = "10.8.1.2"
 	flagWebAddress = "127.0.0.1:8080"
+	flagOwnershipDuration = "1h"
 
 	tplIndex = template.Must(template.New("index.html").Parse(tpl.MustAssetString("index.html")))
 )
@@ -35,6 +36,7 @@
 	flag.StringVar(&flagLaserNetworkAddress, "laser_network", flagLaserNetworkAddress, "Address of proxy on laser network")
 	flag.StringVar(&flagClientNetworkAddress, "client_network", flagClientNetworkAddress, "Address of proxy on client network")
 	flag.StringVar(&flagWebAddress, "web_address", flagWebAddress, "Address and port to listen on for public web connections")
+	flag.StringVar(&flagOwnershipDuration, "timeout_duration", flagOwnershipDuration, "Time after which lasercutter lock will expire when not in use")
 
 	flag.Parse()
 	m := mirko.New()
@@ -63,13 +65,18 @@
 		glog.Fatalf("could not make laser UDP address: %v", err)
 	}
 
+	ownershipDuration, err := time.ParseDuration(flagOwnershipDuration)
+	if err != nil {
+		glog.Fatalf("could not parse timeout duration: %v", err)
+	}
+
 	ctx := m.Context()
 	s := &service{
 		lockCtrl: make(chan *lockCtrl),
 	}
 	updates := make(chan *lockUpdate)
 	go s.runProxy(ctx, updates, laserAddr, lisLaser, lisClient)
-	go s.runLocker(ctx, s.lockCtrl)
+	go s.runLocker(ctx, s.lockCtrl, ownershipDuration)
 	s.lockCtrl <- &lockCtrl{
 		subscribe: &lockCtrlSubscribe{
 			subscriber: updates,
@@ -103,7 +110,7 @@
 
 var (
 	sampleNames = []string{
-		"enleth", "radex", "qdot", "hans acker", "makłowicz",
+		"enleth", "radex", "qdot", "hans acker", "lars aser", "makłowicz",
 	}
 )
 
@@ -126,13 +133,13 @@
 	err := tplIndex.Execute(w, struct {
 		You bool
 		CurrentAddress string
-		CurrentNote string
+		CurrentName string
 		CurrentDeadline string
 		SampleName string
 	}{
 		You: cur.addr == remoteAddr(r),
 		CurrentAddress: cur.addr,
-		CurrentNote: cur.note,
+		CurrentName: cur.note,
 		CurrentDeadline: fmt.Sprintf("%d minute(s)", int(cur.deadline.Sub(time.Now()).Minutes())),
 		SampleName: sampleNames[rand.Intn(len(sampleNames))],
 	})
@@ -149,7 +156,7 @@
 	who := r.Form.Get("who")
 	prev := r.Form.Get("prev")
 	if who == "" {
-		fmt.Fprintf(w, "sorry, who are you? please specify a name")
+		fmt.Fprintf(w, "excuse me, who are you? please specify a name")
 		return
 	}