Selaa lähdekoodia

Added email editing function

Toby Chui 3 vuotta sitten
vanhempi
commit
d44921c375
4 muutettua tiedostoa jossa 148 lisäystä ja 80 poistoa
  1. 22 9
      mod/auth/register/register.go
  2. 1 0
      notification.go
  3. 76 66
      register.go
  4. 49 5
      web/SystemAO/users/account.html

+ 22 - 9
mod/auth/register/register.go

@@ -272,10 +272,19 @@ func (h *RegisterHandler) HandleRegisterRequest(w http.ResponseWriter, r *http.R
 
 //Change Email for the registered user
 func (h *RegisterHandler) HandleEmailChange(w http.ResponseWriter, r *http.Request) {
-	//Get input paramter
+	//Get username from request
+	username, err := h.authAgent.GetUserName(w, r)
+	if err != nil {
+		sendErrorResponse(w, "Unable to get username from request")
+		return
+	}
+
 	email, err := mv(r, "email", true)
 	if err != nil {
-		sendErrorResponse(w, "Invalid Email")
+		//Return the user current email
+		currentEmail, _ := h.GetUserEmail(username)
+		js, _ := json.Marshal(currentEmail)
+		sendJSONResponse(w, string(js))
 		return
 	}
 
@@ -285,17 +294,21 @@ func (h *RegisterHandler) HandleEmailChange(w http.ResponseWriter, r *http.Reque
 		return
 	}
 
-	//Get username from request
-	username, err := h.authAgent.GetUserName(w, r)
-	if err != nil {
-		sendErrorResponse(w, "Unable to get username from request")
-		return
-	}
-
 	//Write email to database as well
 	h.database.Write("register", "user/email/"+username, email)
 }
 
+//Get user email by name
+func (h *RegisterHandler) GetUserEmail(username string) (string, error) {
+	userEmail := ""
+	err := h.database.Read("register", "user/email/"+username, &userEmail)
+	if err != nil || userEmail == "" {
+		return "", errors.New("User email not set")
+	}
+	return userEmail, nil
+}
+
+//Helper functions
 func isValidEmail(email string) bool {
 	_, err := mail.ParseAddress(email)
 	return err == nil

+ 1 - 0
notification.go

@@ -46,6 +46,7 @@ func notificationInit() {
 
 	go func() {
 		time.Sleep(10 * time.Second)
+		return
 		notificationQueue.BroadcastNotification(&notification.NotificationPayload{
 			ID:            strconv.Itoa(int(time.Now().Unix())),
 			Title:         "Disk SMART Error",

+ 76 - 66
register.go

@@ -1,9 +1,9 @@
 package main
 
 import (
-	"net/http"
-	"fmt"
 	"encoding/json"
+	"fmt"
+	"net/http"
 
 	reg "imuslab.com/arozos/mod/auth/register"
 	prout "imuslab.com/arozos/mod/prouter"
@@ -13,81 +13,92 @@ var (
 	registerHandler *reg.RegisterHandler
 )
 
-func RegisterSystemInit(){
+func RegisterSystemInit() {
 	//Register the endpoints for public registration
 	rh := reg.NewRegisterHandler(sysdb, authAgent, permissionHandler, reg.RegisterOptions{
-		Hostname: *host_name,
+		Hostname:   *host_name,
 		VendorIcon: "web/" + iconVendor,
-	});
+	})
 
 	registerHandler = rh
 
 	//Set the allow registry states
-	if (*allow_public_registry){
+	if *allow_public_registry {
 		registerHandler.AllowRegistry = true
-	}else{
+	} else {
 		registerHandler.AllowRegistry = false
 	}
 
-	http.HandleFunc("/public/register/register.system",registerHandler.HandleRegisterInterface);
-	http.HandleFunc("/public/register/handleRegister.system",registerHandler.HandleRegisterRequest);
-	http.HandleFunc("/public/register/checkPublicRegister",registerHandler.HandleRegisterCheck);
+	http.HandleFunc("/public/register/register.system", registerHandler.HandleRegisterInterface)
+	http.HandleFunc("/public/register/handleRegister.system", registerHandler.HandleRegisterRequest)
+	http.HandleFunc("/public/register/checkPublicRegister", registerHandler.HandleRegisterCheck)
+
+	//General user functions
+	router := prout.NewModuleRouter(prout.RouterOption{
+		AdminOnly:   false,
+		UserHandler: userHandler,
+		DeniedHandler: func(w http.ResponseWriter, r *http.Request) {
+			sendErrorResponse(w, "Permission Denied")
+		},
+	})
+
+	router.HandleFunc("/system/register/email", registerHandler.HandleEmailChange)
 
 	//Register settings
 	registerSetting(settingModule{
-		Name:     "Public Registry",
-		Desc:     "Allow public users to create account in this host",
-		IconPath: "SystemAO/users/img/small_icon.png",
-		Group: "Users",
-		StartDir: "SystemAO/users/pubreg.html",
+		Name:         "Public Registry",
+		Desc:         "Allow public users to create account in this host",
+		IconPath:     "SystemAO/users/img/small_icon.png",
+		Group:        "Users",
+		StartDir:     "SystemAO/users/pubreg.html",
 		RequireAdmin: true,
 	})
 
 	//Register Setting Interface for setting interfaces
-	
+
 	adminrouter := prout.NewModuleRouter(prout.RouterOption{
-		ModuleName: "System Setting", 
-		AdminOnly: true, 
-		UserHandler: userHandler, 
-		DeniedHandler: func(w http.ResponseWriter, r *http.Request){
-			sendErrorResponse(w, "Permission Denied");
+		ModuleName:  "System Setting",
+		AdminOnly:   true,
+		UserHandler: userHandler,
+		DeniedHandler: func(w http.ResponseWriter, r *http.Request) {
+			sendErrorResponse(w, "Permission Denied")
 		},
-	});
-	
+	})
+
 	//Handle updates of the default group
-	adminrouter.HandleFunc("/system/register/setDefaultGroup", register_handleSetDefaultGroup);
+	adminrouter.HandleFunc("/system/register/setDefaultGroup", register_handleSetDefaultGroup)
 
 	//Handle if the current handler allow registry
-	adminrouter.HandleFunc("/system/register/getAllowRegistry",register_handleGetAllowRegistry)
-	
+	adminrouter.HandleFunc("/system/register/getAllowRegistry", register_handleGetAllowRegistry)
+
 	//Handle toggle
-	adminrouter.HandleFunc("/system/register/setAllowRegistry",register_handleToggleRegistry);
-	
+	adminrouter.HandleFunc("/system/register/setAllowRegistry", register_handleToggleRegistry)
+
 	//Get a list of email registered in the system
-	adminrouter.HandleFunc("/system/register/listUserEmails",register_handleEmailListing);
+	adminrouter.HandleFunc("/system/register/listUserEmails", register_handleEmailListing)
 
 	//Clear User record that has no longer use this service
-	adminrouter.HandleFunc("/system/register/cleanUserRegisterInfo",register_handleRegisterCleaning);
+	adminrouter.HandleFunc("/system/register/cleanUserRegisterInfo", register_handleRegisterCleaning)
 }
 
-func register_handleRegisterCleaning(w http.ResponseWriter, r *http.Request){
+func register_handleRegisterCleaning(w http.ResponseWriter, r *http.Request) {
 	//Get all user emails from the registerHandler
-	registerHandler.CleanRegisters();
-	sendOK(w);
+	registerHandler.CleanRegisters()
+	sendOK(w)
 }
 
-func register_handleEmailListing(w http.ResponseWriter, r *http.Request){
+func register_handleEmailListing(w http.ResponseWriter, r *http.Request) {
 	//Get all user emails from the registerHandler
-	userRegisterInfos := registerHandler.ListAllUserEmails();
+	userRegisterInfos := registerHandler.ListAllUserEmails()
 
 	useCSV, _ := mv(r, "csv", false)
-	if useCSV == "true"{
+	if useCSV == "true" {
 		//Prase as csv
 		csvString := "Username,Email,Still Registered\n"
-		for _, v := range userRegisterInfos{
+		for _, v := range userRegisterInfos {
 			registered := "false"
 			s, _ := v[2].(bool)
-			if s == true{
+			if s == true {
 				registered = "true"
 			}
 			csvString += fmt.Sprintf("%v", v[0]) + "," + fmt.Sprintf("%v", v[1]) + "," + registered + "\n"
@@ -96,45 +107,44 @@ func register_handleEmailListing(w http.ResponseWriter, r *http.Request){
 		w.Header().Set("Content-Disposition", "attachment; filename=registerInfo.csv")
 		w.Header().Set("Content-Type", "text/csv")
 		w.Write([]byte(csvString))
-	}else{
+	} else {
 		//Prase as json
-		jsonString, _ := json.Marshal(userRegisterInfos);
-		sendJSONResponse(w, string(jsonString));
+		jsonString, _ := json.Marshal(userRegisterInfos)
+		sendJSONResponse(w, string(jsonString))
 	}
 
-
 }
 
-func register_handleSetDefaultGroup(w http.ResponseWriter, r *http.Request){
-	getDefaultGroup, _ := mv(r, "get",true)
-		if (getDefaultGroup == "true"){
-			jsonString, _ := json.Marshal(registerHandler.DefaultUserGroup)
-			sendJSONResponse(w,string(jsonString));
-			return
-		}
-		newDefaultGroup, err := mv(r, "defaultGroup",true)
-		if err != nil{
-			sendErrorResponse(w, "defaultGroup not defined")
-			return
-		}
-		err = registerHandler.SetDefaultUserGroup(newDefaultGroup);
-		if err != nil{
-			sendErrorResponse(w, err.Error())
-			return
-		}
-		sendOK(w);
+func register_handleSetDefaultGroup(w http.ResponseWriter, r *http.Request) {
+	getDefaultGroup, _ := mv(r, "get", true)
+	if getDefaultGroup == "true" {
+		jsonString, _ := json.Marshal(registerHandler.DefaultUserGroup)
+		sendJSONResponse(w, string(jsonString))
+		return
+	}
+	newDefaultGroup, err := mv(r, "defaultGroup", true)
+	if err != nil {
+		sendErrorResponse(w, "defaultGroup not defined")
+		return
+	}
+	err = registerHandler.SetDefaultUserGroup(newDefaultGroup)
+	if err != nil {
+		sendErrorResponse(w, err.Error())
+		return
+	}
+	sendOK(w)
 }
 
-func register_handleGetAllowRegistry(w http.ResponseWriter, r *http.Request){
+func register_handleGetAllowRegistry(w http.ResponseWriter, r *http.Request) {
 	jsonString, _ := json.Marshal(registerHandler.AllowRegistry)
 	sendJSONResponse(w, string(jsonString))
 }
 
-func register_handleToggleRegistry(w http.ResponseWriter, r *http.Request){
-	allowReg, err := mv(r, "allow",true)
-	if err != nil{
+func register_handleToggleRegistry(w http.ResponseWriter, r *http.Request) {
+	allowReg, err := mv(r, "allow", true)
+	if err != nil {
 		allowReg = "false"
 	}
-	registerHandler.SetAllowRegistry(allowReg == "true");
-	sendOK(w);
+	registerHandler.SetAllowRegistry(allowReg == "true")
+	sendOK(w)
 }

+ 49 - 5
web/SystemAO/users/account.html

@@ -27,7 +27,8 @@
                         <div class="content">
                             <a id="username" class="header"></a>
                             <div class="meta">
-                            <span id="usergroup" class="date"></span>
+                                <p><i class="ui envelope icon"></i><span id="email" class="date"></span><br>
+                                <i class="ui user circle icon"></i><span id="usergroup" class="date"></span></p>
                             </div>
                         </div>
                     </div>
@@ -36,7 +37,19 @@
                     <h4 class="ui header">
                         Change Profile Picture
                     </h4>
-                    <button class="ui button" onclick="handleProfilePic();">Upload</button>
+                    <button class="ui blue button" onclick="handleProfilePic();">Upload</button>
+                    <div class="ui divider"></div>
+                    <h4 class="ui header">
+                        Change Contact Email
+                    </h4>
+                    <form class="ui form" onsubmit="handleEmailChange(event);">
+                        <div class="field">
+                            <label>New Email</label>
+                            <input id="newemail" type="text"  placeholder="New Email">
+                        </div>
+                        <button class="ui blue button" type="submit">Update</button>
+                    </form>
+
                     <div class="ui divider"></div>
                     <h4 class="ui header">
                         Change Password
@@ -54,9 +67,9 @@
                             <label>Confirm New Password</label>
                             <input id="cpw" type="password" placeholder="Confirm New Password">
                         </div>
-                        <button class="ui button" type="submit">Update</button>
+                        <button class="ui blue button" type="submit">Update</button>
                     </form>
-                    <div id="msgbox" class="ui message" style="display:none;">
+                    <div id="msgbox" class="ui green message" style="display:none;">
                         <i class="close icon"></i>
                         <div class="header">
                             Welcome back!
@@ -81,11 +94,24 @@
                     
                     $("#username").text(data.Username);
                     console.log(data.Usergroup);
-                    $("#usergroup").text(data.Usergroup.join("/"));
+                    $("#usergroup").text(data.Usergroup.join(" / "));
                 }
                 
             });
 
+            function initUserEmail(){
+                $.get("../../system/register/email", function(data){
+                    if (data == ""){
+                        //Not set
+                        $("#email").text("( Not Configured )");
+                    }else{
+                        $("#email").text(data);
+                    }
+                });
+            }
+            initUserEmail();
+           
+
             //Handle change password form submit
             function handleSubmit(event){
                 event.preventDefault();
@@ -117,6 +143,24 @@
 
             }
 
+            function handleEmailChange(e){
+                e.preventDefault();
+                var newEmail = $("#newemail").val();
+                $.ajax({
+                    url: "../../system/register/email",
+                    data: {email: newEmail},
+                    success: function(data){
+                        if (data.error !== undefined){
+                            alert(data.error);
+                        }else{
+                            msgbox("Update Succeed", "Your email has been updated.");
+                            initUserEmail();
+                        }
+                       
+                    }
+                });
+            }
+
             function handleProfilePic(){
                 ao_module_selectFiles(function(files){
                     if (FileReader && files && files.length) {