diff options
author | MrArmonius <mrarmonius@gmail.com> | 2021-07-26 16:54:51 +0200 |
---|---|---|
committer | Alex Auvolat <alex@adnab.me> | 2021-08-16 12:54:08 +0200 |
commit | cf4918e901da8f2c388eebd33a500bf737943685 (patch) | |
tree | 63492edb25cc0a5a01a317744efce85a6015a4a2 | |
parent | 819d7bf02f1c7b119468c1353b78a3d3bb7015fe (diff) | |
download | guichet-cf4918e901da8f2c388eebd33a500bf737943685.tar.gz guichet-cf4918e901da8f2c388eebd33a500bf737943685.zip |
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`.
-rw-r--r-- | directory.go | 38 | ||||
-rw-r--r-- | main.go | 3 | ||||
-rw-r--r-- | 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) @@ -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 = `<a href="/admin/ldap/${jsonResponse[i].dn}">${jsonResponse[i].identifiant}</a>` - 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 = `<a href="/admin/ldap/${jsonResponse.search[i].dn}">${jsonResponse.search[i].identifiant}</a>` + 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"); |