aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMrArmonius <mrarmonius@gmail.com>2021-07-26 16:54:51 +0200
committerAlex Auvolat <alex@adnab.me>2021-08-16 12:54:08 +0200
commitcf4918e901da8f2c388eebd33a500bf737943685 (patch)
tree63492edb25cc0a5a01a317744efce85a6015a4a2
parent819d7bf02f1c7b119468c1353b78a3d3bb7015fe (diff)
downloadguichet-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.go38
-rw-r--r--main.go3
-rw-r--r--static/javascript/search.js33
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 = `<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");