From cf4918e901da8f2c388eebd33a500bf737943685 Mon Sep 17 00:00:00 2001 From: MrArmonius Date: Mon, 26 Jul 2021 16:54:51 +0200 Subject: [PATCH] Add MessageID for asynchronous request ID is stored in the session with the type `uint32` Correction javascript For the `for loop`, we need don't forget than know we have in format `JSON` the response: `search:{..}, id:0` For the id, don't forget to change the global value of `JS`. --- directory.go | 38 ++++++++++++++++++++++++++++++------- main.go | 3 +++ static/javascript/search.js | 33 ++++++++++++++++++-------------- 3 files changed, 53 insertions(+), 21 deletions(-) diff --git a/directory.go b/directory.go index 2be0a8b..6a7ade2 100644 --- a/directory.go +++ b/directory.go @@ -28,7 +28,10 @@ type SearchResult struct { DN string `json:"dn"` } -type Results []SearchResult +type Results struct { + Search []SearchResult `json:"search"` + MessageID uint32 `json:"id"` +} func handleSearch(w http.ResponseWriter, r *http.Request) { //Get input value by user @@ -39,6 +42,11 @@ func handleSearch(w http.ResponseWriter, r *http.Request) { return } + session, err := store.Get(r, SESSION_NAME) + if err != nil { + return + } + //Search value with ldap and filter searchRequest := ldap.NewSearchRequest( config.UserBaseDN, @@ -58,16 +66,32 @@ func handleSearch(w http.ResponseWriter, r *http.Request) { for _, values := range sr.Entries { if strings.Contains(values.GetAttributeValue("cn"), input) { - result = append(result, SearchResult{ - Identifiant: values.GetAttributeValue("cn"), - Name: values.GetAttributeValue("displayname"), - Email: values.GetAttributeValue("email"), - DN: values.DN, - }) + result = Results{ + Search: append(result.Search, SearchResult{ + Identifiant: values.GetAttributeValue("cn"), + Name: values.GetAttributeValue("displayname"), + Email: values.GetAttributeValue("email"), + DN: values.DN, + }), + } } } + //Convert interface to uint32 with Type Assertions and not a simple convert + if val_Raw, ok_raw := session.Values["MessageID"]; ok_raw { + if val, ok := val_Raw.(uint32); ok { + val += 1 + session.Values["MessageID"] = val + result.MessageID = val + err = session.Save(r, w) + if err != nil { + http.Error(w, err.Error(), http.StatusInternalServerError) + return + } + } + } + //Send JSON through xhttp w.Header().Set("Content-Type", "application/json; charset=UTF-8") w.WriteHeader(http.StatusCreated) diff --git a/main.go b/main.go index 6059d04..da75ce0 100644 --- a/main.go +++ b/main.go @@ -392,6 +392,9 @@ func handleLogin(w http.ResponseWriter, r *http.Request) *LoginInfo { session.Values["login_password"] = password session.Values["login_dn"] = user_dn + //Add Value MessageID + session.Values["MessageID"] = uint32(0) + err = session.Save(r, w) if err != nil { http.Error(w, err.Error(), http.StatusInternalServerError) diff --git a/static/javascript/search.js b/static/javascript/search.js index b82b232..7675c0e 100644 --- a/static/javascript/search.js +++ b/static/javascript/search.js @@ -1,3 +1,5 @@ +var perso_id = 0; + function searchDirectory() { var input = document.getElementById("search").value; if(input){ @@ -8,23 +10,26 @@ function searchDirectory() { //Response from Request Ajax var jsonResponse = JSON.parse(xhttp.responseText); - //We get the old table element, we create an new table element then we increment this new table. - //After the new add, we replace the old table by the new one. - var old_table = document.getElementById("users"); - var table = document.createElement('tbody'); - table.setAttribute("id","users"); + if (perso_id < jsonResponse.id) { + perso_id = jsonResponse.id + //We get the old table element, we create an new table element then we increment this new table. + //After the new add, we replace the old table by the new one. + var old_table = document.getElementById("users"); + var table = document.createElement('tbody'); + table.setAttribute("id","users"); - for (let i =0; i < Object.keys(jsonResponse).length; i++) { - var row = table.insertRow(0); - var identifiant = row.insertCell(0); - var name = row.insertCell(1); - var email = row.insertCell(2); - identifiant.innerHTML = `${jsonResponse[i].identifiant}` - name.innerHTML = jsonResponse[i].name - email.innerHTML = jsonResponse[i].email + for (let i =0; i < Object.keys(jsonResponse.search).length; i++) { + var row = table.insertRow(0); + var identifiant = row.insertCell(0); + var name = row.insertCell(1); + var email = row.insertCell(2); + identifiant.innerHTML = `${jsonResponse.search[i].identifiant}` + name.innerHTML = jsonResponse.search[i].name + email.innerHTML = jsonResponse.search[i].email + } + old_table.parentNode.replaceChild(table, old_table) } - old_table.parentNode.replaceChild(table, old_table) } }; xhttp.overrideMimeType("application/json");