Browse Source

auto update script executed

Toby Chui 1 year ago
parent
commit
6ea5bc7622
5 changed files with 102 additions and 3 deletions
  1. 1 0
      api.go
  2. 10 0
      mod/ganserv/ganserv.go
  3. 35 0
      mod/ganserv/handlers.go
  4. BIN
      tmp/GeoLite2-Country.mmdb
  5. 56 3
      web/components/gandetails.html

+ 1 - 0
api.go

@@ -87,6 +87,7 @@ func initAPIs() {
 	authRouter.HandleFunc("/api/gan/network/setRange", ganManager.HandleSetRanges)
 	authRouter.HandleFunc("/api/gan/members/list", ganManager.HandleMemberList)
 	authRouter.HandleFunc("/api/gan/members/ip", ganManager.HandleMemberIP)
+	authRouter.HandleFunc("/api/gan/members/name", ganManager.HandleMemberNaming)
 	authRouter.HandleFunc("/api/gan/members/authorize", ganManager.HandleMemberAuthorization)
 	authRouter.HandleFunc("/api/gan/members/delete", ganManager.HandleMemberDelete)
 

+ 10 - 0
mod/ganserv/ganserv.go

@@ -110,3 +110,13 @@ func (m *NetworkManager) WriteNetworkMetaData(netid string, meta *NetworkMetaDat
 	m.networksMetadata[netid] = *meta
 	m.option.Database.Write("ganserv", "networkmeta", m.networksMetadata)
 }
+
+func (m *NetworkManager) GetMemberMetaData(netid string, memid string) *MemberMetaData {
+	thisMemberData := MemberMetaData{}
+	m.option.Database.Read("ganserv", "memberdata_"+netid+"_"+memid, &thisMemberData)
+	return &thisMemberData
+}
+
+func (m *NetworkManager) WriteMemeberMetaData(netid string, memid string, meta *MemberMetaData) {
+	m.option.Database.Write("ganserv", "memberdata_"+netid+"_"+memid, meta)
+}

+ 35 - 0
mod/ganserv/handlers.go

@@ -339,6 +339,41 @@ func (m *NetworkManager) HandleMemberIP(w http.ResponseWriter, r *http.Request)
 	}
 }
 
+//Handle naming for members
+func (m *NetworkManager) HandleMemberNaming(w http.ResponseWriter, r *http.Request) {
+	netid, err := utils.PostPara(r, "netid")
+	if err != nil {
+		utils.SendErrorResponse(w, "net id not set")
+		return
+	}
+
+	memberid, err := utils.PostPara(r, "memid")
+	if err != nil {
+		utils.SendErrorResponse(w, "memid not set")
+		return
+	}
+
+	if !m.memberExistsInNetwork(netid, memberid) {
+		utils.SendErrorResponse(w, "target member not exists in given network")
+		return
+	}
+
+	//Read memeber data
+	targetMemberData := m.GetMemberMetaData(netid, memberid)
+
+	newname, err := utils.PostPara(r, "name")
+	if err != nil {
+		//Send over the member data
+		js, _ := json.Marshal(targetMemberData)
+		utils.SendJSONResponse(w, string(js))
+	} else {
+		//Write member data
+		targetMemberData.Name = newname
+		m.WriteMemeberMetaData(netid, memberid, targetMemberData)
+		utils.SendOK(w)
+	}
+}
+
 //Handle delete of a given memver
 func (m *NetworkManager) HandleMemberDelete(w http.ResponseWriter, r *http.Request) {
 	netid, err := utils.PostPara(r, "netid")

BIN
tmp/GeoLite2-Country.mmdb


+ 56 - 3
web/components/gandetails.html

@@ -400,14 +400,14 @@
                     }else{
                         assignedIp = `<div class="ui list">`
                         member.ipAssignments.forEach(function(thisIp){
-                            assignedIp += `<div class="item" style="width: 100%;">${thisIp} <a style="cursor:pointer; float: right;" onclick="deleteIpFromMemeber('${member.address}','${thisIp}');"><i class="red remove icon"></i></a></div>`;
+                            assignedIp += `<div class="item" style="width: 100%;">${thisIp} <a style="cursor:pointer; float: right;" title="Remove IP" onclick="deleteIpFromMemeber('${member.address}','${thisIp}');"><i class="red remove icon"></i></a></div>`;
                         })
                         assignedIp += `</div>`
                     }
                     const row = $(`<tr class="GANetMemberEntity ${rowClass}" style="${unauthorizedStyle}">`);
                     row.append($(`<td class="GANetMember ${rowClass}" style="text-align: center;">`).html(authorizedCheckbox));
                     row.append($('<td>').text(member.address));
-                    row.append($('<td>').text(""));
+                    row.append($('<td>').html(`<span class="memberName" addr="${member.address}"></span> <a style="cursor:pointer; float: right;" title="Edit Memeber Name" onclick="renameMember('${member.address}');"><i class="grey edit icon"></i></a>`));
                     row.append($('<td>').html(`${assignedIp}
                         <div class="ui action mini fluid input" style="min-width: 200px;">
                             <input type="text" placeholder="IPv4" onchange="$(this).val($(this).val().trim());">
@@ -417,10 +417,12 @@
                         </div>`));
                     row.append($('<td>').text(lastAuthTime));
                     row.append($('<td>').text(version));
-                    row.append($(`<td style="text-align: center;" onclick="handleMemberDelete('${member.address}');">`).html(`<button class="ui basic mini icon button"><i class="red remove icon"></i></button>`));
+                    row.append($(`<td title="Deauthorize & Delete Memeber" style="text-align: center;" onclick="handleMemberDelete('${member.address}');">`).html(`<button class="ui basic mini icon button"><i class="red remove icon"></i></button>`));
 
                     tableBody.append(row);
                 });
+
+                initNameForMembers();
             },
             error: function(xhr, status, error) {
                 console.log('Error:', error);
@@ -428,6 +430,57 @@
         });
     }
 
+    function initNameForMembers(){
+        $(".memberName").each(function(){
+            let addr = $(this).attr("addr");
+            let targetDOM = $(this);
+            $.ajax({
+                url: "/api/gan/members/name",
+                method: "POST",
+                data: {
+                    netid: currentGANetID,
+                    memid: addr,
+                },
+                success: function(data){
+                    if (data.error != undefined){
+                        $(targetDOM).text("N/A");
+                    }else{
+                        $(targetDOM).text(data.Name);
+                    }
+                }
+            });
+        })
+    }
+
+    function renameMember(targetMemberAddr){
+        if (targetMemberAddr == ""){
+            msgbox("Member address cannot be empty", false, 5000)
+            return
+        }
+
+        let newname = prompt("Enter a easy manageable name for " + targetMemberAddr, "");
+        if (newname != null && newname.trim() != "") {
+          $.ajax({
+            url: "/api/gan/members/name",
+            method: "POST",
+            data: {
+                netid: currentGANetID,
+                memid: targetMemberAddr,
+                name: newname
+            },
+            success: function(data){
+                if (data.error != undefined){
+                    msgbox(data.error, false, 6000);
+                }else{
+                    msgbox("Member Name Updated"); 
+                }
+                renderMemeberTable(true);
+            }
+          })
+        }
+    }
+
+    //Helper function to check if two objects are equal recursively
     function objectEqual(obj1, obj2) {
         // compare types
         if (typeof obj1 !== typeof obj2) {