allocator: move handlers from http.go into their own file

Change-Id: I3840e33116ab2c9cb82fee4c322733707a44f95e
diff --git a/services/allocator/allocatord/handlers.go b/services/allocator/allocatord/handlers.go
new file mode 100644
index 0000000..bdfb3fe
--- /dev/null
+++ b/services/allocator/allocatord/handlers.go
@@ -0,0 +1,87 @@
+// Copyright 2016 The Vanadium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package main
+
+import (
+	"fmt"
+	"net/http"
+	"strings"
+	"time"
+
+	"v.io/v23"
+	"v.io/v23/security"
+)
+
+func handleHome(ss *serverState, rs *requestState) error {
+	ctx := ss.ctx
+	instances, err := list(ctx, rs.email)
+	if err != nil {
+		return fmt.Errorf("list error: %v", err)
+	}
+	type instanceArg struct {
+		Name,
+		NameRoot,
+		DestroyURL,
+		DashboardURL string
+		BlessingPatterns []string
+		CreationTime     time.Time
+	}
+	tmplArgs := struct {
+		AssetsPrefix,
+		ServerName,
+		Email,
+		CreateURL,
+		Message string
+		Instances []instanceArg
+	}{
+		AssetsPrefix: ss.args.staticAssetsPrefix,
+		ServerName:   ss.args.serverName,
+		Email:        rs.email,
+		CreateURL:    makeURL(ctx, routeCreate, params{paramCSRF: rs.csrfToken}),
+		Message:      rs.r.FormValue(paramMessage),
+	}
+	for _, instance := range instances {
+		var patterns []string
+		for _, b := range security.BlessingNames(v23.GetPrincipal(ctx), ss.args.baseBlessings) {
+			bName := strings.Join([]string{b, instance.name}, security.ChainSeparator)
+			patterns = append(patterns, bName)
+		}
+
+		tmplArgs.Instances = append(tmplArgs.Instances, instanceArg{
+			Name:             instance.mountName,
+			NameRoot:         nameRoot(ctx),
+			CreationTime:     instance.creationTime,
+			BlessingPatterns: patterns,
+			DestroyURL:       makeURL(ctx, routeDestroy, params{paramName: instance.mountName, paramCSRF: rs.csrfToken}),
+			DashboardURL:     makeURL(ctx, routeDashboard, params{paramDashboardName: relativeMountName(instance.mountName), paramCSRF: rs.csrfToken}),
+		})
+	}
+	if err := ss.args.assets.executeTemplate(rs.w, homeTmpl, tmplArgs); err != nil {
+		return fmt.Errorf("failed to render home template: %v", err)
+	}
+	return nil
+}
+
+func handleCreate(ss *serverState, rs *requestState) error {
+	ctx := ss.ctx
+	name, err := create(ctx, rs.email, ss.args.baseBlessings)
+	if err != nil {
+		return fmt.Errorf("create failed: %v", err)
+	}
+	redirectTo := makeURL(ctx, routeHome, params{paramMessage: "created " + name, paramCSRF: rs.csrfToken})
+	http.Redirect(rs.w, rs.r, redirectTo, http.StatusFound)
+	return nil
+}
+
+func handleDestroy(ss *serverState, rs *requestState) error {
+	ctx := ss.ctx
+	name := rs.r.FormValue(paramName)
+	if err := destroy(ctx, rs.email, name); err != nil {
+		return fmt.Errorf("destroy failed: %v", err)
+	}
+	redirectTo := makeURL(ctx, routeHome, params{paramMessage: "destroyed " + name, paramCSRF: rs.csrfToken})
+	http.Redirect(rs.w, rs.r, redirectTo, http.StatusFound)
+	return nil
+}
diff --git a/services/allocator/allocatord/http.go b/services/allocator/allocatord/http.go
index c9d3901..8b6fdb0 100644
--- a/services/allocator/allocatord/http.go
+++ b/services/allocator/allocatord/http.go
@@ -10,10 +10,8 @@
 	"net"
 	"net/http"
 	"net/url"
-	"strings"
 	"time"
 
-	"v.io/v23"
 	"v.io/v23/context"
 	"v.io/v23/security"
 )
@@ -227,77 +225,3 @@
 	}
 	ctx.Infof("%s[%s] : OK", r.Method, r.URL)
 }
-
-// The oauth handler is in oauth.go.
-
-func handleHome(ss *serverState, rs *requestState) error {
-	ctx := ss.ctx
-	instances, err := list(ctx, rs.email)
-	if err != nil {
-		return fmt.Errorf("list error: %v", err)
-	}
-	type instanceArg struct {
-		Name,
-		NameRoot,
-		DestroyURL,
-		DashboardURL string
-		BlessingPatterns []string
-		CreationTime     time.Time
-	}
-	tmplArgs := struct {
-		AssetsPrefix,
-		ServerName,
-		Email,
-		CreateURL,
-		Message string
-		Instances []instanceArg
-	}{
-		AssetsPrefix: ss.args.staticAssetsPrefix,
-		ServerName:   ss.args.serverName,
-		Email:        rs.email,
-		CreateURL:    makeURL(ctx, routeCreate, params{paramCSRF: rs.csrfToken}),
-		Message:      rs.r.FormValue(paramMessage),
-	}
-	for _, instance := range instances {
-		var patterns []string
-		for _, b := range security.BlessingNames(v23.GetPrincipal(ctx), ss.args.baseBlessings) {
-			bName := strings.Join([]string{b, instance.name}, security.ChainSeparator)
-			patterns = append(patterns, bName)
-		}
-
-		tmplArgs.Instances = append(tmplArgs.Instances, instanceArg{
-			Name:             instance.mountName,
-			NameRoot:         nameRoot(ctx),
-			CreationTime:     instance.creationTime,
-			BlessingPatterns: patterns,
-			DestroyURL:       makeURL(ctx, routeDestroy, params{paramName: instance.mountName, paramCSRF: rs.csrfToken}),
-			DashboardURL:     makeURL(ctx, routeDashboard, params{paramDashboardName: relativeMountName(instance.mountName), paramCSRF: rs.csrfToken}),
-		})
-	}
-	if err := ss.args.assets.executeTemplate(rs.w, homeTmpl, tmplArgs); err != nil {
-		return fmt.Errorf("failed to render home template: %v", err)
-	}
-	return nil
-}
-
-func handleCreate(ss *serverState, rs *requestState) error {
-	ctx := ss.ctx
-	name, err := create(ctx, rs.email, ss.args.baseBlessings)
-	if err != nil {
-		return fmt.Errorf("create failed: %v", err)
-	}
-	redirectTo := makeURL(ctx, routeHome, params{paramMessage: "created " + name, paramCSRF: rs.csrfToken})
-	http.Redirect(rs.w, rs.r, redirectTo, http.StatusFound)
-	return nil
-}
-
-func handleDestroy(ss *serverState, rs *requestState) error {
-	ctx := ss.ctx
-	name := rs.r.FormValue(paramName)
-	if err := destroy(ctx, rs.email, name); err != nil {
-		return fmt.Errorf("destroy failed: %v", err)
-	}
-	redirectTo := makeURL(ctx, routeHome, params{paramMessage: "destroyed " + name, paramCSRF: rs.csrfToken})
-	http.Redirect(rs.w, rs.r, redirectTo, http.StatusFound)
-	return nil
-}