From e55c3c93eda4aff6efab74549feb9b7262b6c8e7 Mon Sep 17 00:00:00 2001
From: hawkspar <quentin.chevalier@polytechnique.edu>
Date: Sat, 13 Oct 2018 10:56:28 +0200
Subject: [PATCH] redo

---
 sigma-back-dev.service                     |  13 +
 src/graphql/typeDefs/actions_wish_list.gql | 301 +++++++++++----------
 src/graphql/typeDefs/objects.graphql       |   2 +
 src/ldap/users.ts                          |   3 +-
 4 files changed, 175 insertions(+), 144 deletions(-)
 create mode 100644 sigma-back-dev.service

diff --git a/sigma-back-dev.service b/sigma-back-dev.service
new file mode 100644
index 0000000..367b9e9
--- /dev/null
+++ b/sigma-back-dev.service
@@ -0,0 +1,13 @@
+[Unit]
+Description=Sigma-back-dev
+Wants=network-online.target
+After=network-online.target
+
+[Service]
+Environment=NODE_ENV=development
+WorkingDirectory=/opt/sigma-back-dev
+ExecStart=/usr/bin/node build/bundle.js
+Restart=always
+
+[Install]
+WantedBy=multi-user.target
\ No newline at end of file
diff --git a/src/graphql/typeDefs/actions_wish_list.gql b/src/graphql/typeDefs/actions_wish_list.gql
index 952a373..30e560e 100644
--- a/src/graphql/typeDefs/actions_wish_list.gql
+++ b/src/graphql/typeDefs/actions_wish_list.gql
@@ -1,144 +1,159 @@
+// ce fichier en .gql sert juste a forcer VSCode a colorier correctement le langage graphQL.
+// son contenu sera copie dans actions.js tout simplement
+
+/** 
+ * @file définit les types query et mutation, points d'entree du schéma graphQL. ce fichier est la wish list de kadabra (qui veut avoir un schema clair pour travailler sereinement sur le front)
+ * @author akka vodol, kadabra
+*/
+
+// hawkspar->akka ; pas clair
+
+const RootQuery = `
+    # Requêtes
+
+    type Query {
+        # User queries de base
+        user(uid:ID!): User
 
-# Query root type.
-type Query {
-    # User queries de base
-    user(uid:ID!): User
-
-    # Group queries de base
-    group(uid:ID!): Group
-    simpleGroup(uid:ID!): SimpleGroup
-    metaGroup(uid:ID!): MetaGroup
-
-    # Message queries de base
-    message(id:ID!): Message
-    announcement(id:ID!): Announcement
-    event(id:ID!): Event
-    privatePost(id:ID!): PrivatePost
-    question(id:ID!): Question
-    answer(id:ID!): Answer
-
-    # Request queries de base
-    request(id:ID!): Request
-    userJoinGroupRequest(id:ID!): UserJoinGroup
-    groupCoauthorEventRequest(id:ID!): GroupCoauthorEvent
-
-
-
-    # Messages créés par un AuthorUnion=Group|[Group]|User
-    messagesFromGroup(uid:ID!): [Message]
-    announcementsFromGroup(uid:ID!): [Announcement]
-    eventsFromGroup(uid:ID!): [Event]
-    privatepostsFromUser(uid:ID!): [Post]
-    questionsFromUser(uid:ID!): [Question]
-    answersFromGroup(uid:ID!): [Answer]
-
-    # Messages adressés à un Group
-    messagesToGroup(uid:ID!): [Message]
-    announcementsToGroup(uid:ID!): [Announcement]
-    eventsToGroup(uid:ID!): [Event]
-    privatepostsToGroup(uid:ID!): [Post]
-    questionsToGroup(uid:ID!): [Question]
-    answersToGroup(uid:ID!): [Answer]
-
-
-
-    # Toutes les Requests auxquelles un groupe doit répondre
-    requestsToGroup(uid:ID!): [Request]
-    userJoinGroupRequestsToGroup(id:ID!): UserJoinGroup
-    groupCoauthorEventRequestsToGroup(id:ID!): GroupCoauthorEvent
-
-
-
-    # Tous les xxx visibles par un utilisateur
-    allGroups(uid:ID!): [Group]
-    allSimpleGroups(uid:ID!): [SimpleGroup]
-    allMetaGroups(uid:ID!): [MetaGroup]
-    
-    allMessages(uid:ID!): [Message]
-    allAnnouncements(uid:ID!): [Announcement]
-    allEvents(uid:ID!): [Event]
-    
-
-
-    # TOL
-    searchTOL(
-        givenName: String,
-        lastName: String,
-        nickname: String,
-        nationality: String,
-        school: String,
-        promotion: String,
-        groups: String,
-        studies: String,
-        sport: String,
-        phone: String,
-        mail: String,
-        address: String,
-        ip: String
-    ): [User!]
-
-}
-
-# Mutations
-type Mutation {
-    # Par rapport à un groupe donné, un user peut avoir différents niveaux de droits :
-    # none : aucun droit (typiquement, une connection ou l'utilisateur ne s'est pas authentifie)
-    # viewer : le user sait que le groupe existe et a accès aux infos de base, mais rien de plus
-    # member : le user est membre du groupe et a acces aux Message dont le groupe est auteur ou destinataire
-    # speaker : le user peut parler au nom du groupe. Il a le droit de publier des annonces et d'organiser des évènements
-    # admin : le user a tous les droits sur le groupe
-
-    # Viewer mutations
-    requestJoin(userid: ID!, groupuid: ID!): Boolean
-
-
-    # Member mutations
-    leave(userid: ID!, groupuid: ID!): Boolean
-    postInGroup(userid: ID!, groupuid: ID!, postContent: String)
-
-
-
-    # Speaker mutations
-
-    writeAnnouncement(
-        from: uid!,
-        to: [uid!],
-        title: String,
-        date: String,
-        content: String
-    )
-    writeEvent(
-        from: ID!,
-        to: [uid!],
-        title: String,
-        date: String,
-        content:String
-    )
-
-
-
-    # Admin mutations
-
-    createSubgroup(
-        from: ID!,
-        newUid: ID,
-        name: String!,
-        website: String,
-        description: String,
-        school: String
-    ): Group
-
-    addUser(userid: ID!, groupuid: ID!): User
-    removeUser(userid: String!, groupuid: ID!): User
-    addAdmin(userid: String!, groupuid: ID!): User
-    removeAdmin(userid: String!, groupuid: ID!): User
-
-    editGroup(
-        from: String!,
-        name: String,
-        website: String,
-        description: String,
-        school: String
-    ): Group
-
-}
+        # Group queries de base
+        group(uid:ID!): Group
+        simpleGroup(uid:ID!): SimpleGroup
+        metaGroup(uid:ID!): MetaGroup
+
+        # Message queries de base
+        message(id:ID!): Message
+        announcement(id:ID!): Announcement
+        event(id:ID!): Event
+        privatePost(id:ID!): PrivatePost
+        question(id:ID!): Question
+        answer(id:ID!): Answer
+
+        # Request queries de base
+        request(id:ID!): Request
+        userJoinGroupRequest(id:ID!): UserJoinGroup
+        groupCoauthorEventRequest(id:ID!): GroupCoauthorEvent
+
+
+
+        # Messages créés par un AuthorUnion=Group|[Group]|User
+        messagesFromGroup(uid:ID!): [Message]
+        announcementsFromGroup(uid:ID!): [Announcement]
+        eventsFromGroup(uid:ID!): [Event]
+        privatepostsFromUser(uid:ID!): [Post]
+        questionsFromUser(uid:ID!): [Question]
+        answersFromGroup(uid:ID!): [Answer]
+
+        # Messages adressés à un Group
+        messagesToGroup(uid:ID!): [Message]
+        announcementsToGroup(uid:ID!): [Announcement]
+        eventsToGroup(uid:ID!): [Event]
+        privatepostsToGroup(uid:ID!): [Post]
+        questionsToGroup(uid:ID!): [Question]
+        answersToGroup(uid:ID!): [Answer]
+
+
+
+        # Toutes les Requests auxquelles un groupe doit répondre
+        requestsToGroup(uid:ID!): [Request]
+        userJoinGroupRequestsToGroup(id:ID!): UserJoinGroup
+        groupCoauthorEventRequestsToGroup(id:ID!): GroupCoauthorEvent
+
+
+
+        # Tous les xxx visibles par un utilisateur
+        allGroups(uid:ID!): [Group]
+        allSimpleGroups(uid:ID!): [SimpleGroup]
+        allMetaGroups(uid:ID!): [MetaGroup]
+        
+        allMessages(uid:ID!): [Message]
+        allAnnouncements(uid:ID!): [Announcement]
+        allEvents(uid:ID!): [Event]
+        
+
+
+        # TOL
+        searchTOL(
+            givenName: String,
+            lastName: String,
+            nickname: String,
+            nationality: String,
+            school: String,
+            promotion: String,
+            groups: String,
+            studies: String,
+            sport: String,
+            phone: String,
+            mail: String,
+            address: String,
+            ip: String
+        ): [User!]
+
+    }
+`;
+
+const RootMutation = `
+    # Mutations
+
+    type Mutation {
+        # Par rapport à un groupe donné, un user peut avoir différents niveaux de droits :
+        # none : aucun droit (typiquement, une connection ou l'utilisateur ne s'est pas authentifie)
+        # viewer : le user sait que le groupe existe et a accès aux infos de base, mais rien de plus
+        # member : le user est membre du groupe et a acces aux Message dont le groupe est auteur ou destinataire
+        # speaker : le user peut parler au nom du groupe. Il a le droit de publier des annonces et d'organiser des évènements
+        # admin : le user a tous les droits sur le groupe
+
+        # Viewer mutations
+        requestJoin(userid: ID!, groupuid: ID!): Boolean
+
+
+        # Member mutations
+        leave(userid: ID!, groupuid: ID!): Boolean
+        postInGroup(userid: ID!, groupuid: ID!, postContent: String)
+
+
+
+        # Speaker mutations
+
+        writeAnnouncement(
+            from: uid!,
+            to: [uid!],
+            title: String,
+            date: String,
+            content: String
+        )
+        writeEvent(
+            from: ID!,
+            to: [uid!],
+            title: String,
+            date: String,
+            content:String
+        )
+
+
+
+        # Admin mutations
+
+        createSubgroup(
+            from: ID!,
+            newUid: ID,
+            name: String!,
+            website: String,
+            description: String,
+            school: String
+        ): Group
+
+        addUser(userid: ID!, groupuid: ID!): User
+        removeUser(userid: String!, groupuid: ID!): User
+        addAdmin(userid: String!, groupuid: ID!): User
+        removeAdmin(userid: String!, groupuid: ID!): User
+
+        editGroup(
+            from: String!,
+            name: String,
+            website: String,
+            description: String,
+            school: String
+        ): Group
+
+    }
+`;
\ No newline at end of file
diff --git a/src/graphql/typeDefs/objects.graphql b/src/graphql/typeDefs/objects.graphql
index abe7ba8..8064102 100644
--- a/src/graphql/typeDefs/objects.graphql
+++ b/src/graphql/typeDefs/objects.graphql
@@ -1,3 +1,5 @@
+// hawkspar->all ; doc ?
+
 # Utilisateurs
 type User {
     # Prénom de l'utilisateur
diff --git a/src/ldap/users.ts b/src/ldap/users.ts
index 779336f..2cc7461 100644
--- a/src/ldap/users.ts
+++ b/src/ldap/users.ts
@@ -386,7 +386,8 @@ export class User extends Open {
             // Surcharge des champs à modifier selon data
             Object.keys(data).forEach(key => {
                 // Some fields the user cannot change (groups and groupsIsAdmin must be changed through addGroupMember and addGroupAdmin in Admin)
-                if (!['readPerm','writePerm','forlifes','ips','groups','groupsIsAdmin'].includes(key)) { profil[key]=data[key]; }
+                var unchangeables = ['readPerm','writePerm','forlifes','ips','groups','groupsIsAdmin'];
+                if (!unchangeables.includes(key)) { profil[key]=data[key]; }
             });
             // !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
             // TBM : rajouter god passwd. Moche mais bonne façon de faire
-- 
GitLab