Add_Directory_and_ProfilePicture #9

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

View file

@ -34,6 +34,10 @@ type Results struct {
MessageID uint32 `json:"id"`
}
type UniqueID struct {
Id int `json:"id"`
}
func handleSearch(w http.ResponseWriter, r *http.Request) {
//Get input value by user
input := mux.Vars(r)["input"]
@ -43,10 +47,10 @@ func handleSearch(w http.ResponseWriter, r *http.Request) {
return
}
session, err := store.Get(r, SESSION_NAME)
/**session, err := store.Get(r, SESSION_NAME)
if err != nil {
return
}
}**/
//Search values with ldap and filter
searchRequest := ldap.NewSearchRequest(
@ -79,21 +83,27 @@ func handleSearch(w http.ResponseWriter, r *http.Request) {
}
}
//Convert interface to uint32 with Type Assertions and not a simple convert for messageID
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
}
if result.Search == nil {
result = Results{
Search: append(result.Search, SearchResult{
Identifiant: "",
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.
Name: "",
Email: "",
Description: "",
DN: "",
}),
}
}
var id UniqueID
//Decode JSON body
err = json.NewDecoder(r.Body).Decode(&id)
if err != nil {
http.Error(w, err.Error(), http.StatusInternalServerError)
return
}
result.MessageID = uint32(id.Id)
//Send JSON through xhttp
w.Header().Set("Content-Type", "application/json; charset=UTF-8")
w.WriteHeader(http.StatusCreated)

View file

@ -1,4 +1,5 @@
var perso_id = 0;
var last_id = 0;
function searchDirectory() {
var input = document.getElementById("search").value;
@ -10,8 +11,8 @@ function searchDirectory() {
//Response from Request Ajax
var jsonResponse = JSON.parse(xhttp.responseText);
if (perso_id < jsonResponse.id) {
perso_id = jsonResponse.id
if (last_id < jsonResponse.id) {
last_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");
@ -29,19 +30,16 @@ function searchDirectory() {
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
description.innerHTML = `${jsonResponse.search[i].description}`
description.innerHTML = jsonResponse.search[i].description
}
old_table.parentNode.replaceChild(table, old_table)
}
}
};
Outdated
Review

faudrait utiliser innerText plutôt que innerHTML, sinon on peut trivialement faire une injection de script

faudrait utiliser innerText plutôt que innerHTML, sinon on peut trivialement faire une injection de script
Outdated
Review

?? une injection de script dans un JS ? je ne comprends pas bien. J'ai quand-même appliqué tes modifications. Mais je ne serais pas contre plus de détails.

?? une injection de script dans un JS ? je ne comprends pas bien. J'ai quand-même appliqué tes modifications. Mais je ne serais pas contre plus de détails.
Outdated
Review

Imagine dans ma description je met <script>alert('coucou')</script>.

Avec innerText, ça apparait tel quel.

Avec innerHTML, quand quelqu'un affiche mon profil, ça lui fait une popup qui affiche coucou.

Imagine dans ma description je met `<script>alert('coucou')</script>`. Avec `innerText`, ça apparait tel quel. Avec `innerHTML`, quand quelqu'un affiche mon profil, ça lui fait une popup qui affiche coucou.
Outdated
Review

Donc si je comprends bien, si un utilisateur crée un compte qui se nomme <script>alert('coucou')</script> alors à chaque fois qu'on le cherchera sur l'annuaire ça produira cette pop-up ?

Donc si je comprends bien, si un utilisateur crée un compte qui se nomme `<script>alert('coucou')</script>` alors à chaque fois qu'on le cherchera sur l'annuaire ça produira cette pop-up ?
perso_id += 1
xhttp.overrideMimeType("application/json");
xhttp.open("GET", "/search/".concat(input), true);
xhttp.send();
xhttp.open("POST", "/search/".concat(input), true);
xhttp.send(JSON.stringify({"id": perso_id}));
}
}