aboutsummaryrefslogblamecommitdiff
path: root/webui_website.go
blob: 642c8378be10b5479d2ccf5ffa759dcc25400f5e (plain) (tree)







































































































                                                                                                                   

                                         
                                                                                                    






































































                                                                                                   
package main

import (
	"fmt"
	"github.com/gorilla/mux"
	"net/http"
	"strings"
)

// --- Start page rendering functions
func handleWebsiteList(w http.ResponseWriter, r *http.Request) {
	user := RequireUserHtml(w, r)
	if user == nil {
		return
	}

	ctrl, err := NewWebsiteController(user)
	if err != nil {
		http.Error(w, err.Error(), http.StatusInternalServerError)
		return
	}

	if len(ctrl.PrettyList) > 0 {
		http.Redirect(w, r, "/website/inspect/"+ctrl.PrettyList[0], http.StatusFound)
	} else {
		http.Redirect(w, r, "/website/new", http.StatusFound)
	}
}

type WebsiteNewTpl struct {
	Ctrl *WebsiteController
	Err  error
}

func handleWebsiteNew(w http.ResponseWriter, r *http.Request) {
	user := RequireUserHtml(w, r)
	if user == nil {
		return
	}

	ctrl, err := NewWebsiteController(user)
	if err != nil {
		http.Error(w, err.Error(), http.StatusInternalServerError)
		return
	}

	tpl := &WebsiteNewTpl{ctrl, nil}

	tWebsiteNew := getTemplate("garage_website_new.html")
	if r.Method == "POST" {
		r.ParseForm()

		bucket := strings.Join(r.Form["bucket"], "")
		if bucket == "" {
			bucket = strings.Join(r.Form["bucket2"], "")
		}

		view, err := ctrl.Create(bucket)
		if err != nil {
			tpl.Err = err
			tWebsiteNew.Execute(w, tpl)
			return
		}

		http.Redirect(w, r, "/website/inspect/"+view.Name.Pretty, http.StatusFound)
		return
	}

	tWebsiteNew.Execute(w, tpl)
}

type WebsiteInspectTpl struct {
	Describe *WebsiteDescribe
	View     *WebsiteView
	Err      error
}

func handleWebsiteInspect(w http.ResponseWriter, r *http.Request) {
	var processErr error

	user := RequireUserHtml(w, r)
	if user == nil {
		return
	}

	ctrl, err := NewWebsiteController(user)
	if err != nil {
		http.Error(w, err.Error(), http.StatusInternalServerError)
		return
	}

	bucketName := mux.Vars(r)["bucket"]

	if r.Method == "POST" {
		r.ParseForm()
		action := strings.Join(r.Form["action"], "")
		switch action {
		case "increase_quota":
			_, processErr = ctrl.Patch(bucketName, &WebsitePatch{Size: &user.Quota.WebsiteSizeBursted})
		case "delete_bucket":
			processErr = ctrl.Delete(bucketName)
			if processErr == nil {
				http.Redirect(w, r, "/website", http.StatusFound)
			}
		case "rotate_key":
			do_action := true
			_, processErr = ctrl.Patch(bucketName, &WebsitePatch{RotateKey: &do_action})
		default:
			processErr = fmt.Errorf("Unknown action")
		}

	}

	view, err := ctrl.Inspect(bucketName)
	if err != nil {
		http.Error(w, err.Error(), http.StatusInternalServerError)
		return
	}

	describe, err := ctrl.Describe()
	if err != nil {
		http.Error(w, err.Error(), http.StatusInternalServerError)
		return
	}

	tpl := &WebsiteInspectTpl{describe, view, processErr}

	tWebsiteInspect := getTemplate("garage_website_inspect.html")
	tWebsiteInspect.Execute(w, &tpl)
}

func handleWebsiteVhost(w http.ResponseWriter, r *http.Request) {
	var processErr error

	user := RequireUserHtml(w, r)
	if user == nil {
		return
	}

	ctrl, err := NewWebsiteController(user)
	if err != nil {
		http.Error(w, err.Error(), http.StatusInternalServerError)
		return
	}

	bucketName := mux.Vars(r)["bucket"]

	if r.Method == "POST" {
		r.ParseForm()

		bucket := strings.Join(r.Form["bucket"], "")
		if bucket == "" {
			bucket = strings.Join(r.Form["bucket2"], "")
		}

		view, processErr := ctrl.Patch(bucketName, &WebsitePatch{Vhost: &bucket})
		if processErr == nil {
			http.Redirect(w, r, "/website/inspect/"+view.Name.Pretty, http.StatusFound)
			return
		}
	}

	view, err := ctrl.Inspect(bucketName)
	if err != nil {
		http.Error(w, err.Error(), http.StatusInternalServerError)
		return
	}

	describe, err := ctrl.Describe()
	if err != nil {
		http.Error(w, err.Error(), http.StatusInternalServerError)
		return
	}

	tpl := &WebsiteInspectTpl{describe, view, processErr}
	tWebsiteEdit := getTemplate("garage_website_edit.html")
	tWebsiteEdit.Execute(w, &tpl)
}