diff --git a/ldap_config.json b/ldap_config.json index bd3d5b938dd31139b9772e6f102f3a3a3ac794bb..71ded2743af345efc8945445f95db0b1aff4e1fa 100644 --- a/ldap_config.json +++ b/ldap_config.json @@ -1,18 +1,17 @@ { - "comment_1": "Tout ce fichier sert à protéger les vrais champs du LDAP dans les scripts dans src/ldap. Les champs ci-dessous contiennent le nécessaire à une première connexion par exemple.", - "comment_tmp": "Passer en LDAPS ASAP.", - "comment_1bis": "Ce fichier est importé par src/ldap/internal/config.ts ; comme indiqué dans config.ts, la présence d'une variable d'environnement correspondante peut override les paramètres donnés ici.", - "server_prod_old": "ldap://frankiz.eleves.polytechnique.fr:389", - "server_dev_old": "ldap://localhost:389", - "server_prod": "ldap://ldap.eleves.polytechnique.fr:389", - "server_dev": "ldap://ldap.eleves.polytechnique.fr:389", + "comment_1": "Tout ce fichier sert à protéger les vrais champs du LDAP dans les scripts dans src/ldap. Les champs ci-dessous contiennent le nécessaire à une première connexion par exemple.", + "comment_tmp": "Passer en LDAPS ASAP.", + "comment_1bis": "Ce fichier est importé par src/ldap/internal/config.ts ; comme indiqué dans config.ts, la présence d'une variable d'environnement correspondante peut override les paramètres donnés ici.", + "server_prod_old": "ldap://frankiz.eleves.polytechnique.fr:389", + "server_dev_old": "ldap://localhost:389", + "server_prod": "ldap://ldap.eleves.polytechnique.fr:389", + "server_dev": "ldap://ldap.eleves.polytechnique.fr:389", "comment_2": "Noms de domaines dans LDAP ; le niv d'après est en uid=, voir Wikipedia", "dn":{ "group":"ou=groups,dc=frankiz,dc=net", "user": "ou=eleves,dc=frankiz,dc=net" - }, - + }, "comment_3": "Placeholders et indications de contenu de certains champs du LDAP généré par frankiz pour les utilisateurs", "user": { "uid": "uid", @@ -37,7 +36,7 @@ "members": "memberOf", "followers": "followerOf" }, - "comment_4": "Placeholders et indications de contenu de certains champs du LDAP généré par frankiz pour les groupes (childs TBA)", + "comment_4": "Placeholders et indications de contenu de certains champs du LDAP généré par frankiz pour les groupes", "group": { "gid": "cn", "name": "sn", diff --git a/notes/hist_ldap.md b/notes/hist_ldap.md index 6e20bf8e4218d657981b92596778cec0f3e3c8e8..fdac32819cd5718df8de84f1d23464d4dd7c6f33 100644 --- a/notes/hist_ldap.md +++ b/notes/hist_ldap.md @@ -23,9 +23,7 @@ Ainsi, toutes les connexions au LDAP se font via un utilisateur sigma dédié do Le LDAP a été significativement enrichi depuis Frankiz, puisqu'il contient la majeure partie des données utilisateurs et groupes de sigma. Les champs parent et child permettent aux resolvers afférents de faire descendre les admins et remonter les membres, mais n'a pas d'influence à l'intérieur de l'API LDAP.  -  -  #### Configuration diff --git a/package-lock.json b/package-lock.json index 5cfdc640dc136e342bb59414c9bc53dfd4ba8d46..d7ced642eeedb6670a9305b29877fbab913c38e7 100644 --- a/package-lock.json +++ b/package-lock.json @@ -15,7 +15,7 @@ "@apollographql/graphql-playground-html": { "version": "1.6.6", "resolved": "https://registry.npmjs.org/@apollographql/graphql-playground-html/-/graphql-playground-html-1.6.6.tgz", - "integrity": "sha512-lqK94b+caNtmKFs5oUVXlSpN3sm5IXZ+KfhMxOtr0LR2SqErzkoJilitjDvJ1WbjHlxLI7WtCjRmOLdOGJqtMQ==" + "integrity": "sha1-AiIJ4oorVH3N4VshnwxQ9HqlvrM=" }, "@babel/cli": { "version": "7.2.3", @@ -122,7 +122,7 @@ "@babel/helper-annotate-as-pure": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.0.0.tgz", - "integrity": "sha512-3UYcJUj9kvSLbLbUIfQTqzcy5VX7GRZ/CCDrnOaZorFFM01aXp1+GJwuFGV4NDDoAS+mOUyHcO6UD/RfqOks3Q==", + "integrity": "sha1-Mj053QtQ4Qx8Bsp9djjmhk2MXDI=", "dev": true, "requires": { "@babel/types": "^7.0.0" @@ -131,7 +131,7 @@ "@babel/helper-builder-binary-assignment-operator-visitor": { "version": "7.1.0", "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.1.0.tgz", - "integrity": "sha512-qNSR4jrmJ8M1VMM9tibvyRAHXQs2PmaksQF7c1CGJNipfe3D8p+wgNwgso/P2A2r2mdgBWAXljNWR0QRZAMW8w==", + "integrity": "sha1-a2lijf5Ah3mODE7Zjj1Kay+9L18=", "dev": true, "requires": { "@babel/helper-explode-assignable-expression": "^7.1.0", @@ -141,7 +141,7 @@ "@babel/helper-call-delegate": { "version": "7.1.0", "resolved": "https://registry.npmjs.org/@babel/helper-call-delegate/-/helper-call-delegate-7.1.0.tgz", - "integrity": "sha512-YEtYZrw3GUK6emQHKthltKNZwszBcHK58Ygcis+gVUrF4/FmTVr5CCqQNSfmvg2y+YDEANyYoaLz/SHsnusCwQ==", + "integrity": "sha1-apV/EF83dV6GRTQ9MDiiLhRJzEo=", "dev": true, "requires": { "@babel/helper-hoist-variables": "^7.0.0", @@ -166,7 +166,7 @@ "@babel/helper-define-map": { "version": "7.1.0", "resolved": "https://registry.npmjs.org/@babel/helper-define-map/-/helper-define-map-7.1.0.tgz", - "integrity": "sha512-yPPcW8dc3gZLN+U1mhYV91QU3n5uTbx7DUdf8NnPbjS0RMwBuHi9Xt2MUgppmNz7CJxTBWsGczTiEp1CSOTPRg==", + "integrity": "sha1-O3TK7DKbPIDBFikIh8DdmuRowgw=", "dev": true, "requires": { "@babel/helper-function-name": "^7.1.0", @@ -177,7 +177,7 @@ "@babel/helper-explode-assignable-expression": { "version": "7.1.0", "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.1.0.tgz", - "integrity": "sha512-NRQpfHrJ1msCHtKjbzs9YcMmJZOg6mQMmGRB+hbamEdG5PNpaSm95275VD92DvJKuyl0s2sFiDmMZ+EnnvufqA==", + "integrity": "sha1-U3+hP28WdN90WwwA7I/k6ZaByPY=", "dev": true, "requires": { "@babel/traverse": "^7.1.0", @@ -207,7 +207,7 @@ "@babel/helper-hoist-variables": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.0.0.tgz", - "integrity": "sha512-Ggv5sldXUeSKsuzLkddtyhyHe2YantsxWKNi7A+7LeD12ExRDWTRk29JCXpaHPAbMaIPZSil7n+lq78WY2VY7w==", + "integrity": "sha1-Rq3ExedYZFrnpF3rkrqwkYwju4g=", "dev": true, "requires": { "@babel/types": "^7.0.0" @@ -216,7 +216,7 @@ "@babel/helper-member-expression-to-functions": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.0.0.tgz", - "integrity": "sha512-avo+lm/QmZlv27Zsi0xEor2fKcqWG56D5ae9dzklpIaY7cQMK5N8VSpaNVPPagiqmy7LrEjK1IWdGMOqPu5csg==", + "integrity": "sha1-jNFLCg33/wDwCefXpDaUX0fHoW8=", "dev": true, "requires": { "@babel/types": "^7.0.0" @@ -225,7 +225,7 @@ "@babel/helper-module-imports": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.0.0.tgz", - "integrity": "sha512-aP/hlLq01DWNEiDg4Jn23i+CXxW/owM4WpDLFUbpjxe4NS3BhLVZQ5i7E0ZrxuQ/vwekIeciyamgB1UIYxxM6A==", + "integrity": "sha1-lggbcRHkhtpNLNlxrRpP4hbMLj0=", "dev": true, "requires": { "@babel/types": "^7.0.0" @@ -248,7 +248,7 @@ "@babel/helper-optimise-call-expression": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.0.0.tgz", - "integrity": "sha512-u8nd9NQePYNQV8iPWu/pLLYBqZBa4ZaY1YWRFMuxrid94wKI1QNt67NEZ7GAe5Kc/0LLScbim05xZFWkAdrj9g==", + "integrity": "sha1-opIMVwKwc8Fd5REGIAqoytIEl9U=", "dev": true, "requires": { "@babel/types": "^7.0.0" @@ -257,13 +257,13 @@ "@babel/helper-plugin-utils": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.0.0.tgz", - "integrity": "sha512-CYAOUCARwExnEixLdB6sDm2dIJ/YgEAKDM1MOeMeZu9Ld/bDgVo8aiWrXwcY7OBh+1Ea2uUcVRcxKk0GJvW7QA==", + "integrity": "sha1-u7P77phmHFaQNCN8wDlnupm08lA=", "dev": true }, "@babel/helper-regex": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/@babel/helper-regex/-/helper-regex-7.0.0.tgz", - "integrity": "sha512-TR0/N0NDCcUIUEbqV6dCO+LptmmSQFQ7q70lfcEB4URsjD0E1HzicrwUH+ap6BAQ2jhCX9Q4UqZy4wilujWlkg==", + "integrity": "sha1-LBcYkjtX+bvmRwX/5WQKxk2b2yc=", "dev": true, "requires": { "lodash": "^4.17.10" @@ -272,7 +272,7 @@ "@babel/helper-remap-async-to-generator": { "version": "7.1.0", "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.1.0.tgz", - "integrity": "sha512-3fOK0L+Fdlg8S5al8u/hWE6vhufGSn0bN09xm2LXMy//REAF8kDCrYoOBKYmA8m5Nom+sV9LyLCwrFynA8/slg==", + "integrity": "sha1-Nh2AghtvONp1vT8HheziCojF/n8=", "dev": true, "requires": { "@babel/helper-annotate-as-pure": "^7.0.0", @@ -297,7 +297,7 @@ "@babel/helper-simple-access": { "version": "7.1.0", "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.1.0.tgz", - "integrity": "sha512-Vk+78hNjRbsiu49zAPALxTb+JUQCz1aolpd8osOF16BGnLtseD21nbHgLPGUwrXEurZgiCOUmvs3ExTu4F5x6w==", + "integrity": "sha1-Ze65VMjCRb6qToWdphiPOdceWFw=", "dev": true, "requires": { "@babel/template": "^7.1.0", @@ -316,7 +316,7 @@ "@babel/helper-wrap-function": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.2.0.tgz", - "integrity": "sha512-o9fP1BZLLSrYlxYEYyl2aS+Flun5gtjTIG8iln+XuEzQTs0PLagAGSXUcqruJwD5fM48jzIEggCKpIfWTcR7pQ==", + "integrity": "sha1-xOABJEV2nigVtVKW6tQ6lYVJ9vo=", "dev": true, "requires": { "@babel/helper-function-name": "^7.1.0", @@ -356,7 +356,7 @@ "@babel/plugin-proposal-async-generator-functions": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.2.0.tgz", - "integrity": "sha512-+Dfo/SCQqrwx48ptLVGLdE39YtWRuKc/Y9I5Fy0P1DDBB9lsAHpjcEJQt+4IifuSOSTLBKJObJqMvaO1pIE8LQ==", + "integrity": "sha1-somzBmadzkrSCwJSiJoVdoydQX4=", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.0.0", @@ -377,7 +377,7 @@ "@babel/plugin-proposal-json-strings": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.2.0.tgz", - "integrity": "sha512-MAFV1CA/YVmYwZG0fBQyXhmj0BHCB5egZHCKWIFVv/XCxAeVGIHfos3SwDck4LvCllENIAg7xMKOG5kH0dzyUg==", + "integrity": "sha1-Vo7MRGxhSK5rJn8CVREwiR4p8xc=", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.0.0", @@ -397,7 +397,7 @@ "@babel/plugin-proposal-optional-catch-binding": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.2.0.tgz", - "integrity": "sha512-mgYj3jCcxug6KUcX4OBoOJz3CMrwRfQELPQ5560F70YQUBZB7uac9fqaWamKR1iWUzGiK2t0ygzjTScZnVz75g==", + "integrity": "sha1-E12B7baKCB5V5W7EhUHs6AZcOPU=", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.0.0", @@ -407,7 +407,7 @@ "@babel/plugin-proposal-unicode-property-regex": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.2.0.tgz", - "integrity": "sha512-LvRVYb7kikuOtIoUeWTkOxQEV1kYvL5B6U3iWEGCzPNRus1MzJweFqORTj+0jkxozkTSYNJozPOddxmqdqsRpw==", + "integrity": "sha1-q+coH+Rsld3BQ6ZeU1hkd5IDlSA=", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.0.0", @@ -418,7 +418,7 @@ "@babel/plugin-syntax-async-generators": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.2.0.tgz", - "integrity": "sha512-1ZrIRBv2t0GSlcwVoQ6VgSLpLgiN/FVQUzt9znxo7v2Ov4jJrs8RY8tv0wvDmFN3qIdMKWrmMMW6yZ0G19MfGg==", + "integrity": "sha1-aeHw2zTG9aDPfiszI78VmnbIy38=", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.0.0" @@ -427,7 +427,7 @@ "@babel/plugin-syntax-json-strings": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.2.0.tgz", - "integrity": "sha512-5UGYnMSLRE1dqqZwug+1LISpA403HzlSfsg6P9VXU6TBjcSHeNlw4DxDx7LgpF+iKZoOG/+uzqoRHTdcUpiZNg==", + "integrity": "sha1-cr0T9v/h0lk4Ep0qGGsR/WKVFHA=", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.0.0" @@ -436,7 +436,7 @@ "@babel/plugin-syntax-object-rest-spread": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.2.0.tgz", - "integrity": "sha512-t0JKGgqk2We+9may3t0xDdmneaXmyxq0xieYcKHxIsrJO64n1OiMWNUtc5gQK1PA0NpdCRrtZp4z+IUaKugrSA==", + "integrity": "sha1-O3o+czUQxX6CC5FCpleayLDfrS4=", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.0.0" @@ -445,7 +445,7 @@ "@babel/plugin-syntax-optional-catch-binding": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.2.0.tgz", - "integrity": "sha512-bDe4xKNhb0LI7IvZHiA13kff0KEfaGX/Hv4lMA9+7TEc63hMNvfKo6ZFpXhKuEp+II/q35Gc4NoMeDZyaUbj9w==", + "integrity": "sha1-qUAT1u2okI3+akd+f57ahWVuz1w=", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.0.0" @@ -463,7 +463,7 @@ "@babel/plugin-transform-arrow-functions": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.2.0.tgz", - "integrity": "sha512-ER77Cax1+8/8jCB9fo4Ud161OZzWN5qawi4GusDuRLcDbDG+bIGYY20zb2dfAFdTRGzrfq2xZPvF0R64EHnimg==", + "integrity": "sha1-mur75Nb/xlY7+Pg3IJFijwB3lVA=", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.0.0" @@ -483,7 +483,7 @@ "@babel/plugin-transform-block-scoped-functions": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.2.0.tgz", - "integrity": "sha512-ntQPR6q1/NKuphly49+QiQiTN0O63uOwjdD6dhIjSWBI5xlrbUFh720TIpzBhpnrLfv2tNH/BXvLIab1+BAI0w==", + "integrity": "sha1-XTzBHo1d3XUqpkyRSNDbbLef0ZA=", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.0.0" @@ -518,7 +518,7 @@ "@babel/plugin-transform-computed-properties": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.2.0.tgz", - "integrity": "sha512-kP/drqTxY6Xt3NNpKiMomfgkNn4o7+vKxK2DDKcBG9sHj51vHqMBGy8wbDS/J4lMxnqs153/T3+DmCEAkC5cpA==", + "integrity": "sha1-g6ffamWIZbHI9kHVEMbzryICFto=", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.0.0" @@ -536,7 +536,7 @@ "@babel/plugin-transform-dotall-regex": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.2.0.tgz", - "integrity": "sha512-sKxnyHfizweTgKZf7XsXu/CNupKhzijptfTM+bozonIuyVrLWVUvYjE2bhuSBML8VQeMxq4Mm63Q9qvcvUcciQ==", + "integrity": "sha1-8Kq7k9EgqKxh6SXqC6RAgS2+Dkk=", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.0.0", @@ -547,7 +547,7 @@ "@babel/plugin-transform-duplicate-keys": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.2.0.tgz", - "integrity": "sha512-q+yuxW4DsTjNceUiTzK0L+AfQ0zD9rWaTLiUqHA8p0gxx7lu1EylenfzjeIWNkPy6e/0VG/Wjw9uf9LueQwLOw==", + "integrity": "sha1-2VLEkw8xKk2//xjwspFOYMNVMLM=", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.0.0" @@ -556,7 +556,7 @@ "@babel/plugin-transform-exponentiation-operator": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.2.0.tgz", - "integrity": "sha512-umh4hR6N7mu4Elq9GG8TOu9M0bakvlsREEC+ialrQN6ABS4oDQ69qJv1VtR3uxlKMCQMCvzk7vr17RHKcjx68A==", + "integrity": "sha1-pjhoKJ5bQAf3BU1GSRr1FDV2YAg=", "dev": true, "requires": { "@babel/helper-builder-binary-assignment-operator-visitor": "^7.1.0", @@ -566,7 +566,7 @@ "@babel/plugin-transform-for-of": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.2.0.tgz", - "integrity": "sha512-Kz7Mt0SsV2tQk6jG5bBv5phVbkd0gd27SgYD4hH1aLMJRchM0dzHaXvrWhVZ+WxAlDoAKZ7Uy3jVTW2mKXQ1WQ==", + "integrity": "sha1-q3RovvqA92S7A9PLXu+MyZjhytk=", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.0.0" @@ -575,7 +575,7 @@ "@babel/plugin-transform-function-name": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.2.0.tgz", - "integrity": "sha512-kWgksow9lHdvBC2Z4mxTsvc7YdY7w/V6B2vy9cTIPtLEE9NhwoWivaxdNM/S37elu5bqlLP/qOY906LukO9lkQ==", + "integrity": "sha1-95MDYoKf+ZoxdMOfCvzAJO9Zcxo=", "dev": true, "requires": { "@babel/helper-function-name": "^7.1.0", @@ -585,7 +585,7 @@ "@babel/plugin-transform-literals": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.2.0.tgz", - "integrity": "sha512-2ThDhm4lI4oV7fVQ6pNNK+sx+c/GM5/SaML0w/r4ZB7sAneD/piDJtwdKlNckXeyGK7wlwg2E2w33C/Hh+VFCg==", + "integrity": "sha1-aQNT6B+SZ9rU/Yz9d+r6hqulPqE=", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.0.0" @@ -594,7 +594,7 @@ "@babel/plugin-transform-modules-amd": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.2.0.tgz", - "integrity": "sha512-mK2A8ucqz1qhrdqjS9VMIDfIvvT2thrEsIQzbaTdc5QFzhDjQv2CkJJ5f6BXIkgbmaoax3zBr2RyvV/8zeoUZw==", + "integrity": "sha1-gqm85FuVRB9heiQBHcidEtp/TuY=", "dev": true, "requires": { "@babel/helper-module-transforms": "^7.1.0", @@ -604,7 +604,7 @@ "@babel/plugin-transform-modules-commonjs": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.2.0.tgz", - "integrity": "sha512-V6y0uaUQrQPXUrmj+hgnks8va2L0zcZymeU7TtWEgdRLNkceafKXEduv7QzgQAE4lT+suwooG9dC7LFhdRAbVQ==", + "integrity": "sha1-xPGTP1mR1RRenPrR39hI6hcn9AQ=", "dev": true, "requires": { "@babel/helper-module-transforms": "^7.1.0", @@ -625,7 +625,7 @@ "@babel/plugin-transform-modules-umd": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.2.0.tgz", - "integrity": "sha512-BV3bw6MyUH1iIsGhXlOK6sXhmSarZjtJ/vMiD9dNmpY8QXFFQTj+6v92pcfy1iqa8DeAfJFwoxcrS/TUZda6sw==", + "integrity": "sha1-dnjOdRafCHe46yI1U4wHQmjdAa4=", "dev": true, "requires": { "@babel/helper-module-transforms": "^7.1.0", @@ -644,7 +644,7 @@ "@babel/plugin-transform-new-target": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.0.0.tgz", - "integrity": "sha512-yin069FYjah+LbqfGeTfzIBODex/e++Yfa0rH0fpfam9uTbuEeEOx5GLGr210ggOV77mVRNoeqSYqeuaqSzVSw==", + "integrity": "sha1-ro+9iVF/p4ktIOZWTmQeh3DDqko=", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.0.0" @@ -653,7 +653,7 @@ "@babel/plugin-transform-object-super": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.2.0.tgz", - "integrity": "sha512-VMyhPYZISFZAqAPVkiYb7dUe2AsVi2/wCT5+wZdsNO31FojQJa9ns40hzZ6U9f50Jlq4w6qwzdBB2uwqZ00ebg==", + "integrity": "sha1-s11MEPVrq11lAEfa0PHY6IFLZZg=", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.0.0", @@ -683,7 +683,7 @@ "@babel/plugin-transform-shorthand-properties": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.2.0.tgz", - "integrity": "sha512-QP4eUM83ha9zmYtpbnyjTLAGKQritA5XW/iG9cjtuOI8s1RuL/3V6a3DeSHfKutJQ+ayUfeZJPcnCYEQzaPQqg==", + "integrity": "sha1-YzOu4vjW7n4oYVRXKYk0o7RhmPA=", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.0.0" @@ -701,7 +701,7 @@ "@babel/plugin-transform-sticky-regex": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.2.0.tgz", - "integrity": "sha512-KKYCoGaRAf+ckH8gEL3JHUaFVyNHKe3ASNsZ+AlktgHevvxGigoIttrEJb8iKN03Q7Eazlv1s6cx2B2cQ3Jabw==", + "integrity": "sha1-oeRUtZlVYKnB4NU338FQYf0mh+E=", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.0.0", @@ -711,7 +711,7 @@ "@babel/plugin-transform-template-literals": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.2.0.tgz", - "integrity": "sha512-FkPix00J9A/XWXv4VoKJBMeSkyY9x/TqIh76wzcdfl57RJJcf8CehQ08uwfhCDNtRQYtHQKBTwKZDEyjE13Lwg==", + "integrity": "sha1-2H7QG46qx6kkc/YIyXwIneK6Hls=", "dev": true, "requires": { "@babel/helper-annotate-as-pure": "^7.0.0", @@ -721,7 +721,7 @@ "@babel/plugin-transform-typeof-symbol": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.2.0.tgz", - "integrity": "sha512-2LNhETWYxiYysBtrBTqL8+La0jIoQQnIScUJc74OYvUGRmkskNY4EzLCnjHBzdmb38wqtTaixpo1NctEcvMDZw==", + "integrity": "sha1-EX0rzsL79ktLWdH5gZiUaC0p8rI=", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.0.0" @@ -740,7 +740,7 @@ "@babel/plugin-transform-unicode-regex": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.2.0.tgz", - "integrity": "sha512-m48Y0lMhrbXEJnVUaYly29jRXbQ3ksxPrS1Tg8t+MHqzXhtBYAvI51euOBaoAlZLPHsieY9XPVMf80a5x0cPcA==", + "integrity": "sha1-TrjbFvly+Ku1BiwWG4sRVUat4Is=", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.0.0", @@ -1001,12 +1001,12 @@ "@protobufjs/base64": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/@protobufjs/base64/-/base64-1.1.2.tgz", - "integrity": "sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==" + "integrity": "sha1-TIVzDlm5ofHzSQR9vyQpYDS7JzU=" }, "@protobufjs/codegen": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/@protobufjs/codegen/-/codegen-2.0.4.tgz", - "integrity": "sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==" + "integrity": "sha1-fvN/DQEPsCitGtWXIuUG2SYoFcs=" }, "@protobufjs/eventemitter": { "version": "1.1.0", @@ -1050,7 +1050,7 @@ "@types/accepts": { "version": "1.3.5", "resolved": "https://registry.npmjs.org/@types/accepts/-/accepts-1.3.5.tgz", - "integrity": "sha512-jOdnI/3qTpHABjM5cx1Hc0sKsPoYCp+DP/GJRGtDlPd7fiV9oXGGIcjW/ZOxLIvjGz8MA+uMZI9metHlgqbgwQ==", + "integrity": "sha1-w0vsEVz8dG4E/loFnfTOfns5FXU=", "requires": { "@types/node": "*" } @@ -1091,7 +1091,7 @@ "@types/connect": { "version": "3.4.32", "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.32.tgz", - "integrity": "sha512-4r8qa0quOvh7lGD0pre62CAb1oni1OO6ecJLGCezTmhQ8Fz50Arx9RUszryR8KlgK6avuSXvviL6yWyViQABOg==", + "integrity": "sha1-qg6WFrlDXMrQK8UrW0VP/Cxwuig=", "requires": { "@types/node": "*" } @@ -1117,7 +1117,7 @@ "@types/cors": { "version": "2.8.4", "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.4.tgz", - "integrity": "sha512-ipZjBVsm2tF/n8qFGOuGBkUij9X9ZswVi9G3bx/6dz7POpVa6gVHcj1wsX/LVEn9MMF41fxK/PnZPPoTD1UFPw==", + "integrity": "sha1-UJkadZopwLiUknUQCMavenyCZ7A=", "requires": { "@types/express": "*" } @@ -1183,7 +1183,7 @@ "@types/long": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/@types/long/-/long-4.0.0.tgz", - "integrity": "sha512-1w52Nyx4Gq47uuu0EVcsHBxZFJgurQ+rTKS3qMHxR1GY2T8c2AJYd6vZoZ9q1rupaDjU0yT+Jc2XTyXkjeMA+Q==" + "integrity": "sha1-cZVR0jUtMBrIuB23Mqy2vcKNve8=" }, "@types/mime": { "version": "2.0.1", @@ -1248,7 +1248,7 @@ "@types/ws": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/@types/ws/-/ws-6.0.1.tgz", - "integrity": "sha512-EzH8k1gyZ4xih/MaZTXwT2xOkPiIMSrhQ9b8wrlX88L0T02eYsddatQlwVFlEPyEqV0ChpdpNnE51QPH6NVT4Q==", + "integrity": "sha1-yno/N1aqEvYqCmIUXtFMbbJdWig=", "requires": { "@types/events": "*", "@types/node": "*" @@ -1433,7 +1433,7 @@ "@xtuc/ieee754": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", - "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", + "integrity": "sha1-7vAUoxRa5Hehy8AM0eVSM23Ot5A=", "dev": true }, "@xtuc/long": { @@ -1445,7 +1445,7 @@ "abbrev": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", - "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", + "integrity": "sha1-+PLIh60Qv2f2NPAFtph/7TF5qsg=", "dev": true }, "accepts": { @@ -1503,7 +1503,7 @@ "ajv-errors": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/ajv-errors/-/ajv-errors-1.0.1.tgz", - "integrity": "sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ==" + "integrity": "sha1-81mGrOuRr63sQQL72FAUlQzvpk0=" }, "ajv-keywords": { "version": "3.4.0", @@ -1584,7 +1584,7 @@ "anymatch": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", - "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", + "integrity": "sha1-vLJLTzeTTZqnrBe0ra+J58du8us=", "dev": true, "requires": { "micromatch": "^3.1.4", @@ -1732,7 +1732,7 @@ }, "graphql": { "version": "0.13.2", - "resolved": "https://registry.npmjs.org/graphql/-/graphql-0.13.2.tgz", + "resolved": "http://registry.npmjs.org/graphql/-/graphql-0.13.2.tgz", "integrity": "sha512-QZ5BL8ZO/B20VA8APauGBg3GyEgZ19eduvpLWoq5x7gMmWnHoy8rlQWPLmWgFvo1yNgjSEFMesmS4R6pPr7xog==", "dev": true, "requires": { @@ -1973,7 +1973,7 @@ "apollo-server-env": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/apollo-server-env/-/apollo-server-env-2.2.0.tgz", - "integrity": "sha512-wjJiI5nQWPBpNmpiLP389Ezpstp71szS6DHAeTgYLb/ulCw3CTuuA+0/E1bsThVWiQaDeHZE0sE3yI8q2zrYiA==", + "integrity": "sha1-Xuxdv0ZYH2Y/1mkrLgXH6K5tYDQ=", "requires": { "node-fetch": "^2.1.2", "util.promisify": "^1.0.0" @@ -2059,7 +2059,7 @@ "aproba": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", - "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==" + "integrity": "sha1-aALmJk79GMeQobDVF/DyYnvyyUo=" }, "arg": { "version": "4.1.0", @@ -2156,7 +2156,7 @@ "asn1.js": { "version": "4.10.1", "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-4.10.1.tgz", - "integrity": "sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw==", + "integrity": "sha1-ucK/WAXx5kqt7tbfOiv6+1pz9aA=", "dev": true, "requires": { "bn.js": "^4.0.0", @@ -2198,7 +2198,7 @@ "assertion-error": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", - "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==", + "integrity": "sha1-5gtrDo8wG9l+U3UhW9pAbIURjAs=", "dev": true }, "assign-symbols": { @@ -2226,12 +2226,12 @@ "async-limiter": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.0.tgz", - "integrity": "sha512-jp/uFnooOiO+L211eZOoSyzpOITMXx1rBITauYykG3BRYPu8h0UcxsPNB04RR5vo4Tyz3+ay17tR6JVf9qzYWg==" + "integrity": "sha1-ePrtjD0HSrgfIrTphdeehzj3IPg=" }, "async-retry": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/async-retry/-/async-retry-1.2.3.tgz", - "integrity": "sha512-tfDb02Th6CE6pJUF2gjW5ZVjsgwlucVXOEQMvEX9JgSJMs9gAX+Nz3xRuJBKuUYjTSYORqvDBORdAQ3LU59g7Q==", + "integrity": "sha1-plIfM4NY0yKxoAEreQMMb0EdHOA=", "requires": { "retry": "0.12.0" } @@ -2427,7 +2427,7 @@ "base64-js": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.0.tgz", - "integrity": "sha512-ccav/yGvoa80BQDljCxsmmQ3Xvx60/UpBIij5QN21W3wBi/hhIC9OoO+KLpu9IJTS9j4DRVJ3aDDF9cMSoa2lw==", + "integrity": "sha1-yrHmEY8FEJXli1KBrqjBzSK/wOM=", "dev": true }, "basic-auth": { @@ -2462,7 +2462,7 @@ "bn.js": { "version": "4.11.8", "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz", - "integrity": "sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==", + "integrity": "sha1-LN4J617jQfSEdGuwMJsyU7GxRC8=", "dev": true }, "body-parser": { @@ -2503,7 +2503,7 @@ "boxen": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/boxen/-/boxen-1.3.0.tgz", - "integrity": "sha512-TNPjfTr432qx7yOjQyaXm3dSR0MH9vXp7eT1BFSl/C51g+EFnOR9hTg1IreahGBmDNCehscshe45f+C1TBZbLw==", + "integrity": "sha1-VcbDmouljZxhrSLNh3Uy3rZlogs=", "dev": true, "requires": { "ansi-align": "^2.0.0", @@ -2573,13 +2573,13 @@ "browser-stdout": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", - "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", + "integrity": "sha1-uqVZ7hTO1zRSIputcyZGfGH6vWA=", "dev": true }, "browserify-aes": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", - "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", + "integrity": "sha1-Mmc0ZC9APavDADIJhTu3CtQo70g=", "dev": true, "requires": { "buffer-xor": "^1.0.3", @@ -2593,7 +2593,7 @@ "browserify-cipher": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz", - "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==", + "integrity": "sha1-jWR0wbhwv9q807z8wZNKEOlPFfA=", "dev": true, "requires": { "browserify-aes": "^1.0.4", @@ -2604,7 +2604,7 @@ "browserify-des": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz", - "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==", + "integrity": "sha1-OvTx9Zg5QDVy8cZiBDdfen9wPpw=", "dev": true, "requires": { "cipher-base": "^1.0.1", @@ -2641,7 +2641,7 @@ "browserify-zlib": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz", - "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==", + "integrity": "sha1-KGlFnZqjviRf6P4sofRuLn9U1z8=", "dev": true, "requires": { "pako": "~1.0.5" @@ -2682,7 +2682,7 @@ "buffer-writer": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/buffer-writer/-/buffer-writer-2.0.0.tgz", - "integrity": "sha512-a7ZpuTZU1TRtnwyCNW3I5dc0wWNC3VR9S++Ewyk2HHZdrO3CQJqSpd+95Us590V6AL7JqUAH2IwZ/398PmNFgw==" + "integrity": "sha1-zn64Gjj3gp2wnIc/L7t5LAyY7AQ=" }, "buffer-xor": { "version": "1.0.3", @@ -2804,7 +2804,7 @@ "capture-stack-trace": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/capture-stack-trace/-/capture-stack-trace-1.0.1.tgz", - "integrity": "sha512-mYQLZnx5Qt1JgB1WEiMCf2647plpGeQ2NMR/5L0HNZzGQo4fuSPnK+wjfPnKZV0aiJDgzmWqqkV/g7JD+DW0qw==", + "integrity": "sha1-psC74fOPOqC5Ijjstv9Cw0TUE10=", "dev": true }, "catharsis": { @@ -2828,7 +2828,7 @@ "chai": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/chai/-/chai-4.2.0.tgz", - "integrity": "sha512-XQU3bhBukrOsQCuwZndwGcCVQHyZi53fQ6Ys1Fym7E4olpIqqZZhhoFJoaKVvV17lWQoXYwgWN2nF5crA8J2jw==", + "integrity": "sha1-dgqnLPION5XoSxKHfODoNzeqKeU=", "dev": true, "requires": { "assertion-error": "^1.1.0", @@ -2928,7 +2928,7 @@ "chrome-trace-event": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.0.tgz", - "integrity": "sha512-xDbVgyfDTT2piup/h8dK/y4QZfJRSa73bw1WZ8b4XM1o7fsFubUVGYcE+1ANtOzJJELGpYoG2961z0Z6OAld9A==", + "integrity": "sha1-Rakb0sIMlBHwljtarrmhuV4JzEg=", "dev": true, "requires": { "tslib": "^1.9.0" @@ -2937,13 +2937,13 @@ "ci-info": { "version": "1.6.0", "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-1.6.0.tgz", - "integrity": "sha512-vsGdkwSCDpWmP80ncATX7iea5DWQemg1UgCW5J8tqjU3lYw4FBYuj89J0CTVomA7BEfvSZd84GmHko+MxFQU2A==", + "integrity": "sha1-LKINu5zrMtRSSmgzAzE/AwSx5Jc=", "dev": true }, "cipher-base": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", - "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", + "integrity": "sha1-h2Dk7MJy9MNjUy+SbYdKriwTl94=", "dev": true, "requires": { "inherits": "^2.0.1", @@ -3073,7 +3073,7 @@ "colors": { "version": "1.3.3", "resolved": "https://registry.npmjs.org/colors/-/colors-1.3.3.tgz", - "integrity": "sha512-mmGt/1pZqYRjMxB1axhTo16/snVZ5krrKkcmMeVKxzECMMXoCgnvTPp10QgHfcbQZw8Dq2jMNG6je4JlWU0gWg==" + "integrity": "sha1-OeAF1Uav4B4B+cTKj6UPaGoBIF0=" }, "command-line-args": { "version": "5.0.2", @@ -3194,7 +3194,7 @@ "configstore": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/configstore/-/configstore-3.1.2.tgz", - "integrity": "sha512-vtv5HtGjcYUgFrXc6Kx747B83MRRVS5R1VTEQoXvuP+kMI+if6uywV0nDGoiydJRy4yk7h9od5Og0kxx4zUXmw==", + "integrity": "sha1-xvJd767vJt8S3TNBSwAf6BpUP48=", "dev": true, "requires": { "dot-prop": "^4.1.0", @@ -3298,7 +3298,7 @@ "copy-concurrently": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/copy-concurrently/-/copy-concurrently-1.0.5.tgz", - "integrity": "sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A==", + "integrity": "sha1-kilzmMrjSTf8r9bsgTnBgFHwteA=", "requires": { "aproba": "^1.1.1", "fs-write-stream-atomic": "^1.0.8", @@ -3343,7 +3343,7 @@ "cors": { "version": "2.8.5", "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", - "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", + "integrity": "sha1-6sEdpRWS3Ya58G9uesKTs9+HXSk=", "requires": { "object-assign": "^4", "vary": "^1" @@ -3357,7 +3357,7 @@ "create-ecdh": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.3.tgz", - "integrity": "sha512-GbEHQPMOswGpKXM9kCWVrremUcBmjteUaQ01T9rkKCPDXfUHX0IoP9LpHYo2NPFampa4e+/pFDc3jQdxrxQLaw==", + "integrity": "sha1-yREbbzMEXEaX8UR4f5JUzcd8Rf8=", "dev": true, "requires": { "bn.js": "^4.1.0", @@ -3376,7 +3376,7 @@ "create-hash": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", - "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", + "integrity": "sha1-iJB4rxGmN1a8+1m9IhmWvjqe8ZY=", "dev": true, "requires": { "cipher-base": "^1.0.1", @@ -3389,7 +3389,7 @@ "create-hmac": { "version": "1.1.7", "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", - "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", + "integrity": "sha1-aRcMeLOrlXFHsriwRXLkfq0iQ/8=", "dev": true, "requires": { "cipher-base": "^1.0.3", @@ -3419,7 +3419,7 @@ "whatwg-fetch": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-2.0.4.tgz", - "integrity": "sha512-dcQ1GWpOD/eEQ97k66aiEVpNnapVj90/+R+SXTPYGHpYBBypfKJEQjLrvMZ7YXbKm21gXd4NcuxUTjiv1YtLng==", + "integrity": "sha1-3eal3zFfnTmZGqF2IYU9cguFVm8=", "dev": true } } @@ -3440,7 +3440,7 @@ "crypto-browserify": { "version": "3.12.0", "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz", - "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==", + "integrity": "sha1-OWz58xN/A+S45TLFj2mCVOAPgOw=", "dev": true, "requires": { "browserify-cipher": "^1.0.0", @@ -3520,7 +3520,7 @@ "deep-eql": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-3.0.1.tgz", - "integrity": "sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw==", + "integrity": "sha1-38lARACtHI/gI+faHfHBR8S0RN8=", "dev": true, "requires": { "type-detect": "^4.0.0" @@ -3546,7 +3546,7 @@ "define-properties": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", - "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", + "integrity": "sha1-z4jabL7ib+bbcJT2HYcMvYTO6fE=", "requires": { "object-keys": "^1.0.12" } @@ -3634,13 +3634,13 @@ "diff": { "version": "3.5.0", "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz", - "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==", + "integrity": "sha1-gAwN0eCov7yVg1wgKtIg/jF+WhI=", "dev": true }, "diffie-hellman": { "version": "5.0.3", "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", - "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==", + "integrity": "sha1-QOjumPVaIUlgcUaSHGPhrl89KHU=", "dev": true, "requires": { "bn.js": "^4.1.0", @@ -3701,7 +3701,7 @@ "domain-browser": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz", - "integrity": "sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==", + "integrity": "sha1-PTH1AZGmdJ3RN1p/Ui6CPULlTto=", "dev": true }, "dot-case": { @@ -3716,7 +3716,7 @@ "dot-prop": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-4.2.0.tgz", - "integrity": "sha512-tUMXrxlExSW6U2EXiiKGSBVdYgtV8qlHL+C10TsW4PURY/ic+eaysnSkwB4kA/mBlCyy/IKDJ+Lc3wbWeaXtuQ==", + "integrity": "sha1-HxngwuGqDjJ5fEl5nyg3rGr2nFc=", "dev": true, "requires": { "is-obj": "^1.0.0" @@ -3775,7 +3775,7 @@ "elliptic": { "version": "6.4.1", "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.4.1.tgz", - "integrity": "sha512-BsXLz5sqX8OHcsh7CqBMztyXARmGQ3LWPtGjJi6DiJHq5C/qvi9P3OqgswKSDftbu8+IoI/QDTAm2fFnQ9SZSQ==", + "integrity": "sha1-wtC3d2kRuGcixjLDwGxg8vgZk5o=", "dev": true, "requires": { "bn.js": "^4.4.0", @@ -3814,7 +3814,7 @@ "end-of-stream": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.1.tgz", - "integrity": "sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q==", + "integrity": "sha1-7SljTRm6ukY7bOa4CjchPqtx7EM=", "requires": { "once": "^1.4.0" } @@ -3869,7 +3869,7 @@ "es-to-primitive": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.0.tgz", - "integrity": "sha512-qZryBOJjV//LaxLTV6UC//WewneB3LcXOL9NP++ozKVXsIIIpm/2c13UDiD9Jp2eThsecw9m3jPqDwTyobcdbg==", + "integrity": "sha1-7fckeAM0VujdqO8J4ArZZQcH83c=", "requires": { "is-callable": "^1.1.4", "is-date-object": "^1.0.1", @@ -4189,7 +4189,7 @@ "esrecurse": { "version": "4.2.1", "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.1.tgz", - "integrity": "sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ==", + "integrity": "sha1-AHo7n9vCs7uH5IeeoZyS/b05Qs8=", "dev": true, "requires": { "estraverse": "^4.1.0" @@ -4214,7 +4214,7 @@ "eventemitter3": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-3.1.0.tgz", - "integrity": "sha512-ivIvhpq/Y0uSjcHDcOIccjmYjGLcP09MFGE7ysAwkAvkXfpZlC985pH2/ui64DKazbTW/4kN3yqozUxlXzI6cA==" + "integrity": "sha1-CQtNbNvWRe0Qv3UNS1QHlC17oWM=" }, "events": { "version": "3.0.0", @@ -4225,7 +4225,7 @@ "evp_bytestokey": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", - "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", + "integrity": "sha1-f8vbGY3HGVlDLv4ThCaE4FJaywI=", "dev": true, "requires": { "md5.js": "^1.3.4", @@ -4518,7 +4518,7 @@ "figgy-pudding": { "version": "3.5.1", "resolved": "https://registry.npmjs.org/figgy-pudding/-/figgy-pudding-3.5.1.tgz", - "integrity": "sha512-vNKxJHTEKNThjfrdJwHc7brvM6eVevuO5nTj6ez8ZQ1qbXTvGthucRF7S4vf2cr71QVnT70V34v0S1DyQsti0w==" + "integrity": "sha1-hiRwESkBxyeg5JWoB0S9W6odZ5A=" }, "figures": { "version": "2.0.0", @@ -4581,7 +4581,7 @@ "finalhandler": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.1.tgz", - "integrity": "sha512-Y1GUDo39ez4aHAw7MysnUD5JzYX+WaIj8I57kO3aEPT1fFRL4sr7mjei97FgnwhAyyzRYmQZaTHb2+9uZ1dPtg==", + "integrity": "sha1-7r9O2EAHnIP0JJA4ydcDAIMBsQU=", "requires": { "debug": "2.6.9", "encodeurl": "~1.0.2", @@ -5567,7 +5567,7 @@ "graphql-request": { "version": "1.8.2", "resolved": "https://registry.npmjs.org/graphql-request/-/graphql-request-1.8.2.tgz", - "integrity": "sha512-dDX2M+VMsxXFCmUX0Vo0TopIZIX4ggzOtiCsThgtrKR4niiaagsGTDIHj3fsOMFETpa064vzovI+4YV4QnMbcg==", + "integrity": "sha1-OY0QrhXFhWdnQb3j/AHVypSPj74=", "dev": true, "requires": { "cross-fetch": "2.2.2" @@ -5576,7 +5576,7 @@ "graphql-subscriptions": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/graphql-subscriptions/-/graphql-subscriptions-1.0.0.tgz", - "integrity": "sha512-+ytmryoHF1LVf58NKEaNPRUzYyXplm120ntxfPcgOBC7TnK7Tv/4VRHeh4FAR9iL+O1bqhZs4nkibxQ+OA5cDQ==", + "integrity": "sha1-R1JnaUs71GWvZHfbq0Jjo/YnArg=", "requires": { "iterall": "^1.2.1" } @@ -5631,7 +5631,7 @@ "growl": { "version": "1.10.5", "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz", - "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==", + "integrity": "sha1-8nNdwig2dPpnR4sQGBBZNVw2nl4=", "dev": true }, "handlebars": { @@ -5758,7 +5758,7 @@ "hash.js": { "version": "1.1.7", "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", - "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", + "integrity": "sha1-C6vKU46NTuSg+JiNaIZlN6ADz0I=", "dev": true, "requires": { "inherits": "^2.0.3", @@ -5848,7 +5848,7 @@ "ieee754": { "version": "1.1.12", "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.12.tgz", - "integrity": "sha512-GguP+DRY+pJ3soyIiGPTvdiVXjZ+DbXOxGpXn3eMvNW4x4irjqXm4wHKscC+TfxSJ0yw/S1F24tqdMNsMZTiLA==", + "integrity": "sha1-UL8k5bnIu5ivSWTJQc2wkY2ntgs=", "dev": true }, "iferr": { @@ -6060,12 +6060,12 @@ "is-callable": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.4.tgz", - "integrity": "sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA==" + "integrity": "sha1-HhrfIZ4e62hNaR+dagX/DTCiTXU=" }, "is-ci": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-1.2.1.tgz", - "integrity": "sha512-s6tfsaQaQi3JNciBH6shVqEDvhGut0SUXr31ag8Pd8BBbVVlcGfWhpPmEOoM6RJ5TFhbypvf5yyRw/VXW1IiWg==", + "integrity": "sha1-43ecjuF/zPQoSI9uKBGH8uYyhBw=", "dev": true, "requires": { "ci-info": "^1.5.0" @@ -6269,7 +6269,7 @@ "is-symbol": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.2.tgz", - "integrity": "sha512-HS8bZ9ox60yCJLH9snBpIwv9pYUAkcuLhSA1oero1UB5y9aiQpRA8y2ex945AOtCZL1lJDeIk3G5LthswI46Lw==", + "integrity": "sha1-oFX2rlcZLK7jKeeoYBGLSXqVDzg=", "requires": { "has-symbols": "^1.0.0" } @@ -6419,7 +6419,7 @@ "jsdoc-babel": { "version": "0.5.0", "resolved": "https://registry.npmjs.org/jsdoc-babel/-/jsdoc-babel-0.5.0.tgz", - "integrity": "sha512-PYfTbc3LNTeR8TpZs2M94NLDWqARq0r9gx3SvuziJfmJS7/AeMKvtj0xjzOX0R/4MOVA7/FqQQK7d6U0iEoztQ==", + "integrity": "sha1-che4ggRp/mANzP3uiVZIxqDdSi4=", "dev": true, "requires": { "jsdoc-regex": "^1.0.1", @@ -6470,7 +6470,7 @@ "json-parse-better-errors": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", - "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", + "integrity": "sha1-u4Z8+zRQ5pEHwTHRxRS6s9yLyqk=", "dev": true }, "json-schema-traverse": { @@ -6968,7 +6968,7 @@ "long": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/long/-/long-4.0.0.tgz", - "integrity": "sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA==" + "integrity": "sha1-mntxz7fTYaGU6lVSQckvdGjVvyg=" }, "longest": { "version": "1.0.1", @@ -7001,7 +7001,7 @@ "lowercase-keys": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", - "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==", + "integrity": "sha1-b54wtHCE2XGnyCD/FabFFnt0wm8=", "dev": true }, "lru-cache": { @@ -7015,7 +7015,7 @@ "make-dir": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz", - "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==", + "integrity": "sha1-ecEDO4BRW9bSTsmTPoYMp17ifww=", "requires": { "pify": "^3.0.0" } @@ -7071,7 +7071,7 @@ "md5.js": { "version": "1.3.5", "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", - "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", + "integrity": "sha1-tdB7jjIW4+J81yjXL3DR5qNCAF8=", "dev": true, "requires": { "hash-base": "^3.0.0", @@ -7143,7 +7143,7 @@ "miller-rabin": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz", - "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", + "integrity": "sha1-8IA1HIZbDcViqEYpZtqlNUPHik0=", "dev": true, "requires": { "bn.js": "^4.0.0", @@ -7177,7 +7177,7 @@ "minimalistic-assert": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", - "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", + "integrity": "sha1-LhlN4ERibUoQ5/f7wAznPoPk1cc=", "dev": true }, "minimalistic-crypto-utils": { @@ -7861,7 +7861,7 @@ "output-file-sync": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/output-file-sync/-/output-file-sync-2.0.1.tgz", - "integrity": "sha512-mDho4qm7WgIXIGf4eYU1RHN2UU5tPfVYVSRwDJw0uTmj35DQUt/eNp19N7v6T3SrR0ESTEf2up2CGO73qI35zQ==", + "integrity": "sha1-9TEYKC9fVTwnmVQXkrcjpMcUMMA=", "dev": true, "requires": { "graceful-fs": "^4.1.11", @@ -8139,7 +8139,7 @@ "path-type": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", - "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", + "integrity": "sha1-zvMdyOCho7sNEFwM2Xzzv0f0428=", "requires": { "pify": "^3.0.0" } @@ -8158,7 +8158,7 @@ "pbkdf2": { "version": "3.0.17", "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.0.17.tgz", - "integrity": "sha512-U/il5MsrZp7mGg3mSQfn742na2T+1/vHDCG5/iTI3X9MKUuYUZVLQhyRsg06mCgDBTd57TxzgZt7P+fYfjRLtA==", + "integrity": "sha1-l2wgZTBhexTrsyEUI597CTNuk6Y=", "dev": true, "requires": { "create-hash": "^1.1.2", @@ -8321,7 +8321,7 @@ "process-nextick-args": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz", - "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==" + "integrity": "sha1-o31zL0JxtKsa0HDTVQjoKQeI/6o=" }, "progress": { "version": "2.0.3", @@ -8355,7 +8355,7 @@ "protobufjs": { "version": "6.8.8", "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-6.8.8.tgz", - "integrity": "sha512-AAmHtD5pXgZfi7GMpllpO3q1Xw1OYldr+dMUlAnffGTAhqkg72WdmSY71uKBF/JuyiKs8psYbtKrhi0ASCD8qw==", + "integrity": "sha1-yLTxKC/XqQ5vWxCe0RyEr4KQjnw=", "requires": { "@protobufjs/aspromise": "^1.1.2", "@protobufjs/base64": "^1.1.2", @@ -8409,7 +8409,7 @@ "public-encrypt": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz", - "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==", + "integrity": "sha1-T8ydd6B+SLp1J+fL4N4z0HATMeA=", "dev": true, "requires": { "bn.js": "^4.1.0", @@ -8546,7 +8546,7 @@ "pumpify": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-1.5.1.tgz", - "integrity": "sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==", + "integrity": "sha1-NlE74karJ1cLGjdKXOJ4v9dDcM4=", "requires": { "duplexify": "^3.6.0", "inherits": "^2.0.3", @@ -8603,7 +8603,7 @@ "randomfill": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz", - "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==", + "integrity": "sha1-ySGW/IarQr6YPxvzF3giSTHWFFg=", "dev": true, "requires": { "randombytes": "^2.0.5", @@ -8647,7 +8647,7 @@ "rc": { "version": "1.2.8", "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", - "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", + "integrity": "sha1-zZJL9SAKB1uDwYjNa54hG3/A0+0=", "dev": true, "requires": { "deep-extend": "^0.6.0", @@ -8658,7 +8658,7 @@ "dependencies": { "minimist": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "resolved": "http://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", "dev": true } @@ -8831,7 +8831,7 @@ "readdirp": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz", - "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", + "integrity": "sha1-DodiKjMlqjPokihcr4tOhGUppSU=", "dev": true, "requires": { "graceful-fs": "^4.1.11", @@ -8951,7 +8951,7 @@ "regenerate": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.0.tgz", - "integrity": "sha512-1G6jJVDWrt0rK99kBjvEtziZNCICAuvIPkSiUFIQxVP06RCVpq3dmDo2oi6ABpYaDYaTRr67BEhL8r1wgEZZKg==", + "integrity": "sha1-SoVuxLVuQHfFV1icroXnpMiGmhE=", "dev": true }, "regenerate-unicode-properties": { @@ -9015,7 +9015,7 @@ "registry-auth-token": { "version": "3.3.2", "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-3.3.2.tgz", - "integrity": "sha512-JL39c60XlzCVgNrO+qq68FoNb56w/m7JYvGR2jT5iR1xBrUA3Mfx5Twk5rqTThPmQKMWydGmq8oFtDlxfrmxnQ==", + "integrity": "sha1-hR/UkDjuy1hpERFa+EUmDuyYPyA=", "dev": true, "requires": { "rc": "^1.1.6", @@ -9034,13 +9034,13 @@ "regjsgen": { "version": "0.5.0", "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.5.0.tgz", - "integrity": "sha512-RnIrLhrXCX5ow/E5/Mh2O4e/oa1/jW0eaBKTSy3LaCj+M3Bqvm97GWDp2yUtzIs4LEn65zR2yiYGFqb2ApnzDA==", + "integrity": "sha1-p2NNwI+JIJwgSa3aNSVxH7lyZd0=", "dev": true }, "regjsparser": { "version": "0.6.0", "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.6.0.tgz", - "integrity": "sha512-RQ7YyokLiQBomUJuUG8iGVvkgOLxwyZM8k6d3q5SAXpg4r5TZJZigKFvC6PpD+qQ98bCDC5YelPeA3EucDoNeQ==", + "integrity": "sha1-8eaui32iuulsmTmbhozWyTOiupw=", "dev": true, "requires": { "jsesc": "~0.5.0" @@ -9188,7 +9188,7 @@ "ripemd160": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", - "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", + "integrity": "sha1-ocGm9iR1FXe6XQeRTLyShQWFiQw=", "dev": true, "requires": { "hash-base": "^3.0.0", @@ -9286,7 +9286,7 @@ "send": { "version": "0.16.2", "resolved": "https://registry.npmjs.org/send/-/send-0.16.2.tgz", - "integrity": "sha512-E64YFPUssFHEFBvpbbjr44NCLtI1AohxQ8ZSiJjQLskAdKuriYEP6VyGEsRDH8ScozGpkaX1BGvhanqCwkcEZw==", + "integrity": "sha1-bsyh4PjBVtFBWXVZhI32RzCmu8E=", "requires": { "debug": "2.6.9", "depd": "~1.1.2", @@ -9368,7 +9368,7 @@ "serve-static": { "version": "1.13.2", "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.13.2.tgz", - "integrity": "sha512-p/tdJrO4U387R9oMjb1oj7qSMaMfmOyd4j9hOFoxZe2baQszgHcSWjuya/CiT5kgZZKRudHNOA0pYXOl8rQ5nw==", + "integrity": "sha1-CV6Ecv1bRiN9tQzkhqQ/S4bGzsE=", "requires": { "encodeurl": "~1.0.2", "escape-html": "~1.0.3", @@ -9416,7 +9416,7 @@ "sha.js": { "version": "2.4.11", "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", - "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", + "integrity": "sha1-N6XPC4HsvGlD3hCbopYNGyZYSuc=", "requires": { "inherits": "^2.0.1", "safe-buffer": "^5.0.1" @@ -9668,7 +9668,7 @@ "split": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/split/-/split-1.0.1.tgz", - "integrity": "sha512-mTyOoPbrivtXnwnIxZRFYRrPNtEFKlpB2fvjSnCQUiAA6qAZzqwna5envK4uk6OIeP17CsdF3rSBGYVBsU0Tkg==", + "integrity": "sha1-YFvZvjA6pZ+zX5Ip++oN3snqB9k=", "requires": { "through": "2" } @@ -9761,7 +9761,7 @@ "stream-http": { "version": "2.8.3", "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-2.8.3.tgz", - "integrity": "sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw==", + "integrity": "sha1-stJCRpKIpaJ+xP6JM6z2I95lFPw=", "dev": true, "requires": { "builtin-status-codes": "^3.0.0", @@ -9840,7 +9840,7 @@ "subscriptions-transport-ws": { "version": "0.9.15", "resolved": "https://registry.npmjs.org/subscriptions-transport-ws/-/subscriptions-transport-ws-0.9.15.tgz", - "integrity": "sha512-f9eBfWdHsePQV67QIX+VRhf++dn1adyC/PZHP6XI5AfKnZ4n0FW+v5omxwdHVpd4xq2ZijaHEcmlQrhBY79ZWQ==", + "integrity": "sha1-aKi3ugA32MSJ+y9aEC0UlNspfQ0=", "requires": { "backo2": "^1.0.2", "eventemitter3": "^3.1.0", @@ -9852,7 +9852,7 @@ "ws": { "version": "5.2.2", "resolved": "https://registry.npmjs.org/ws/-/ws-5.2.2.tgz", - "integrity": "sha512-jaHFD6PFv6UgoIVda6qZllptQsMlDEJkTQcybzzXDYM1XO9Y8em691FGMPmM46WGyLU4z9KMgQN+qrux/nhlHA==", + "integrity": "sha1-3/7xSGa46NyRM1glFNG++vlumA8=", "requires": { "async-limiter": "~1.0.0" } @@ -10095,7 +10095,7 @@ "through2": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", - "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", + "integrity": "sha1-AcHjnrMdB8t9A6lqcIIyYLIxMs0=", "requires": { "readable-stream": "~2.3.6", "xtend": "~4.0.1" @@ -10118,7 +10118,7 @@ "timers-browserify": { "version": "2.0.10", "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.10.tgz", - "integrity": "sha512-YvC1SV1XdOUaL6gx5CoGroT3Gu49pK9+TZ38ErPldOWW4j49GI1HKs9DV+KGq/w6y+LZ72W1c8cKz2vzY+qpzg==", + "integrity": "sha1-HSjj0qrfHVpZlsTp+VYBzQU0gK4=", "dev": true, "requires": { "setimmediate": "^1.0.4" @@ -10210,7 +10210,7 @@ "touch": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/touch/-/touch-3.1.0.tgz", - "integrity": "sha512-WBx8Uy5TLtOSRtIq+M03/sKDrXCLHxwDcquSP2c43Le03/9serjQBIztjRz6FkJez9D/hleyAXTBGLwwZUw9lA==", + "integrity": "sha1-/jZfX3XsntTlaCXgu3bSSrdK+Ds=", "dev": true, "requires": { "nopt": "~1.0.10" @@ -10264,7 +10264,7 @@ "tslib": { "version": "1.9.3", "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.9.3.tgz", - "integrity": "sha512-4krF8scpejhaOgqzBEcGM7yDIEfi0/8+8zDRZhNZZ2kjmHJ4hv3zCbQWxoJGz1iw5U0Jl0nma13xzHXcncMavQ==" + "integrity": "sha1-1+TdeSRdhUKMTX5IIqeZF5VMooY=" }, "tslint": { "version": "5.13.1", @@ -10314,7 +10314,7 @@ "type-detect": { "version": "4.0.8", "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", - "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", + "integrity": "sha1-dkb7XxiHHPu3dJ5pvTmmOI63RQw=", "dev": true }, "type-is": { @@ -10412,13 +10412,13 @@ "unicode-canonical-property-names-ecmascript": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz", - "integrity": "sha512-jDrNnXWHd4oHiTZnx/ZG7gtUTVp+gCcTTKr8L0HjlwphROEW3+Him+IpvC+xcJEFegapiMZyZe02CyuOnRmbnQ==", + "integrity": "sha1-JhmADEyCWADv3YNDr33Zkzy+KBg=", "dev": true }, "unicode-match-property-ecmascript": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.4.tgz", - "integrity": "sha512-L4Qoh15vTfntsn4P1zqnHulG0LdXgjSO035fEpdtp6YxXhMT51Q6vgM5lYdG/5X3MjS+k/Y9Xw4SFCY9IkR0rg==", + "integrity": "sha1-jtKjJWmWG86SJ9Cc0/+7j+1fAgw=", "dev": true, "requires": { "unicode-canonical-property-names-ecmascript": "^1.0.4", @@ -10550,7 +10550,7 @@ "update-notifier": { "version": "2.5.0", "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-2.5.0.tgz", - "integrity": "sha512-gwMdhgJHGuj/+wHJJs9e6PcCszpxR1b236igrOkUofGhqJuG+amlIKwApH1IW1WWl7ovZxsX49lMBWLxSdm5Dw==", + "integrity": "sha1-0HRFk+E/Fh5AassdlAi3LK0Ir/Y=", "dev": true, "requires": { "boxen": "^1.2.1", @@ -10658,7 +10658,7 @@ "util.promisify": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/util.promisify/-/util.promisify-1.0.0.tgz", - "integrity": "sha512-i+6qA2MPhvoKLuxnJNpXAGhg7HphQOSUq2LKMZD0m15EiskXUkMvKdF4Uui0WYeCUGea+o2cw/ZuwehtfsrNkA==", + "integrity": "sha1-RA9xZaRZyaFtwUXrjnLzVocJcDA=", "requires": { "define-properties": "^1.1.2", "object.getownpropertydescriptors": "^2.0.3" @@ -10767,7 +10767,7 @@ "watchpack": { "version": "1.6.0", "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.6.0.tgz", - "integrity": "sha512-i6dHe3EyLjMmDlU1/bGQpEw25XSjkJULPuAVKCbNRefQVq48yXKUpwg538F7AZTf9kyr57zj++pQFltUa5H7yA==", + "integrity": "sha1-S8EsLr6KonenHx0/FNaFx7RGzQA=", "dev": true, "requires": { "chokidar": "^2.0.2", @@ -10906,7 +10906,7 @@ "webpack-sources": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.3.0.tgz", - "integrity": "sha512-OiVgSrbGu7NEnEvQJJgdSFPl2qWKkWq5lHMhgiToIiN9w34EBnjYzSYs+VbL5KoYiLNtFFa7BZIKxRED3I32pA==", + "integrity": "sha1-KijcufH0X+lg2PFJMlK17mUw+oU=", "dev": true, "requires": { "source-list-map": "^2.0.0", @@ -10952,7 +10952,7 @@ "widest-line": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-2.0.1.tgz", - "integrity": "sha512-Ba5m9/Fa4Xt9eb2ELXt77JxVDV8w7qQrH0zS/TWSJdLyAwQjWoOzpzj5lwVftDz6n/EOu3tNACS84v509qwnJA==", + "integrity": "sha1-dDh2RzDsfvQ4HOTfgvuYpTFCo/w=", "dev": true, "requires": { "string-width": "^2.1.1" @@ -10990,7 +10990,7 @@ "worker-farm": { "version": "1.6.0", "resolved": "https://registry.npmjs.org/worker-farm/-/worker-farm-1.6.0.tgz", - "integrity": "sha512-6w+3tHbM87WnSWnENBUvA2pxJPLhQUg5LKwUQHq3r+XPhIM+Gh2R5ycbwPCyuGbNg+lPgdcnQUhuC02kJCvffQ==", + "integrity": "sha1-rsxAWXb6talVJhgIRvDboojzpKA=", "dev": true, "requires": { "errno": "~0.1.7" diff --git a/src/ldap/export/group.ts b/src/ldap/export/group.ts index 2fb7c682f40333cc45a09cbbab8a4ae776402798..60134bddbef35d4986bd14ab5ca616a1bca0a198 100644 --- a/src/ldap/export/group.ts +++ b/src/ldap/export/group.ts @@ -4,15 +4,48 @@ * @memberof LDAP */ -import { ldapConfig, groupData, categories } from '../internal/config'; +import { ldapConfig, categories } from '../internal/config'; import {Basics} from '../internal/basics'; import {Tools} from '../internal/tools'; //------------------------------------------------------------------------------------------------------------------------ -// Classes à exporter TBT +// Type à exporter //------------------------------------------------------------------------------------------------------------------------ -export {groupData}; +/** + * @memberof LDAP + * @class groupData + * @var {string} gid - Identifiant du groupe + * @var {string?} password - Mot de passe du groupe + * @var {string} name - Nom du groupe (souvent son nom mais pas nécessairement) + * @var {string?} logo - Logo du groupe (en bytestring) + * @var {string?} description - Description du groupe (script Markdown) + * @var {string?} site - Site web du groupe (URL) + * @var {"association"|"free"|"formation"|"promo"|"cours"|"sport"} category - Statut du groupe ; association, section sportive... (actuellement juste 'association' ou 'free') + * @var {string[]} parents - Liste des groupes directement parents de celui-ci + * @var {string[]} admins - Liste des admins du groupe + * @var {string[]} speakers - Liste des porte-parole du groupe + * @var {string[]} members - Liste des membres du groupe + * @var {string[]} followers - Liste des sympathisants du groupe + */ +export class groupData { + gid: string; + password?: string; + name: string; + logo?: string; + description?: string; + site?: string; + category: "association"|"free"|"formation"|"promo"|"cours"|"sport"; + parents: string[] = []; + admins: string[] = []; + speakers: string[] = []; + members: string[] = []; + followers: string[] = []; +} + +//------------------------------------------------------------------------------------------------------------------------ +// Classes à exporter TBT +//------------------------------------------------------------------------------------------------------------------------ export class Group { /** @@ -35,8 +68,8 @@ export class Group { static async peek(gid: string) : Promise<groupData> { try { let data = await Tools.peek<groupData>("group", gid, groupData); - // Extraction des uid de membres (TBM pour inclure childs aussi) - for (let key of ["parents"]) data[key] = data[key].map(dn => dn.split(',')[0].split('=')[1]); + // Extraction des uid de parents + data["parents"] = data["parents"].map(dn => dn.split(',')[0].split('=')[1]); return data; } catch(err) { @@ -213,21 +246,17 @@ export class Group { if (!await Basics.change("group", gid, "add", vals2)) throw "Erreur lors de l'ajout des valeurs intelligentes du nouveau groupe."; ["posixGroup", "brGroup"].forEach(cst => { - let vals3={}; - vals3[ldapConfig.group['classes']]=cst; + let vals3 = { [ldapConfig.group['classes']] : cst }; Basics.change("group", gid, "add", vals3).then(res => { if (!res) throw "Erreur lors de l'ajout des valeurs constantes du nouveau groupe."; }); }); // Ajout groupes parents et fils - for (let rel of ["childs","parents"]) { - data[rel].forEach(gid => { - let tmp = ldapConfig.group[rel]; - Basics.change("group", gid, "add", { tmp: gid }).then(res => { - if (!res) throw "Erreur de l'ajout d'un groupe associé au nouveau groupe."; - }); + data["parents"].forEach(gid => { + Basics.change("group", gid, "add", { [ldapConfig.group["parents"]]: gid }).then(res => { + if (!res) throw "Erreur de l'ajout d'un groupe associé au nouveau groupe."; }); - } + }); // Utilisation des fonctions adaptées pour assurer la cohérence de l'ensemble for (let cat of categories) { for (let uid of data[cat]) Tools.add(uid, gid, cat).then(res => { diff --git a/src/ldap/export/user.ts b/src/ldap/export/user.ts index ebd80fd5198c38243f4ce2d2550c8fc13e88f17b..e6e22ad6fa596465b01ab80cf169c60876c3995e 100644 --- a/src/ldap/export/user.ts +++ b/src/ldap/export/user.ts @@ -4,15 +4,64 @@ * @memberof LDAP */ -import { ldapConfig, userData, categories } from '../internal/config'; +import { ldapConfig, categories } from '../internal/config'; import {Basics} from '../internal/basics'; import {Tools} from '../internal/tools'; //------------------------------------------------------------------------------------------------------------------------ -// Classes à exporter TBT +// Types à exporter //------------------------------------------------------------------------------------------------------------------------ -export {userData}; +/** + * @memberof LDAP + * @class partUserData + * @desc Interface avec les données visibles au mponde extérieur. + * @var {string} uid - Identifiant utilisateur + * @var {string} givenName - Prénom + * @var {string} lastName - Nom + * @var {string?} gender - Sexe + * @var {string?} photo - Bytestring de la photo de l'utilisateur + * @var {string?} address - Adresse(s) + * @var {string[]} admins - Liste des gid (group id, inclus section sportive, binet, PA...) dont l'utilisateur est admin ; pas forcément sous-liste de members + * @var {string[]} speakers - Liste des gid dont l'utilisateur est porte-parole ; pas forcément sous-liste de members + * @var {string[]} members - Liste des gid dont l'utilisateur est membre + * @var {string[]} followers - Liste des gid dont l'utilisateur est sympathisant + */ +export class partUserData { + uid: string; + givenName: string; + lastName: string; + gender?: 'M'|'F'|'U'; + photo?: string; + address?: string; + admins: string[] = []; + speakers: string[] = []; + members: string[] = []; + followers: string[] = []; +} +/** + * @memberof LDAP + * @class userData + * @desc Interface avec toutes les données extractables pour un utilisateur. + * @var {string?} password - Mot de passe (jamais transmis en clair) + * @var {string?} nickname - Surnom + * @var {string?} phone - Numéro(s) de téléphone + * @var {string?} mail - Adresse(s) courriel + * @var {string} birthdate - Date d'anniversaire + * @var {string} nationality - Nationalité d'origine + */ +export class userData extends partUserData { + nickname?: string; + password?: string; + phone?: string; + mail?: string; + birthdate: string; + nationality?: string; +} + +//------------------------------------------------------------------------------------------------------------------------ +// Classe à exporter TBT +//------------------------------------------------------------------------------------------------------------------------ export class User { /** @@ -33,12 +82,8 @@ export class User { * @async */ static async peek(uid: string) : Promise<userData> { - try { - return Tools.peek<userData>("user", uid, userData); - } - catch(err) { - throw "Error while peeking a user."; - } + try { return Tools.peek<userData>("user", uid, userData); } + catch(err) { throw "Error while peeking a user."; } } /** @@ -53,12 +98,8 @@ export class User { * @async */ static async search(data: userData) : Promise<string[]> { - try { - return Tools.search("user", data); - } - catch(err) { - throw "Erreur lors de la recherche approximative d'un utilisateur."; - } + try { return Tools.search("user", data); } + catch(err) { throw "Erreur lors de la recherche approximative d'un utilisateur."; } } /** @@ -119,9 +160,8 @@ export class User { if (!await Basics.change("user", uid, "add", vals3)) throw "Erreur lors de l'ajout des valeurs calculées à la feuille du nouvel utilisateur."; ["posixAccount", "shadowAccount", "brUser"].forEach(cst => { - let val3={}; - vals3[ldapConfig.user['class']]=cst; - Basics.change("user", uid, "add", vals3).then(res => { + let tmp = { [ldapConfig.user['class']] : cst }; + Basics.change("user", uid, "add", tmp).then(res => { if (!res) throw "Erreur lors de l'ajout d'une valeur constante à la feuille du nouvel utilisateur."; }); }); diff --git a/src/ldap/internal/basics.ts b/src/ldap/internal/basics.ts index 96824ac4e64d07b21490bfd4fa84aad7dd4d1470..7dc90777e1daee1aaf0fa23054cb94705cb57ed3 100644 --- a/src/ldap/internal/basics.ts +++ b/src/ldap/internal/basics.ts @@ -49,10 +49,8 @@ export class Basics { // Escape DN as everywhere in this file, but password is taken as is client.bind(dn, password, res => { // Gestion erreur - try { res; } - catch(err) { - throw "Erreur lors de la connection au LDAP."; - } + try { res; } + catch(err) { throw "Erreur lors de la connection au LDAP.";} }); // End with a boolean return true; @@ -107,7 +105,7 @@ export class Basics { else dn += ldapConfig.user.uid; dn += '=' + ldapEscape.dn("${txt}", { txt: id }) + ','; } - dn+=ldapConfig.dn[domain]; + dn += ldapConfig.dn[domain]; console.log("Searching dn= " + dn + ", filter : " + filter); // Interrogation LDAP selon filter let promise = new Promise<void>(function(resolve, reject) { @@ -175,7 +173,8 @@ export class Basics { await Basics.search(domain, attributes, id, filter, entry => { // Cas plusieurs attributs donc résultat dictionnaire vals.push({}); - console.log("searchMultiple found " + entry.object[(domain == 'group' ? ldapConfig['group']['gid'] : ldapConfig['user']['uid'])]); + console.log("searchMultiple found " + entry.object[domain == 'group' ? ldapConfig.group['gid'] : ldapConfig.user['uid']]); + // Suppose que tous les champs du LDAP sont définis pour les atttributs demandés attributes.forEach(attribute => vals.slice(-1)[0][attribute]=entry.object[attribute]); }); return vals; @@ -199,7 +198,7 @@ export class Basics { let dn = ""; if (domain == 'group') dn += ldapConfig.group.gid; else dn += ldapConfig.user.uid; - dn+='='+ldapEscape.dn("${txt}", { txt: id })+','+ldapConfig.dn[domain]; + dn += '='+ldapEscape.dn("${txt}", { txt: id })+','+ldapConfig.dn[domain]; // Modification LDAP selon dn fourni en argument (pourrait prendre une liste de Changes) client.modify(ldapEscape.dn("${txt}", {txt: dn}), new ldap.Change({ operation: op, @@ -227,9 +226,7 @@ export class Basics { else dn += ldapConfig.user.uid+"="+ldapEscape.dn("${txt}", { txt: vals[ldapConfig.user.uid] }); dn += ldapConfig.dn[domain]; // Ajout LDAP selon la ldapConfiguration en argument - client.add(ldapEscape.dn("${txt}", { txt: dn }), vals, err => { - throw "Erreur lors d'une opération d'ajout sur le LDAP."; - }); + client.add(ldapEscape.dn("${txt}", { txt: dn }), vals, err => { throw "Erreur lors d'une opération d'ajout sur le LDAP."; }); return true; } @@ -248,11 +245,9 @@ export class Basics { let dn = ""; if (domain == "group") dn += ldapConfig.group.gid+"="+ldapEscape.dn("${txt}", { txt: id }); else dn += ldapConfig.user.uid+"="+ldapEscape.dn("${txt}", { txt: id }); - dn+=ldapConfig.dn[domain]; + dn += ldapConfig.dn[domain]; // Suppression LDAP - client.del(ldapEscape.dn("${txt}", {txt: dn}), err => { - throw "Erreur lors d'une opération de suppression sur le LDAP."; - }); + client.del(ldapEscape.dn("${txt}", {txt: dn}), err => { throw "Erreur lors d'une opération de suppression sur le LDAP."; }); return true; } } diff --git a/src/ldap/internal/config.ts b/src/ldap/internal/config.ts index 3ee7a9b97c7c0cf89b7efdba9548273dbe3badd2..2e25dc197f57effcd0d44b5a315c69e1e87faef9 100644 --- a/src/ldap/internal/config.ts +++ b/src/ldap/internal/config.ts @@ -2,7 +2,6 @@ * Namespace qui regroupe toutes les fonctions en rapport avec le LDAP - API et fonctions internes * @namespace LDAP */ - /** * @file Importe la configuration du LDAP au sein de l'application, et remplace certaines valeurs en fonction des variables d'environnement. * @author hawkspar @@ -37,83 +36,4 @@ console.log(colors.green("Loading LDAP credentials from "+path_credentials)); export const credentialsLdapConfig = JSON.parse(fs.readFileSync(path_credentials).toString()); // Data formats and useful constants -export const categories = ["admins","speakers","members","followers"]; - -/** - * @memberof LDAP - * @class partUserData - * @desc Interface avec les données visibles au mponde extérieur. - * @var {string} uid - Identifiant utilisateur - * @var {string} givenName - Prénom - * @var {string} lastName - Nom - * @var {string?} gender - Sexe - * @var {string?} photo - Bytestring de la photo de l'utilisateur - * @var {string?} address - Adresse(s) - * @var {string[]} admins - Liste des gid (group id, inclus section sportive, binet, PA...) dont l'utilisateur est admin ; pas forcément sous-liste de members - * @var {string[]} speakers - Liste des gid dont l'utilisateur est porte-parole ; pas forcément sous-liste de members - * @var {string[]} members - Liste des gid dont l'utilisateur est membre - * @var {string[]} followers - Liste des gid dont l'utilisateur est sympathisant - */ -export class partUserData { - uid: string; - givenName: string; - lastName: string; - gender?: 'M'|'F'|'U'; - photo?: string; - address?: string; - admins: string[] = []; - speakers: string[] = []; - members: string[] = []; - followers: string[] = []; -} - -/** - * @memberof LDAP - * @class userData - * @desc Interface avec toutes les données extractables pour un utilisateur. - * @var {string?} password - Mot de passe (jamais transmis en clair) - * @var {string?} nickname - Surnom - * @var {string?} phone - Numéro(s) de téléphone - * @var {string?} mail - Adresse(s) courriel - * @var {string} birthdate - Date d'anniversaire - * @var {string} nationality - Nationalité d'origine - */ -export class userData extends partUserData { - nickname?: string; - password?: string; - phone?: string; - mail?: string; - birthdate: string; - nationality?: string; -} - -/** - * @memberof LDAP - * @class groupData - * @var {string} gid - Identifiant du groupe - * @var {string?} password - Mot de passe du groupe - * @var {string} name - Nom du groupe (souvent son nom mais pas nécessairement) - * @var {string?} logo - Logo du groupe (en bytestring) - * @var {string?} description - Description du groupe (script Markdown) - * @var {string?} site - Site web du groupe (URL) - * @var {string} category - Statut du groupe ; binet, section sportive... (actuellement juste 'binet' ou 'free') - * @var {string[]} parents - Liste des groupes directement parents de celui-ci - * @var {string[]} admins - Liste des admins du groupe - * @var {string[]} speakers - Liste des porte-parole du groupe - * @var {string[]} members - Liste des membres du groupe - * @var {string[]} followers - Liste des sympathisants du groupe - */ -export class groupData { - gid: string; - password?: string; - name: string; - logo?: string; - description?: string; - site?: string; - category: string; - parents: string[] = []; - admins: string[] = []; - speakers: string[] = []; - members: string[] = []; - followers: string[] = []; -} \ No newline at end of file +export const categories = ["admins","speakers","members","followers"]; \ No newline at end of file diff --git a/src/ldap/internal/tools.ts b/src/ldap/internal/tools.ts index 007aec83c5e49d6879bdcfaedf84d604d330ff07..0846ad04c694c7d3f4d1657e5aca0836a063052d 100644 --- a/src/ldap/internal/tools.ts +++ b/src/ldap/internal/tools.ts @@ -6,8 +6,11 @@ // Toutes les entrées utilisateur sont escapées par sécurité import ldapEscape from 'ldap-escape'; +// Imports externes limités aux types de l'API +import {userData} from '../export/user'; +import {groupData} from '../export/group'; // Imports internes -import { ldapConfig, userData, groupData, categories } from './config'; +import { ldapConfig, categories } from './config'; import {Basics} from './basics'; //------------------------------------------------------------------------------------------------------------------------ @@ -27,6 +30,7 @@ export class Tools { * @memberof LDAP * @summary Fonction qui renvoit toutes les infos relatives à un groupe ou un utilisateur particulier. * @desc Cette fonction utilise {@link LDAP.search} avec des attributs prédéfinis. Elle est naïve et n'opère pas de récursion. + * Elle extrait déjà les ids à partir des DNs pour toutes les catégories précisées dans config * @param T - Format renvoyé (en pratique {@link userData} ou {@link groupData}) * @arg {string} domain - Domaine de la recherche (utilisateur ou groupe) * @arg {string} id - Identifiant de la feuille cherchée (uid ou gid) @@ -72,7 +76,7 @@ export class Tools { * @async */ static async search(domain: "user"|"group", data: userData|groupData) : Promise<string[]> { - let filter=""; + let filter = ""; // Iteration pour chaque champ, alourdissement du filtre selon des trucs prédéfinis dans ldapConfig encore for (var key in ldapConfig[domain]) { if ((data[key]!= undefined) && (data[key] != '')) { // Si il y a qque chose à chercher pour ce filtre @@ -101,7 +105,7 @@ export class Tools { // Appel avec filtre de l'espace if (domain == "group") var att=ldapConfig.group.gid; else var att=ldapConfig.user.uid; - return Basics.searchSingle(domain, att, null, filter); + return Basics.searchSingle(domain, att, null, filter); } /** @@ -156,6 +160,7 @@ export class Tools { * @summary Fonction intermédiaire naïve. * @desc Cette fonction rajoute 2 dans 1 pour un des deux arbres si cette entrée n'était pas déjà présente de façon à ne pas créer de doublon. * La symétrie entre 1 et 2 est voulue et permet de gérer indifférement l'ajout d'un individu dans un groupe ou d'un groupe à un individu. + * Renvoie vrai si une modification a été nécessaire, faux sinon. * @arg {string} id1 - uid/gid * @arg {"group"|"user"} domain1 - Arbre concerné pour l'id1 * @arg {string} id2 - gid/uid @@ -172,12 +177,14 @@ export class Tools { // Ajoute l'utilisateur dans la catégorie concernée if (domain2 == "group") var id = ldapConfig[domain2].gid; else var id = ldapConfig[domain2].uid; - var catName = ldapConfig[domain1][category]; - if (!await Basics.change(domain1, id1, "add", {catName: id+"="+id2+","+ldapConfig.dn[domain2]})) throw "Erreur lors de la modification dans l'arbre "+domain2+" pour ajouter une entrée dans la catégorie voulue."; + let tmp = { [ldapConfig[domain1][category]] : id+"="+id2+","+ldapConfig.dn[domain2] }; + if (!await Basics.change(domain1, id1, "add", tmp)) throw "Erreur lors de la modification dans l'arbre "+domain2+" pour ajouter une entrée dans la catégorie voulue."; + return true; } + // Renvoie faux si aucune modification n'est nécessaire + else return false; } catch(err) { throw "Erreur pour obtenir une liste d'entrées d'une catégorie d'un "+domain1+"."; } - return true; } /** @@ -222,24 +229,27 @@ export class Tools { static async addDFS(uid: string, gid: string, direction: boolean): Promise<boolean> { // Classic DFS var to_visit = [gid]; - // Cas récursif ascendant (admins) - var rol = "admins"; - async function next_visit(cur_gid) { to_visit.concat(await Basics.searchSingle("group", ldapConfig.group.gid, null, "parents="+cur_gid)); } - // Cas récursif descendant (membres) - if (!direction) { - var rol = "members"; - async function next_visit(cur_gid) { - // Lecture du champ parents - let dns = await Basics.searchSingle("group", ldapConfig.group.parents, cur_gid); - // Reformattage DNs en gids de groupes - dns.map(dn => dn.split(',')[0].split('=')[1]); - to_visit.concat(dns); - } - } while (to_visit.length > 0) { let cur_gid = to_visit.pop(); - Tools.addIfAbsent(uid, "user", cur_gid, "group", rol); - await next_visit(cur_gid); + // Cas récursif descendant (admins) + if (direction) { + // Si l'utilisateur n'est pas déjà admin, on continue de boucler + if (await Tools.addIfAbsent(uid, "user", cur_gid, "group", "admins")) { + // Recherche des groupes fils (aussi rapide grâce à indexage) et ajout aux groupes à rechercher + to_visit.concat(await Basics.searchSingle("group", ldapConfig.group.gid, null, "parents="+cur_gid)); + } + } + // Cas récursif ascendant (members) + else { + // Si l'utilisateur est pas déjà membre, on continue + if (await Tools.addIfAbsent(uid, "user", cur_gid, "group", "members")) { + // Lecture du champ parents + let dns = await Basics.searchSingle("group", ldapConfig.group.parents, cur_gid); + // Reformattage DNs en gids de groupes + dns.map(dn => dn.split(',')[0].split('=')[1]); + to_visit.concat(dns); + } + } } return true; } @@ -275,6 +285,7 @@ export class Tools { * @summary Fonction intermédiaire naïve qui supprime une entrée d'une feuille si elle y existe. * @desc Cette fonction enlève 2 d'1, feuille d'un des deux arbres si cette entrée y existe. * La symétrie entre 1 et 2 est voulue et permet de gérer indifférement l'ajout d'un individu dans un groupe ou d'un groupe à un individu. + * Renvoie vrai si une modification a été nécessaire, faux sinon. * @arg {string} id1 - uid/gid * @arg {"group"|"user"} domain1 - Arbre concerné pour l'id1 * @arg {string} id2 - gid/uid @@ -302,7 +313,10 @@ export class Tools { }); } }); + return true; } + // Renvoie faux si aucune modification n'était nécessaire + else return false; } catch(err) { throw "Erreur pour obtenir une liste d'entrées d'une catégorie d'un "+domain1+"."; } return true; @@ -356,29 +370,32 @@ export class Tools { static async remDFS(uid: string, gid: string, direction: boolean): Promise<boolean> { // Classic DFS var to_visit = [gid]; - // Cas récursif ascendant (admins) - var checks = ["admins"]; - // Recherche des groupes avec parents qui correspondent (efficace car index) - async function next_visit(cur_gid) { to_visit.concat(await Basics.searchSingle("group", ldapConfig.group.gid, null, "parents="+cur_gid)); } - // Cas récursif descendant (membres) - if (!direction) { - var checks = ["admins","speakers","members"]; - async function next_visit(cur_gid) { - // Lecture du champ parents - let dns = await Basics.searchSingle("group", ldapConfig.group.parents, cur_gid); - // Reformattage des dns en gids - dns.map(dn => dn.split(',')[0].split('=')[1]); - to_visit.concat(dns); - } - } - var rol = checks[checks.length-1]; while (to_visit.length > 0) { let cur_gid = to_visit.pop(); - // Si le statut de uid dans cur_gid est un statut strict on arrête de boucler - for (let cat of checks) if ((await Tools.get(cur_gid, "group", cat)).includes(uid)) continue; - // Sinon on le tue et on boucle - Tools.remIfPresent(uid, "user", cur_gid, "group", rol); - await next_visit(cur_gid); + // Cas récursif descendant (admins) + if (direction) { + // Si le statut de uid dans cur_gid est un statut strict on arrête de boucler + if ((await Tools.get(cur_gid, "group", "admins")).includes(uid)) continue; + // Sinon, on le supprime, et on arrête de boucler s'il avait déjà perdu le statut + if (await Tools.remIfPresent(uid, "user", cur_gid, "group", "admins")) { + // Recherche des groupes fils (aussi rapide grâce à indexage) et ajout aux groupes à rechercher + to_visit.concat(await Basics.searchSingle("group", ldapConfig.group.gid, null, "parents="+cur_gid)); + } + } + // Cas récursif ascendant (members) + else { + let strict = false; + for (let cat of ["admins","speakers","members"]) if ((await Tools.get(cur_gid, "group", cat)).includes(uid)) strict = true; + // Evaluation paresseuse ; si statut strict on ne touche pas. + // Sinon, on vérifie quand même qu'il est présent, on le supprime et on boucle sur les parents + if (!strict && await Tools.remIfPresent(uid, "user", cur_gid, "group", "members")) { + // Lecture du champ parents + let dns = await Basics.searchSingle("group", ldapConfig.group.parents, cur_gid); + // Reformattage DNs en gids de groupes + dns.map(dn => dn.split(',')[0].split('=')[1]); + to_visit.concat(dns); + } + } } return true; } @@ -516,7 +533,7 @@ export class Tools { */ static async generateId(attribute: string, domain: "group"|"user") : Promise<string> { try { - return Tools.ensureUnique("0", attribute, domain, (id,n) => Math.floor((Math.random() * 100000) + 1).toString()); + return Tools.ensureUnique("0", attribute, domain, (id, n) => Math.floor((Math.random() * 100000) + 1).toString()); } catch(err) { throw "Erreur lors de l'assurance de l'unicité d'un unique identifier numérique.";