github.com/kyleu/dbaudit@v0.0.2-0.20240321155047-ff2f2c940496/app/controller/clib/profile.go (about)

     1  // Package clib - Content managed by Project Forge, see [projectforge.md] for details.
     2  package clib
     3  
     4  import (
     5  	"net/http"
     6  	"net/url"
     7  
     8  	"github.com/pkg/errors"
     9  
    10  	"github.com/kyleu/dbaudit/app"
    11  	"github.com/kyleu/dbaudit/app/controller"
    12  	"github.com/kyleu/dbaudit/app/controller/csession"
    13  	"github.com/kyleu/dbaudit/app/controller/cutil"
    14  	"github.com/kyleu/dbaudit/app/lib/theme"
    15  	"github.com/kyleu/dbaudit/views/vprofile"
    16  )
    17  
    18  func Profile(w http.ResponseWriter, r *http.Request) {
    19  	controller.Act("profile", w, r, func(as *app.State, ps *cutil.PageState) (string, error) {
    20  		return profileAction(w, r, as, ps)
    21  	})
    22  }
    23  
    24  func profileAction(w http.ResponseWriter, r *http.Request, as *app.State, ps *cutil.PageState) (string, error) {
    25  	ps.SetTitleAndData("Profile", ps.Profile)
    26  	thm := as.Themes.Get(ps.Profile.Theme, ps.Logger)
    27  
    28  	prvs, err := as.Auth.Providers(ps.Logger)
    29  	if err != nil {
    30  		return "", errors.Wrap(err, "can't load providers")
    31  	}
    32  
    33  	redir := "/"
    34  	ref := r.Header.Get("Referer")
    35  	if ref != "" {
    36  		u, err := url.Parse(ref)
    37  		if err == nil && u != nil && u.Path != cutil.DefaultProfilePath {
    38  			redir = u.Path
    39  		}
    40  	}
    41  	ps.DefaultNavIcon = "profile"
    42  	page := &vprofile.Profile{Profile: ps.Profile, Theme: thm, Providers: prvs, Referrer: redir}
    43  	return controller.Render(w, r, as, page, ps, "Profile")
    44  }
    45  
    46  func ProfileSave(w http.ResponseWriter, r *http.Request) {
    47  	controller.Act("profile.save", w, r, func(_ *app.State, ps *cutil.PageState) (string, error) {
    48  		frm, err := cutil.ParseForm(r, ps.RequestBody)
    49  		if err != nil {
    50  			return "", err
    51  		}
    52  
    53  		n := ps.Profile.Clone()
    54  
    55  		referrerDefault := frm.GetStringOpt("referrer")
    56  		if referrerDefault == "" {
    57  			referrerDefault = cutil.DefaultProfilePath
    58  		}
    59  
    60  		n.Name = frm.GetStringOpt("name")
    61  		n.Mode = frm.GetStringOpt("mode")
    62  		n.Theme = frm.GetStringOpt("theme")
    63  		if n.Theme == theme.Default.Key {
    64  			n.Theme = ""
    65  		}
    66  
    67  		err = csession.SaveProfile(n, w, ps.Session, ps.Logger)
    68  		if err != nil {
    69  			return "", err
    70  		}
    71  
    72  		return controller.ReturnToReferrer("Saved profile", referrerDefault, w, ps)
    73  	})
    74  }