Add_Directory_and_ProfilePicture #9

Merged
lx merged 13 commits from Add_Directory into main 2021-08-16 14:44:53 +00:00
3 changed files with 53 additions and 21 deletions
Showing only changes of commit cf4918e901 - Show all commits

View file

@ -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) {
erwan marked this conversation as resolved Outdated
Outdated
Review
  1. Ce n'est pas toujours cn l'attribut qui contient l'identifiant de la personne, c'est le paramètre config.UserNameAttr qui te donne le bon attribut à checker

  2. On aimerait aussi chercher dans le displayname, et peut-être aussi le mail

1. Ce n'est pas toujours `cn` l'attribut qui contient l'identifiant de la personne, c'est le paramètre `config.UserNameAttr` qui te donne le bon attribut à checker 2. On aimerait aussi chercher dans le displayname, et peut-être aussi le mail
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"),
erwan marked this conversation as resolved Outdated
Outdated
Review

Idem, c'est pas cn chez tout le monde

Idem, c'est pas `cn` chez tout le monde
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)
Outdated
Review
  1. Pourquoi un résultat vide?

  2. Si tu veux créer un résultat vide en Go, pas la peine de mettre tous les champs à "", si tu écris juste SearchResult{} ça crée une structure avec des chaines vides dans tous les champs

1. Pourquoi un résultat vide? 2. Si tu veux créer un résultat vide en Go, pas la peine de mettre tous les champs à `""`, si tu écris juste `SearchResult{}` ça crée une structure avec des chaines vides dans tous les champs
Outdated
Review

Un résultat vide permet d'avoir un readyStateChange dans le JS ce qui permet d'initialiser le tableau à vide quand il n'y a plus de match.

Pour le go fmt, j'utilise VsCode et à chaque sauvegarde il fait le go fmt et aussi de tous les warnings.

Un résultat vide permet d'avoir un readyStateChange dans le JS ce qui permet d'initialiser le tableau à vide quand il n'y a plus de match. Pour le `go fmt`, j'utilise VsCode et à chaque sauvegarde il fait le `go fmt` et aussi de tous les warnings.
Outdated
Review

Mais si tu met pas le SearchResult vide, tu as quand même le readyStateChange non ? Et tu as un tableau JSON vide, c'est tout, mais ta partie JS est sensé gérer ça

Mais si tu met pas le `SearchResult` vide, tu as quand même le readyStateChange non ? Et tu as un tableau JSON vide, c'est tout, mais ta partie JS est sensé gérer ça
Outdated
Review

Justement au début j'avais fait ça. Ce qui me donnait une valeur null. Mais la fonction JS suivante ne répondez pas, elle ignorait juste la réponse. (même en enlevant le if)

 xhttp.onreadystatechange = function() {
        if (this.readyState == 4 && this.status == 201) {

Elle n'était tout bonnement pas appelée.

Justement au début j'avais fait ça. Ce qui me donnait une valeur `null`. Mais la fonction JS suivante ne répondez pas, elle ignorait juste la réponse. (même en enlevant le if) ```js xhttp.onreadystatechange = function() { if (this.readyState == 4 && this.status == 201) { ``` Elle n'était tout bonnement pas appelée.
return
}
}
}
//Send JSON through xhttp
w.Header().Set("Content-Type", "application/json; charset=UTF-8")
w.WriteHeader(http.StatusCreated)

View file

@ -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)

View file

@ -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");