diff --git a/.gitignore b/.gitignore index 9b31034..d150cbe 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,7 @@ node_modules -.env \ No newline at end of file +.env +routes/imagenesCarrusel +routes/imagenLibro +routes/pdf + + diff --git a/package-lock.json b/package-lock.json index 99af825..cdd3e3b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -4,6 +4,11 @@ "lockfileVersion": 1, "requires": true, "dependencies": { + "abbrev": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==" + }, "accepts": { "version": "1.3.7", "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", @@ -27,6 +32,30 @@ "printj": "~1.1.0" } }, + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" + }, + "append-field": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/append-field/-/append-field-1.0.0.tgz", + "integrity": "sha1-HjRA6RXwsSA9I3SOeO3XubW0PlY=" + }, + "aproba": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", + "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==" + }, + "are-we-there-yet": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz", + "integrity": "sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w==", + "requires": { + "delegates": "^1.0.0", + "readable-stream": "^2.0.6" + } + }, "array-flatten": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", @@ -37,6 +66,15 @@ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" }, + "bcrypt": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/bcrypt/-/bcrypt-5.0.0.tgz", + "integrity": "sha512-jB0yCBl4W/kVHM2whjfyqnxTmOHkCX4kHEa5nYKSoGeYe8YrjTYTc87/6bwt1g8cmV0QrbhKriETg9jWtcREhg==", + "requires": { + "node-addon-api": "^3.0.0", + "node-pre-gyp": "0.15.0" + } + }, "big-integer": { "version": "1.6.48", "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.48.tgz", @@ -87,6 +125,11 @@ "concat-map": "0.0.1" } }, + "buffer-equal-constant-time": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", + "integrity": "sha1-+OcRMvf/5uAaXJaXpMbz5I1cyBk=" + }, "buffer-from": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", @@ -163,6 +206,16 @@ "traverse": ">=0.3.0 <0.4" } }, + "chownr": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", + "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==" + }, + "code-point-at": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", + "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=" + }, "codepage": { "version": "1.14.0", "resolved": "https://registry.npmjs.org/codepage/-/codepage-1.14.0.tgz", @@ -189,6 +242,17 @@ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" }, + "concat-stream": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", + "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", + "requires": { + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^2.2.2", + "typedarray": "^0.0.6" + } + }, "connect-busboy": { "version": "0.0.2", "resolved": "https://registry.npmjs.org/connect-busboy/-/connect-busboy-0.0.2.tgz", @@ -197,6 +261,11 @@ "busboy": "*" } }, + "console-control-strings": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", + "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=" + }, "content-disposition": { "version": "0.5.3", "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz", @@ -256,6 +325,16 @@ "ms": "2.0.0" } }, + "deep-extend": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==" + }, + "delegates": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", + "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=" + }, "depd": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", @@ -266,6 +345,11 @@ "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=" }, + "detect-libc": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", + "integrity": "sha1-+hN8S9aY7fVc1c0CrFWfkaTEups=" + }, "dicer": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/dicer/-/dicer-0.3.0.tgz", @@ -295,6 +379,14 @@ "readable-stream": "^2.0.2" } }, + "ecdsa-sig-formatter": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", + "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==", + "requires": { + "safe-buffer": "^5.0.1" + } + }, "ee-first": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", @@ -362,6 +454,14 @@ "vary": "~1.1.2" } }, + "express-fileupload": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/express-fileupload/-/express-fileupload-1.2.0.tgz", + "integrity": "sha512-oe4WpKcSppXnl5peornawWUa6tKmIc1/kJxMNRGJR1A0v4zyLL6VsFR6wZ8P2a4Iq3aGx8xae3Vlr+MOMQhFPw==", + "requires": { + "busboy": "^0.3.1" + } + }, "finalhandler": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", @@ -391,6 +491,14 @@ "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=" }, + "fs-minipass": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-1.2.7.tgz", + "integrity": "sha512-GWSSJGFy4e9GUeCcbIkED+bgAoFyj7XF1mV8rma3QW4NIqX9Kyx79N/PF61H5udOV3aY1IaMLs6pGbH71nlCTA==", + "requires": { + "minipass": "^2.6.0" + } + }, "fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", @@ -407,6 +515,21 @@ "rimraf": "2" } }, + "gauge": { + "version": "2.7.4", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", + "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=", + "requires": { + "aproba": "^1.0.3", + "console-control-strings": "^1.0.0", + "has-unicode": "^2.0.0", + "object-assign": "^4.1.0", + "signal-exit": "^3.0.0", + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wide-align": "^1.1.0" + } + }, "glob": { "version": "7.1.6", "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", @@ -425,6 +548,11 @@ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz", "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==" }, + "has-unicode": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", + "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=" + }, "http-errors": { "version": "1.7.2", "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz", @@ -445,6 +573,14 @@ "safer-buffer": ">= 2.1.2 < 3" } }, + "ignore-walk": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-3.0.3.tgz", + "integrity": "sha512-m7o6xuOaT1aqheYHKf8W6J5pYH85ZI9w077erOzLje3JsB1gkafkAhHHY19dqjulgIZHFm32Cp5uNZgcQqdJKw==", + "requires": { + "minimatch": "^3.0.4" + } + }, "immediate": { "version": "3.0.6", "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz", @@ -464,16 +600,53 @@ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" }, + "ini": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==" + }, "ipaddr.js": { "version": "1.9.1", "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==" }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "requires": { + "number-is-nan": "^1.0.0" + } + }, "isarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" }, + "jsonwebtoken": { + "version": "8.5.1", + "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-8.5.1.tgz", + "integrity": "sha512-XjwVfRS6jTMsqYs0EsuJ4LGxXV14zQybNd4L2r0UvbVnSF9Af8x7p5MzbJ90Ioz/9TI41/hTCvznF/loiSzn8w==", + "requires": { + "jws": "^3.2.2", + "lodash.includes": "^4.3.0", + "lodash.isboolean": "^3.0.3", + "lodash.isinteger": "^4.0.4", + "lodash.isnumber": "^3.0.3", + "lodash.isplainobject": "^4.0.6", + "lodash.isstring": "^4.0.1", + "lodash.once": "^4.0.0", + "ms": "^2.1.1", + "semver": "^5.6.0" + }, + "dependencies": { + "ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + } + } + }, "jszip": { "version": "3.1.5", "resolved": "https://registry.npmjs.org/jszip/-/jszip-3.1.5.tgz", @@ -511,6 +684,25 @@ } } }, + "jwa": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.4.1.tgz", + "integrity": "sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==", + "requires": { + "buffer-equal-constant-time": "1.0.1", + "ecdsa-sig-formatter": "1.0.11", + "safe-buffer": "^5.0.1" + } + }, + "jws": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/jws/-/jws-3.2.2.tgz", + "integrity": "sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==", + "requires": { + "jwa": "^1.4.1", + "safe-buffer": "^5.0.1" + } + }, "libbase64": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/libbase64/-/libbase64-0.1.0.tgz", @@ -551,6 +743,41 @@ "resolved": "https://registry.npmjs.org/listenercount/-/listenercount-1.0.1.tgz", "integrity": "sha1-hMinKrWcRyUyFIDJdeZQg0LnCTc=" }, + "lodash.includes": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz", + "integrity": "sha1-YLuYqHy5I8aMoeUTJUgzFISfVT8=" + }, + "lodash.isboolean": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz", + "integrity": "sha1-bC4XHbKiV82WgC/UOwGyDV9YcPY=" + }, + "lodash.isinteger": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz", + "integrity": "sha1-YZwK89A/iwTDH1iChAt3sRzWg0M=" + }, + "lodash.isnumber": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz", + "integrity": "sha1-POdoEMWSjQM1IwGsKHMX8RwLH/w=" + }, + "lodash.isplainobject": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", + "integrity": "sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs=" + }, + "lodash.isstring": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz", + "integrity": "sha1-1SfftUVuynzJu5XV2ur4i6VKVFE=" + }, + "lodash.once": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", + "integrity": "sha1-DdOXEhPHxW34gJd9UEyI+0cal6w=" + }, "mailcomposer": { "version": "3.12.0", "resolved": "https://registry.npmjs.org/mailcomposer/-/mailcomposer-3.12.0.tgz", @@ -623,6 +850,23 @@ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" }, + "minipass": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-2.9.0.tgz", + "integrity": "sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg==", + "requires": { + "safe-buffer": "^5.1.2", + "yallist": "^3.0.0" + } + }, + "minizlib": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-1.3.3.tgz", + "integrity": "sha512-6ZYMOEnmVsdCeTJVE0W9ZD+pVnE8h9Hma/iOwwRDsdQoePpoX56/8B6z3P9VNwppJuBKNRuFDRNRqRWexT9G9Q==", + "requires": { + "minipass": "^2.9.0" + } + }, "mkdirp": { "version": "0.5.5", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", @@ -636,6 +880,62 @@ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" }, + "multer": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/multer/-/multer-1.4.2.tgz", + "integrity": "sha512-xY8pX7V+ybyUpbYMxtjM9KAiD9ixtg5/JkeKUTD6xilfDv0vzzOFcCp4Ljb1UU3tSOM3VTZtKo63OmzOrGi3Cg==", + "requires": { + "append-field": "^1.0.0", + "busboy": "^0.2.11", + "concat-stream": "^1.5.2", + "mkdirp": "^0.5.1", + "object-assign": "^4.1.1", + "on-finished": "^2.3.0", + "type-is": "^1.6.4", + "xtend": "^4.0.0" + }, + "dependencies": { + "busboy": { + "version": "0.2.14", + "resolved": "https://registry.npmjs.org/busboy/-/busboy-0.2.14.tgz", + "integrity": "sha1-bCpiLvz0fFe7vh4qnDetNseSVFM=", + "requires": { + "dicer": "0.2.5", + "readable-stream": "1.1.x" + } + }, + "dicer": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/dicer/-/dicer-0.2.5.tgz", + "integrity": "sha1-WZbAhrszIYyBLAkL3cCc0S+stw8=", + "requires": { + "readable-stream": "1.1.x", + "streamsearch": "0.1.2" + } + }, + "isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" + }, + "readable-stream": { + "version": "1.1.14", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", + "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "0.0.1", + "string_decoder": "~0.10.x" + } + }, + "string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=" + } + } + }, "mysql": { "version": "2.18.1", "resolved": "https://registry.npmjs.org/mysql/-/mysql-2.18.1.tgz", @@ -647,11 +947,58 @@ "sqlstring": "2.3.1" } }, + "needle": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/needle/-/needle-2.6.0.tgz", + "integrity": "sha512-KKYdza4heMsEfSWD7VPUIz3zX2XDwOyX2d+geb4vrERZMT5RMU6ujjaD+I5Yr54uZxQ2w6XRTAhHBbSCyovZBg==", + "requires": { + "debug": "^3.2.6", + "iconv-lite": "^0.4.4", + "sax": "^1.2.4" + }, + "dependencies": { + "debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "requires": { + "ms": "^2.1.1" + } + }, + "ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + } + } + }, "negotiator": { "version": "0.6.2", "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==" }, + "node-addon-api": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-3.1.0.tgz", + "integrity": "sha512-flmrDNB06LIl5lywUz7YlNGZH/5p0M7W28k8hzd9Lshtdh1wshD2Y+U4h9LD6KObOy1f+fEVdgprPrEymjM5uw==" + }, + "node-pre-gyp": { + "version": "0.15.0", + "resolved": "https://registry.npmjs.org/node-pre-gyp/-/node-pre-gyp-0.15.0.tgz", + "integrity": "sha512-7QcZa8/fpaU/BKenjcaeFF9hLz2+7S9AqyXFhlH/rilsQ/hPZKK32RtR5EQHJElgu+q5RfbJ34KriI79UWaorA==", + "requires": { + "detect-libc": "^1.0.2", + "mkdirp": "^0.5.3", + "needle": "^2.5.0", + "nopt": "^4.0.1", + "npm-packlist": "^1.1.6", + "npmlog": "^4.0.2", + "rc": "^1.2.7", + "rimraf": "^2.6.1", + "semver": "^5.3.0", + "tar": "^4.4.2" + } + }, "node-xlsx": { "version": "0.15.0", "resolved": "https://registry.npmjs.org/node-xlsx/-/node-xlsx-0.15.0.tgz", @@ -679,6 +1026,54 @@ "nodemailer-fetch": "1.6.0" } }, + "nopt": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-4.0.3.tgz", + "integrity": "sha512-CvaGwVMztSMJLOeXPrez7fyfObdZqNUK1cPAEzLHrTybIua9pMdmmPR5YwtfNftIOMv3DPUhFaxsZMNTQO20Kg==", + "requires": { + "abbrev": "1", + "osenv": "^0.1.4" + } + }, + "npm-bundled": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-1.1.1.tgz", + "integrity": "sha512-gqkfgGePhTpAEgUsGEgcq1rqPXA+tv/aVBlgEzfXwA1yiUJF7xtEt3CtVwOjNYQOVknDk0F20w58Fnm3EtG0fA==", + "requires": { + "npm-normalize-package-bin": "^1.0.1" + } + }, + "npm-normalize-package-bin": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-1.0.1.tgz", + "integrity": "sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA==" + }, + "npm-packlist": { + "version": "1.4.8", + "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-1.4.8.tgz", + "integrity": "sha512-5+AZgwru5IevF5ZdnFglB5wNlHG1AOOuw28WhUq8/8emhBmLv6jX5by4WJCh7lW0uSYZYS6DXqIsyZVIXRZU9A==", + "requires": { + "ignore-walk": "^3.0.1", + "npm-bundled": "^1.0.1", + "npm-normalize-package-bin": "^1.0.1" + } + }, + "npmlog": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", + "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", + "requires": { + "are-we-there-yet": "~1.1.2", + "console-control-strings": "~1.1.0", + "gauge": "~2.7.3", + "set-blocking": "~2.0.0" + } + }, + "number-is-nan": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", + "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=" + }, "object-assign": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", @@ -700,6 +1095,25 @@ "wrappy": "1" } }, + "os-homedir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", + "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=" + }, + "os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=" + }, + "osenv": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz", + "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==", + "requires": { + "os-homedir": "^1.0.0", + "os-tmpdir": "^1.0.0" + } + }, "pako": { "version": "1.0.11", "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", @@ -760,6 +1174,17 @@ "unpipe": "1.0.0" } }, + "rc": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", + "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", + "requires": { + "deep-extend": "^0.6.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" + } + }, "read-excel-file": { "version": "4.0.7", "resolved": "https://registry.npmjs.org/read-excel-file/-/read-excel-file-4.0.7.tgz", @@ -803,6 +1228,16 @@ "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" }, + "sax": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", + "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==" + }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" + }, "send": { "version": "0.17.1", "resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz", @@ -850,6 +1285,11 @@ "send": "0.17.1" } }, + "set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=" + }, "setimmediate": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", @@ -860,6 +1300,11 @@ "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==" }, + "signal-exit": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz", + "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==" + }, "sqlstring": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/sqlstring/-/sqlstring-2.3.1.tgz", @@ -883,6 +1328,16 @@ "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-0.1.2.tgz", "integrity": "sha1-gIudDlb8Jz2Am6VzOOkpkZoanxo=" }, + "string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "requires": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + } + }, "string_decoder": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", @@ -891,6 +1346,33 @@ "safe-buffer": "~5.1.0" } }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=" + }, + "tar": { + "version": "4.4.13", + "resolved": "https://registry.npmjs.org/tar/-/tar-4.4.13.tgz", + "integrity": "sha512-w2VwSrBoHa5BsSyH+KxEqeQBAllHhccyMFVHtGtdMpF4W7IRWfZjFiQceJPChOeTsSDVUpER2T8FA93pr0L+QA==", + "requires": { + "chownr": "^1.1.1", + "fs-minipass": "^1.2.5", + "minipass": "^2.8.6", + "minizlib": "^1.2.1", + "mkdirp": "^0.5.0", + "safe-buffer": "^5.1.2", + "yallist": "^3.0.3" + } + }, "toidentifier": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", @@ -910,6 +1392,11 @@ "mime-types": "~2.1.24" } }, + "typedarray": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", + "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=" + }, "unpipe": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", @@ -946,6 +1433,14 @@ "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=" }, + "wide-align": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz", + "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==", + "requires": { + "string-width": "^1.0.2 || 2" + } + }, "wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", @@ -974,6 +1469,16 @@ "version": "0.0.27", "resolved": "https://registry.npmjs.org/xpath/-/xpath-0.0.27.tgz", "integrity": "sha512-fg03WRxtkCV6ohClePNAECYsmpKKTv5L8y/X3Dn1hQrec3POx2jHZ/0P2qQ6HvsrU1BmeqXcof3NGGueG6LxwQ==" + }, + "xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==" + }, + "yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==" } } } diff --git a/package.json b/package.json index fe9ecba..fdd32ec 100644 --- a/package.json +++ b/package.json @@ -13,10 +13,14 @@ "author": "George", "license": "ISC", "dependencies": { + "bcrypt": "^5.0.0", "connect-busboy": "0.0.2", "cors": "^2.8.5", "dotenv": "^8.2.0", "express": "^4.17.1", + "express-fileupload": "^1.2.0", + "jsonwebtoken": "^8.5.1", + "multer": "^1.4.2", "mysql": "^2.18.1", "node-xlsx": "^0.15.0", "nodemailer": "^6.4.13", diff --git a/routes/actualizarLibro.js b/routes/actualizarLibro.js new file mode 100644 index 0000000..cce2944 --- /dev/null +++ b/routes/actualizarLibro.js @@ -0,0 +1,233 @@ +const connection = require('../conf/connection.js');; +const express = require('express'); +const fileUpload = require('express-fileupload'); +var path = require('path'); +const fs = require("fs"); +var app = express() +app.use(fileUpload()); + +function query(consulta) { + return new Promise(function(resolve, reject) { + connection.query(`${consulta}`, (error, results, files) => { + if (error) reject(error); + resolve(results); + }); + }) +} + + +function corregir(cad){ + var recor = String.fromCharCode(13); + cad = cad.split(recor); + let nuevocad=""; + for(let i=0; i { + let data = req.body; + if(req.body.type==='addLibro'){ + if(req.body.seccion === 'datos'){ + console.log('entro a datos', req.body); + try{ + let titulo = corregir(data.titulo); + let autor = corregir(data.autor); + let categoria = data.categoria; + let paginas = data.paginas; + let isbn = data.isbn; + let precio = data.precio; + let edicion = corregir(data.edicion); + let year = data.year; + let descripcion = corregir(data.descripcion); + let version = data.version; + let sqlInsertString = `INSERT INTO Libro values ( null, '${isbn}' , '${titulo}', '${categoria}', '${autor}', ${paginas}, '${edicion}', '${precio}', '${version}', '${descripcion}', ${year}); `; + let idLibro = null; + await query(sqlInsertString); + let sqlString = `SELECT LAST_INSERT_ID() as idLibro;`; + let sqlAnswer = await query(sqlString); + idLibro = sqlAnswer[0].idLibro; + res.status(200).json({error: false, msj: 'Datos guardados', value: true, idLibro: idLibro}); + return; + } + catch (error){ + console.log(error); + res.status(400).json({error: true, mensaje: 'Ocurrio un error al guardar en la BD', descripcion: error, value: false}); + return; + } + } + + if (req.body.seccion === 'imagen'){ + console.log('entro a imagen', req.body); + if (req.files === null || req.files.imagen===null) + { + res.status(400).json({error: true, msj: `No se pudo cargar los archivos de imagen y pdf`, value: false}); + return; + } + try{ + let idLibro = req.body.idLibro; + let imagen = req.files.imagen; + let stringUpdate = `INSERT INTO Imagen values (null, ${idLibro}, '${imagen.name}' )`; + await query(stringUpdate); + imagen.mv( path.join('.', `/routes/imagenLibro/${imagen.name}`), function(err) { + if (err) return res.status(400).json({ error: true, msj: "Error al guardar la imagen del libro", value: false }); + }); + res.status(200).json({error: false, msj: 'Se agrego con exito el libro', value: true}); + return; + } + catch (error){ + console.log(error); + res.status(400).json({error: true, mensaje: 'Ocurrio un error al guardar en la BD', descripcion: error, value: false}); + return; + } + } + + if(req.body.seccion === 'pdf'){ + console.log('entro a pdf', req.body); + if (req.files === null || req.files.pdf===null) + { + res.status(400).send(`No se pudo cargar los archivos de imagen y pdf`); + return; + } + try{ + let idLibro = req.body.idLibro; + let pdf = req.files.pdf; + stringUpdate = `INSERT INTO Visualizacion values (null, ${idLibro}, '${pdf.name}' );`; + await query(stringUpdate); + pdf.mv( path.join('.', `/routes/pdf/${pdf.name}`), function(err) { + if (err) return res.status(400).json({ error: true, msj: "Error al guardar el pdf del libro", value: false }); + }); + res.status(200).json({error: false, msj: 'Se agrego con exito el libro', value: true}); + return; + } + catch (error){ + console.log(error); + res.status(400).json({error: true, mensaje: 'Ocurrio un error al guardar en la BD', descripcion: error, value: false}); + return; + } + } + + res.status(200).json({error: false, msj: 'termino'}); + return; + } + else{ + console.log('entro a actulizar: '); + console.log('archivos', req.files); + console.log('datos', req.body) + + if(typeof(data.idLibro) === 'undefined'){ + res.status(400).json({error: true, msj: 'Falta el Id del libro como parametro'}); + return; + } + try{ + let stringUpdate = `Update Libro set `; + let con=0; + if ( typeof(data.titulo) !== 'undefined'){ + stringUpdate += `titulo = '${data.titulo}'`; + con++; + } + if ( typeof(data.autor) !== 'undefined'){ + stringUpdate = (con>0) ? `${stringUpdate},`: stringUpdate; + stringUpdate += ` autor = '${data.autor}'`; + con++; + } + if ( typeof(data.categoria) !== 'undefined'){ + stringUpdate = (con>0) ? `${stringUpdate},`: stringUpdate; + stringUpdate += ` categoria = '${data.categoria}'`; + con++; + } + if ( typeof(data.paginas) !== 'undefined'){ + stringUpdate = (con>0) ? `${stringUpdate},`: stringUpdate; + stringUpdate += ` paginas = '${data.paginas}'`; + con++; + } + if ( typeof(data.isbn) !== 'undefined'){ + stringUpdate = (con>0) ? `${stringUpdate},`: stringUpdate; + stringUpdate += ` isbn = '${data.isbn}'`; + con++; + } + if ( typeof(data.precio) !== 'undefined'){ + stringUpdate = (con>0) ? `${stringUpdate},`: stringUpdate; + stringUpdate += ` precio = '${data.precio}'`; + con++; + } + if ( typeof(data.edicion) !== 'undefined'){ + stringUpdate = (con>0) ? `${stringUpdate},`: stringUpdate; + stringUpdate += ` impresion = '${data.edicion}'`; + con++; + } + if ( typeof(data.year) !== 'undefined'){ + stringUpdate = (con>0) ? `${stringUpdate},`: stringUpdate; + stringUpdate += ` year = '${data.year}'`; + con++; + } + if ( typeof(data.descripcion) !== 'undefined'){ + stringUpdate = (con>0) ? `${stringUpdate},`: stringUpdate; + stringUpdate += ` descripcion = '${data.descripcion}'`; + con++; + } + if ( typeof(data.version) !== 'undefined'){ + stringUpdate = (con>0) ? `${stringUpdate},`: stringUpdate; + stringUpdate += ` version = '${data.version}'`; + } + + stringUpdate += ` where idLibro = ${data.idLibro};`; + + try{ + if(con>0) + await query(stringUpdate); + } + catch (error){ + console.log(error); + res.status(400).json({error: true, msj: 'Error al actualizar en la base de datos '}); + return; + } + + + if (req.files !== null && req.files.imagen !== undefined) { + let imagen = req.files.imagen; + console.log(imagen); + let stringUpdate =`Update Imagen set ruta = "${imagen.name}" where idLibro = ${data.idLibro};`; + console.log(stringUpdate) + let answerUpdata = await query(stringUpdate); + console.log(answerUpdata); + imagen.mv( path.join('.', `/routes/imagenLibro/${imagen.name}`), function(err) { + if (err){ + console.log(err); + return res.status(400).json({ error: true, msj: "Error al guardar la imagen del libro" }); + } + }); + } + + if (req.files !== null && req.files.pdf !== undefined) { + let pdf = req.files.pdf; + stringUpdate = `Update Visualizacion set ruta = "${pdf.name}" where idLibro = ${data.idLibro};`; + await query(stringUpdate); + pdf.mv( path.join('.', `/routes/pdf/${pdf.name}`), function(err) { + if (err) { + console.log(err); + return res.status(400).json({ error: true, msj: "Error al guardar el pdf del libro" }); + } + }); + } + res.status(200).json({error: false, msj: 'Se agrego con exito el libro'}); + return; + } + catch(error){ + console.log(error); + res.status(400).json({error: true, msj: 'Sucedio un error al Actualizar el libro', desc: error}); + return; + } + } +}); + +module.exports = app; + + + diff --git a/routes/agregarImagenCarrusel.js b/routes/agregarImagenCarrusel.js new file mode 100644 index 0000000..96be98f --- /dev/null +++ b/routes/agregarImagenCarrusel.js @@ -0,0 +1,29 @@ +const express = require('express') +var app = express(); +var fs = require('fs'); +var path = require('path'); + +app.post('/agregarImagenCarrusel', async(req, res) => { + console.log(req.body); + try{ + req.pipe(req.busboy); + req.busboy.on('file',async function (fieldname, file, filename) { + try{ + let saveTo = path.join('.', `/routes/imagenesCarrusel/${filename}`); + file.pipe(fs.createWriteStream(saveTo)); + } + catch(error){ + console.log(error);res.status(400).json({error: true, msj: `No se pudo guardar la imagen`}); + return; + } + }); + res.status(200).json({error: false, msj: `Se inserto con exito`}); + return; + } + catch(error){ + console.log(`No se pudo guardar la imagen`); + res.status(400).json({error: true, msj: `No se pudo cargar el libro`}); + return; + } +}); +module.exports = app diff --git a/routes/agregarLibro.js b/routes/agregarLibro.js new file mode 100644 index 0000000..4f70fd6 --- /dev/null +++ b/routes/agregarLibro.js @@ -0,0 +1,119 @@ + +const connection = require('../conf/connection.js');; +const express = require('express'); +const fileUpload = require('express-fileupload'); +var path = require('path'); +const nodemailer = require("nodemailer"); +const fs = require("fs"); +const { commit } = require('../conf/connection.js'); +var app = express() +app.use(fileUpload()); + + +function query(consulta) { + return new Promise(function(resolve, reject) { + connection.query(`${consulta}`, (error, results, files) => { + if (error) reject(error); + resolve(results); + }); + }) +} + + +function corregir(cad){ + var recor = String.fromCharCode(13); + cad = cad.split(recor); + let nuevocad=""; + for(let i=0; i { + console.log('archivos: ',req.files); + // console.log(req.body); + let data = req.body; + + if (req.files===null) + { + res.status(400).json({error: true, msj: `No se pudo cargar los archivos de imagen y pdf`}); + return; + } + if (req.files.imagen===null) + { + res.status(400).json({error: true, msj: `No se pudo cargar el archivo de la imagen`}); + return; + } + if (req.files.pdf===null) + { + res.status(400).json({error: true, msj: `No se pudo cargar el archivo del pdf`}); + return; + } + try{ + + let titulo = corregir(data.titulo); + let autor = corregir(data.autor); + let categoria = data.categoria; + let paginas = data.paginas; + let isbn = data.isbn; + let precio = data.precio; + let edicion = corregir(data.edicion); + let year = data.year; + let descripcion = corregir(data.descripcion); + let version = data.version; + let sqlInsertString = `INSERT INTO Libro values ( null, '${isbn}' , '${titulo}', '${categoria}', '${autor}', ${paginas}, '${edicion}', '${precio}', '${version}', '${descripcion}', ${year}); `; + let idLibro = null; + try{ + + await query(sqlInsertString); + let sqlString = `SELECT LAST_INSERT_ID() as idLibro;`; + let sqlAnswer = await query(sqlString); + idLibro = sqlAnswer[0].idLibro; + } + catch (error){ + console.log(error); + res.status(400).json({error: true, mensaje: 'Ocurrio un error al guardar en la BD', descripcion: error}); + return; + } + if (req.files!==null && req.files.imagen !== null) { + let imagen = req.files.imagen; + console.log(imagen); + let stringUpdate = `INSERT INTO Imagen values (null, ${idLibro}, '${imagen.name}' )`; + console.log(stringUpdate) + await query(stringUpdate); + imagen.mv( path.join('.', `/routes/imagenLibro/${imagen.name}`), function(err) { + if (err) return res.status(400).json({ error: true, msj: "Error al guardar la imagen del libro" }); + }); + } + + if (req.files!==null && req.files.pdf !== null) { + let pdf = req.files.pdf; + stringUpdate = `INSERT INTO Visualizacion values (null, ${idLibro}, '${pdf.name}' );`; + await query(stringUpdate); + pdf.mv( path.join('.', `/routes/pdf/${pdf.name}`), function(err) { + if (err) return res.status(400).json({ error: true, msj: "Error al guardar el pdf del libro" }); + }); + res.status(200).json({error: false, msj: 'Se agrego con exito el libro'}); + return; + } + } + catch (error){ + console.log(error); + res.status(400).json({error: true, msj: `No se pudo agregar el libro`, desc: error}); + console.log(`Ocurrio un error al insertar en la base de datos msj: ${error}`); + return; + } + res.status(200).json({error: false, msj: 'Se agrego con exito el libro'}); + return; +}); + +module.exports = app; + + + diff --git a/routes/cargaLibro.js b/routes/cargaLibro.js index b51f347..8f8a8b0 100644 --- a/routes/cargaLibro.js +++ b/routes/cargaLibro.js @@ -36,8 +36,6 @@ function corregir(cad){ } return nuevocad; - - } diff --git a/routes/checkToken.js b/routes/checkToken.js new file mode 100644 index 0000000..2be1188 --- /dev/null +++ b/routes/checkToken.js @@ -0,0 +1,39 @@ +const express = require('express'); +const jtw = require('jsonwebtoken'); +const { beginTransaction } = require('../conf/connection'); + +var app = express() + + +function verifyToken(req, res, next){ + console.log(JSON.stringify(req.headers)); + const bearerHeader = req.headers['authorization']; + console.log(bearerHeader); + if(typeof bearerHeader !== 'undefined'){ + const bearerToken = bearerHeader.split(" ")[1]; + req.token = bearerToken; + next(); + } + else{ + res.sendStatus(403); + return; + } +} + +app.post('/checkToken', verifyToken ,(req, res) => { + console.log(req.body); + jtw.verify(req.body.token, 'key',{expiresIn: '1h'}, (error, authData)=>{ + if(error){ + res.sendStatus(403); + } + else{ + res.json({ + mjs: 'token autenticado', + datos: authData + }); + return; + } + }) +}); + +module.exports = app \ No newline at end of file diff --git a/routes/eliminarImagenCarrusel.js b/routes/eliminarImagenCarrusel.js new file mode 100644 index 0000000..09de611 --- /dev/null +++ b/routes/eliminarImagenCarrusel.js @@ -0,0 +1,28 @@ +const express = require('express') +var app = express(); +var fs = require('fs'); +var path = require('path'); + +app.post('/eliminarImagenCarrusel', async(req, res) => { + + let data = req.body; + if( typeof( data.nombre ) === 'undefined' ){ + res.status(400).json({error: true, msj: 'Falta el nombre de la imagen del carrusel'}); + return; + } + console.log(` Este es el nombre: ${data.nombre}`); + try{ + + let ruta = path.join('.', `/routes/imagenesCarrusel/${data.nombre}`); + fs.unlinkSync(ruta); + res.status(200).json({error: false, msj: 'Imagen Eliminada con exito'}); + return; + } + catch(error){ + console.log(`Este es el error : ${error}`); + res.status(400).json({error: true, msj: 'No se pudo eliminar la imagen', desc: error}); + return; + } + +}); +module.exports = app diff --git a/routes/eliminarLibro.js b/routes/eliminarLibro.js new file mode 100644 index 0000000..5652207 --- /dev/null +++ b/routes/eliminarLibro.js @@ -0,0 +1,67 @@ + +const connection = require('../conf/connection.js');; +const express = require('express'); +const fileUpload = require('express-fileupload'); +var path = require('path'); +const nodemailer = require("nodemailer"); +const fs = require("fs"); +const { commit } = require('../conf/connection.js'); +var app = express() +app.use(fileUpload()); + + +function query(consulta) { + return new Promise(function(resolve, reject) { + connection.query(`${consulta}`, (error, results, files) => { + if (error) reject(error); + resolve(results); + }); + }) + +} + +app.post('/eliminarLibro', async(req, res) => { + + let data = req.body; + + try{ + let sqlSelectImage = `SELECT ruta from Imagen where idLibro = ${data.idLibro};`; + let imageName = await query(sqlSelectImage); + let sqlSelectVizualizacion= `SELECT ruta from Visualizacion where idLibro = ${data.idLibro};`; + let vizualizacionName = await query(sqlSelectVizualizacion); + + let sqlDeleteStrign = `DELETE FROM PdfLibro where idLibro=${data.idLibro};`; + await query(sqlDeleteStrign); + sqlDeleteStrign = `DELETE FROM Imagen where idLibro=${data.idLibro};`; + await query(sqlDeleteStrign); + sqlDeleteStrign = `DELETE FROM Visualizacion where idLibro=${data.idLibro};`; + await query(sqlDeleteStrign); + sqlDeleteStrign = `DELETE FROM Libro where idLibro=${data.idLibro};`; + await query(sqlDeleteStrign); + let rutaVizualizavcion = path.join('.', `/routes/pdf/${vizualizacionName}`); + try{ + vizualizacionName = vizualizacionName[0].ruta; + fs.unlinkSync(rutaVizualizavcion); + } + catch(error){ + console.log(error); + } + let rutaImage = path.join('.', `/routes/imagenLibro/${imageName}`); + try{ + imageName = imageName[0].ruta; + fs.unlinkSync(rutaImage); + } + catch(error){ + console.log(error); + } + res.status(200).json({error: false, msj: 'Imagen Eliminada con exito'}); + return; + } + catch(error){ + console.log(`Este es el error : ${error}`); + res.status(400).json({error: true, msj: 'No se pudo eliminar la libro', desc: error}); + return; + } + +}); +module.exports = app diff --git a/routes/getLibros.js b/routes/getLibros.js index 8042bf1..121e86c 100644 --- a/routes/getLibros.js +++ b/routes/getLibros.js @@ -19,12 +19,9 @@ function query(consulta) { app.get('/getLibros', async(req, res) => { try{ - let sqlString = `SELECT idLibro, titulo, categoria, autor FROM Libro;`; - console.log(` Esta es la cadena : ${sqlString}`); - let respuestaSql = await query(sqlString); - - - + let sqlString = `SELECT idLibro, titulo, categoria, autor FROM Libro;`; + //console.log(` Esta es la cadena : ${sqlString}`); + let respuestaSql = await query(sqlString); res.status(200).json({error:false, msj: 'exito', data: respuestaSql}) } catch(error){ diff --git a/routes/getTodosLibros.js b/routes/getTodosLibros.js new file mode 100644 index 0000000..dad2c65 --- /dev/null +++ b/routes/getTodosLibros.js @@ -0,0 +1,32 @@ +const connection = require('../conf/connection.js'); +const express = require('express') +var app = express(); + + + + +function query(consulta) { + return new Promise(function(resolve, reject) { + connection.query(`${consulta}`, (error, results, files) => { + if (error) reject(error); + resolve(results); + }); + }) +} + + + +app.get('/getTodosLibros', async(req, res) => { + + try{ + let sqlString = `SELECT * FROM Libro ORDER BY year DESC;`; + let respuestaSql = await query(sqlString); + res.status(200).json({error:false, msj: 'exito', data: respuestaSql}) + } + catch(error){ + res.status(400).json({error: true, msj: 'No se pudo obtener los libros similares', desc: error}); + return; + } + +}); +module.exports = app; diff --git a/routes/imagenesCarrusel/imagen1.png b/routes/imagenesCarrusel/imagen1.png deleted file mode 100644 index 4494197..0000000 Binary files a/routes/imagenesCarrusel/imagen1.png and /dev/null differ diff --git a/routes/index.js b/routes/index.js index 7e3ff11..1347082 100644 --- a/routes/index.js +++ b/routes/index.js @@ -12,5 +12,12 @@ app.use(require('./getLibros')); app.use(require('./temaLibro')); app.use(require('./getPDF')); app.use(require('./email')); - +app.use(require('./eliminarImagenCarrusel')); +app.use(require('./agregarImagenCarrusel')); +app.use(require('./actualizarLibro')); +app.use(require('./getTodosLibros')); +app.use(require('./agregarLibro')); +app.use(require('./eliminarLibro')); +app.use(require('./checkToken')); +app.use(require('./loginAdmin')); module.exports = app; \ No newline at end of file diff --git a/routes/libroImagen.js b/routes/libroImagen.js index 2ff8cdd..cab8a1b 100644 --- a/routes/libroImagen.js +++ b/routes/libroImagen.js @@ -19,27 +19,22 @@ function query(consulta) { app.get('/libroImagen', async(req, res) => { - console.log(`Entro a imagenes`); - let data = req.query; if( typeof( data.idLibro ) === 'undefined' ){ res.status(400).json({error: true, msj: 'Falta el ID del libro como parametro'}); return; } - console.log(` Este es el id: ${data.idLibro}`); + //console.log(` Este es el id: ${data.idLibro}`); try{ let sqlString = `SELECT * from Imagen where idLibro=${data.idLibro}`; - console.log(` Esta es la cadena : ${sqlString}`); + //console.log(` Esta es la cadena : ${sqlString}`); let respuestaSql = await query(sqlString); if(respuestaSql.length === 0 ){ - console.log(`No se encontro el libro msj:`); + //console.log(`No se encontro el libro msj:`); res.status(400).json({error: true, msj: 'No se encontro el libro solicitado'}); return; } respuestaSql = respuestaSql[0]; - console.log(` esta es la respuesta ${respuestaSql}`); - for(let key in respuestaSql) - console.log(` __ ${key} : ${respuestaSql[key]}`); let img = fs.readFileSync(path.join('.', `/routes/imagenLibro/${respuestaSql.ruta}`)); res.writeHead(200, {'Content-Type': 'image/jpg' }); res.end(img, 'binary') diff --git a/routes/loginAdmin.js b/routes/loginAdmin.js new file mode 100644 index 0000000..2fe5985 --- /dev/null +++ b/routes/loginAdmin.js @@ -0,0 +1,84 @@ +const connection = require('../conf/connection.js'); +const express = require('express'); +const bcrypt = require('bcrypt'); +const jtw = require('jsonwebtoken'); + +var app = express() + +function query(consulta) { + return new Promise(function(resolve, reject) { + connection.query(`${consulta}`, (error, results, files) => { + if (error) reject(error); + resolve(results); + }); + }) +} + +function depurado(cadena) { + if (cadena != null) { + cadena = cadena.replace(/'/g, "''"); + cadena = cadena.replace(/;/g, "m"); + return cadena; + + } else + return null; +} + + +app.post('/loginAdmin', async(req, res) => { + if(typeof req.body.usuario === 'indefined' || typeof req.body.password === 'undefined'){ + res.status(400).json({ error: false, msj: "Falta usuario o contraseña como parametros" }); + return; + } + console.log(req.body); + try { + let data = req.body; + let usuario = depurado(data.usuario); + let cad = `select * from Admin where usuario='${usuario}'`; + let respuesta = query(cad); + let pass = data.password; + let n_pasword = await bcrypt.hash(pass, 10); + console.log(n_pasword); + respuesta.then(async response => { + console.log(response, response.length); + if (response.length == 0) { + res.status(400).json({ error: false, msj: "Usuario o contraseña invalidos" }); + return; + } else { + let ban = bcrypt.compareSync(data.password, response[0].password); + if (ban == true) { + + const usuario = { + idAdmin : response[0].idAdmin, + user: response[0].nombre, + } + jtw.sign({user: usuario}, 'key', (err, token)=>{ + if(err){ + res.status(400).json({ error: false, msj: "No se pudo auntentificar" }); + return; + } + + res.status(200).json({ error: false, msj: "bienvenido", token, entro: true }); + return; + }) + + } else { + res.status(400).json({ error: false, msj: "Usuario o contraseña invalidos" }); + return; + } + } + + }).catch(err => { + res.status(400).json({ error: true, msj: err }); + return; + }) + + } catch (err) { + console.log("error al autentificar: ", err); + res.status(400).json({ error: true, msj: err }); + return; + } + +}); + +module.exports = app \ No newline at end of file diff --git a/sql/scrpt.sql b/sql/scrpt.sql index 6904d59..bb0ce11 100644 --- a/sql/scrpt.sql +++ b/sql/scrpt.sql @@ -48,8 +48,8 @@ CREATE TABLE `Compra` ( CREATE TABLE `Admin` ( `idAdmin` integer PRIMARY KEY NOT NULL AUTO_INCREMENT, - `usuario` varchar(100), - `password` varchar(350) + `usuario` varchar(100), + `password` varchar(350) ); ALTER TABLE `Imagen` ADD FOREIGN KEY (`idLibro`) REFERENCES `Libro` (`idLibro`); @@ -61,3 +61,10 @@ ALTER TABLE `Compra` ADD FOREIGN KEY (`idLibro`) REFERENCES `Libro` (`idLibro`); ALTER TABLE `Video` ADD FOREIGN KEY (`idLibro`) REFERENCES `Libro` (`idLibro`); ALTER TABLE `PdfLibro` ADD FOREIGN KEY (`idLibro`) REFERENCES `Libro` (`idLibro`); + + +ALTER TABLE 'Libro' ADD nombre varchar(100); + +-- "password": "p0rtal4dmin2021" +INSERT INTO Admin values (null, 'PotalEditAdmin', '$2b$10$0GeS8v9lUwhOHOS/2MoBIuJusNdM1Zi7SD.asnQrsyWA9oOTd9.YK', 'Administrador'); +