func rootHandler(ctx context.Context, w http.ResponseWriter, r *http.Request) { cdb := complaintdb.NewDB(ctx) sesh, _ := GetUserSession(ctx) cdb.Debugf("root_001", "session obtained") for _, c := range r.Cookies() { cdb.Debugf("root_002", "cookie: %s", c) } cdb.Debugf("root_002", "num cookies: %d", len(r.Cookies())) cdb.Debugf("root_002a", "Cf-Connecting-Ip: %s", r.Header.Get("Cf-Connecting-Ip")) // No session ? Get them to login if sesh.Email == "" { fb.AppId = kFacebookAppId fb.AppSecret = kFacebookAppSecret loginUrls := map[string]string{ "googlefromscratch": g.GetLoginUrl(r, true), "google": g.GetLoginUrl(r, false), "facebook": fb.GetLoginUrl(r), } if err := templates.ExecuteTemplate(w, "landing", loginUrls); err != nil { http.Error(w, err.Error(), http.StatusInternalServerError) } return } if sesh.HasCreatedAt() { cdb.Debugf("root_003", "tstamp=%s, age=%s", sesh.CreatedAt, time.Since(sesh.CreatedAt)) } modes := map[string]bool{} // The rootHandler is the URL wildcard. Except Fragments, which are broken. if r.URL.Path == "/full" { modes["expanded"] = true } else if r.URL.Path == "/edit" { modes["edit"] = true } else if r.URL.Path == "/debug" { modes["debug"] = true } else if r.URL.Path != "/" { // This is a request for apple_icon or somesuch junk. Just say no. http.NotFound(w, r) return } cdb.Debugf("root_004", "about get cdb.GetAllByEmailAddress") cap, err := cdb.GetAllByEmailAddress(sesh.Email, modes["expanded"]) if cap == nil && err == nil { // No profile exists; daisy-chain into profile page http.Redirect(w, r, "/profile", http.StatusFound) return } else if err != nil { http.Error(w, err.Error(), http.StatusInternalServerError) return } cdb.Debugf("root_005", "cdb.GetAllByEmailAddress done") modes["admin"] = user.Current(ctx) != nil && user.Current(ctx).Admin modes["superuser"] = modes["admin"] // Default to "", unless we had a complaint in the past hour. lastActivity := "" if len(cap.Complaints) > 0 && time.Since(cap.Complaints[0].Timestamp) < time.Hour { lastActivity = cap.Complaints[0].Activity } var complaintDefaults = map[string]interface{}{ "ActivityList": kActivities, // lives in add-complaint "DefaultActivity": lastActivity, "DefaultLoudness": 1, "NewForm": true, } message := "" disableReporting := false if cap.Profile.FullName == "" { message += "<li>We don't have your full name</li>" disableReporting = true } if cap.Profile.StructuredAddress.Zip == "" { message += "<li>We don't have an accurate address</li>" disableReporting = true } if message != "" { message = fmt.Sprintf("<p><b>We've found some problems with your profile:</b></p><ul>%s</ul>"+ "<p> Without this data, your complaints won't be counted, so please "+ "<a href=\"/profile\"><b>update your profile</b></a> before submitting any more complaints !</p>", message) } var params = map[string]interface{}{ //"Message": template.HTML("Hi!"), "Cap": *cap, "Complaints": hintComplaints(cap.Complaints, modes["superuser"]), "Now": date.NowInPdt(), "Modes": modes, "ComplaintDefaults": complaintDefaults, "Message": template.HTML(message), //"Info": template.HTML("Hi!"), "DisableReporting": disableReporting, } if err := templates.ExecuteTemplate(w, "main", params); err != nil { http.Error(w, err.Error(), http.StatusInternalServerError) } }
func rootHandler(w http.ResponseWriter, r *http.Request) { c := appengine.NewContext(r) session := sessions.Get(r) // No session ? Get them to login if session.Values["email"] == nil { fb.AppId = kFacebookAppId fb.AppSecret = kFacebookAppSecret loginUrls := map[string]string{ "googlefromscratch": g.GetLoginUrl(r, true), "google": g.GetLoginUrl(r, false), "facebook": fb.GetLoginUrl(r), } if err := templates.ExecuteTemplate(w, "landing", loginUrls); err != nil { http.Error(w, err.Error(), http.StatusInternalServerError) } return } modes := map[string]bool{} // The rootHandler is the URL wildcard. Except Fragments, which are broken. if r.URL.Path == "/full" { modes["expanded"] = true } else if r.URL.Path == "/edit" { modes["edit"] = true } else if r.URL.Path == "/debug" { modes["debug"] = true } else if r.URL.Path != "/" { // This is a request for apple_icon or somesuch junk. Just say no. http.NotFound(w, r) return } cdb := complaintdb.ComplaintDB{C: c} cap, err := cdb.GetAllByEmailAddress(session.Values["email"].(string), modes["expanded"]) if cap == nil && err == nil { // No profile exists; daisy-chain into profile page http.Redirect(w, r, "/profile", http.StatusFound) return } else if err != nil { http.Error(w, err.Error(), http.StatusInternalServerError) return } modes["admin"] = user.Current(c) != nil && user.Current(c).Admin modes["superuser"] = modes["admin"] || cap.Profile.EmailAddress == "*****@*****.**" // Default to "", unless we had a complaint in the past hour. lastActivity := "" if len(cap.Complaints) > 0 && time.Since(cap.Complaints[0].Timestamp) < time.Hour { lastActivity = cap.Complaints[0].Activity } var complaintDefaults = map[string]interface{}{ "ActivityList": kActivities, // lives in add-complaint "DefaultActivity": lastActivity, "DefaultLoudness": 1, "NewForm": true, } message := "" if cap.Profile.FullName == "" { message += "<li>We don't have your full name</li>" } if cap.Profile.StructuredAddress.Zip == "" { message += "<li>We don't have an accurate address</li>" } if message != "" { message = fmt.Sprintf("<p><b>We've found some problems with your profile:</b></p><ul>%s</ul>"+ "<p> Without this data, your complaints might be exluded, so please "+ "<a href=\"/profile\"><b>update your profile</b></a> !</p>", message) } var params = map[string]interface{}{ //"Message": template.HTML("Hi!"), "Cap": *cap, "Complaints": hintComplaints(cap.Complaints, modes["superuser"]), "Now": date.NowInPdt(), "Modes": modes, "ComplaintDefaults": complaintDefaults, "Message": template.HTML(message), } if err := templates.ExecuteTemplate(w, "main", params); err != nil { http.Error(w, err.Error(), http.StatusInternalServerError) } }