{"_id":"@amn31/ma-crypto-middleware","_rev":"1-71f7027165461f5f7d5302c0ef492910","name":"@amn31/ma-crypto-middleware","dist-tags":{"latest":"1.0.0"},"versions":{"1.0.0":{"name":"@amn31/ma-crypto-middleware","version":"1.0.0","description":"Middleware permettant de sécuriser les données entre Backend & Front","main":"dist/ma-crypto-middleware.js","types":"dist/ma-crypto-middleware.d.ts","scripts":{"test":"ts-node test.ts","build":"tsc --project tsconfig-build.json"},"keywords":["middleware","front","backend","angular","nodejs","crypto","compress"],"author":{"name":"Alain M."},"license":"MIT","devDependencies":{"@types/crypto-js":"^4.0.2","@types/node":"^16.11.12","typescript":"^4.5.3"},"dependencies":{"crypto-js":"^4.1.1"},"gitHead":"eb99a311e1c3dfc4109298bcdc80b14a8da22c17","_id":"@amn31/ma-crypto-middleware@1.0.0","_nodeVersion":"16.13.0","_npmVersion":"8.1.0","dist":{"integrity":"sha512-hxrcZE3NrZrwh015MMYWJfnfiZlXblUA27s0GTto9Dg277X0m0Yl0wfdbkl2DoQ3IZBL85FkVrTVHfjRnbWdsw==","shasum":"7dbc38d5b2f252774c51697b1d25403d6e6f87ac","tarball":"https://registry.npmjs.org/@amn31/ma-crypto-middleware/-/ma-crypto-middleware-1.0.0.tgz","fileCount":10,"unpackedSize":60557,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhxd2wCRA9TVsSAnZWagAA+00P+gJRQw8BL+bsj+AhYMlq\nxVPsDRoqdg3GZ0FpfsIvjPeF32T1c2ZX11SIILsxX/YrgXl0K6PtE79LrgcR\nzNjSZ4/rUAsGELR0QSh4FF5Wfn1buW3SpKcTbu8NT9tqvFP8U76RQyfbMbVT\nbSi4p7/lCpInxTizFaY6aJHUKpqJoKzMYVPsq+ikSdx7Tlk5TvqEdSeIyYYo\n7sHA0kWKjRLOo/oucq7+FZqxgjIusbrWMFT4LjAyYyMCE9uhwKPb96sMKE1J\nt6oG5EtMGE9AFnQYlpP1MdUEEZwWYGPMRe6Akt8SZ0+vb5dooFQDuGd5GIkO\nbzzmrJD+2KZ2BpXalxXpKo1xabpdHUlIDCZZ94saAG8Af4PIfuuZ5uv0J4w7\nDYLgg+kWaCYbRn1UuBlTpKJm7WaCQo846q5mprXuq/24Z/LkxODuDjcMFM0K\nf5D+733CWSy6KPemyoClsf/PFx69K7yuMI03N9b9A2CEmBQmOUW3YE/bUwsR\nbfmpGJ8aWVZMWE7FAcSHECeH1Npc9oS3jsFeI9ntTN9Nq9Xac3mukCN+gTUq\nd+hyJdeKXDw+gKCf9eHwYnBOZZKYdRdJunghqH587ahWFsmi55OewjBSapLR\nqaVHMJnqlm3Kd1wZBSVnGY/D6WI1tAx+tq2JlSEi2miBUOj8XMOtAJcbskyh\nTqCu\r\n=q1wA\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHZyyeyxFKrrq1BLxCSGISPvviYFcclYDV67msvT/ae7AiEAs3zSCqcTvKjF8jncycNGe6InNeOISUWIlXXrs2iVjQE="}]},"_npmUser":{"name":"amn31t","email":"amn31t@gmail.com"},"directories":{},"maintainers":[{"name":"amn31t","email":"amn31t@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ma-crypto-middleware_1.0.0_1640357296496_0.09178980953505333"},"_hasShrinkwrap":false}},"time":{"created":"2021-12-24T14:48:16.443Z","1.0.0":"2021-12-24T14:48:16.643Z","modified":"2022-04-04T13:50:16.678Z"},"maintainers":[{"name":"amn31t","email":"amn31t@gmail.com"}],"description":"Middleware permettant de sécuriser les données entre Backend & Front","keywords":["middleware","front","backend","angular","nodejs","crypto","compress"],"author":{"name":"Alain M."},"license":"MIT","readme":"# Why crypt your data\r\n\r\nTo exchange data between frontend and backend and to secure your datas, you can use this module.\r\nYou will find an example of middleware to implement in the backend side and an example of interceptor for Angular.\r\n\r\n\r\n# Installation\r\n\r\n```bash\r\n    npm install @amn31/ma-crypto-middleware\r\n```\r\n\r\n# How do data crypt?\r\n\r\n```ts\r\n\r\n    const maCrypto = require(\"@amn31/ma-crypto-middleware\");\r\n\r\n    // Instance MACrypto \r\n    const crypto = new maCrypto.MACrypto({\r\n        secretKey: 'SecurePassword',\r\n        compress: true\r\n    });\r\n\r\n    // Crypt simple data\r\n    var data1 = '_____________ @amn31/ma-crypto-middleware _____________'\r\n    let stringCrypted = crypto.encrypt(data1);\r\n    console.log('Crypted data : ',stringCrypted)\r\n\r\n    // Decrypt\r\n    data1 = crypto.decrypt(stringCrypted);\r\n    console.log('Decrypted data : ',data1)\r\n\r\n    // Crypt a JSON\r\n    let jsonData = {message:'_____________ @amn31/ma-crypto-middleware _____________'}\r\n    stringCrypted = crypto.JSONencrypt(jsonData);\r\n    console.log('JSON crypted data : ',stringCrypted)\r\n    // Decrypt JSON\r\n    jsonData = crypto.JSONdecrypt(stringCrypted);\r\n    console.log('Decrypted data : ',jsonData)\r\n\r\n```\r\n\r\n# Example of usage between Angular & Express\r\n\r\n## Frontend Project (Angular) \r\n\r\nExample of angular interceptor which uses MACrypto for encrypting data before sending\r\n\r\n```ts\r\nimport { Injectable } from '@angular/core';\r\nimport { HttpRequest, HttpHandler, HttpEvent, HttpInterceptor, HttpHeaders } from '@angular/common/http';\r\nimport { Observable } from 'rxjs';\r\n\r\n// We use MACrypto\r\nimport { MACrypto } from '@amn31/ma-crypto-middleware';\r\n\r\n@Injectable()\r\nexport class CryptoInterceptor implements HttpInterceptor {\r\n\r\n    intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {\r\n        console.log('> CryptoInterceptor ' + request.url)\r\n\r\n        // It is possible for some requests not to use MACrypto\r\n        if (request.url == AppConfig.API_URI_AUTHENTICATION) {\r\n            // to custom....\r\n            return next.handle(request);\r\n        } else {\r\n            try {\r\n\r\n                if (AppConfig.ENABLE_CRYPTO) {\r\n                    const c = new MACrypto({\r\n                        // Strong password to exchange between server and client\r\n                        secretKey: 'vOVH1sdmpNWjRRIqCc7rdxs01lwHzfr3'\r\n                    });\r\n\r\n                    if (request.body && request.body.params) {\r\n                        // Encrypted data in a single param 'crypto'\r\n                        let e = c.JSONencrypt(request.body.params)\r\n                        // All parameters are deleted\r\n                        for (var k in request.body.params) {\r\n                            delete request.body.params[k];\r\n                        }\r\n                        // Create param 'crypto'\r\n                        request.body.params['crypto'] = e;\r\n\r\n                    } else {\r\n                        if (request.body) {\r\n                            // Encrypted data in a single param 'crypto'\r\n                            let e = c.JSONencrypt(request.body);\r\n                            // All parameters are deleted\r\n                            for (var k in request.body) {\r\n                                delete request.body[k];\r\n                            }\r\n                            // Create param 'crypto'\r\n                            request.body['crypto'] = e;\r\n                        }\r\n                    }\r\n                }\r\n\r\n            } catch (err) {\r\n                console.log('Error on CryptoInterceptor', err)\r\n            }\r\n        }\r\n        return next.handle(request);\r\n    }\r\n}\r\n```\r\n\r\nDo not forget to add interceptor in \"add.module.ts\" file\r\n\r\n```ts\r\n    import { CryptoInterceptor } from './interceptors/Crypto_interceptor';\r\n\r\n    @NgModule({\r\n        ...\r\n        providers: [\r\n            { provide: HTTP_INTERCEPTORS, useClass: CryptoInterceptor, multi: true },\r\n            ...\t\r\n        ],\r\n        bootstrap: [AppComponent]\r\n\r\n    })\r\n    export class AppModule { }\r\n\r\n```\r\n\r\n## Backend Project (NodeJS)\r\n\r\nExample of server which uses MACrypto (Decrypt)\r\n\r\n```js\r\n  \r\n    //\r\n    const maCrypto = require('@amn31/ma-crypto-middleware');\r\n\r\n    // Express Server\r\n    const app = express();\r\n\r\n    \r\n    const crypto = new maCrypto.MACrypto({\r\n        // Strong password to exchange between server and client\r\n        secretKey: 'vOVH1sdmpNWjRRIqCc7rdxs01lwHzfr3',\r\n        compress: true\r\n    })\r\n\r\n    // Example of middleware which decrypts data of body\r\n    var middlewareCryptoBeforeCors = function (req, res, next) {\r\n        // If 'crypto' parameter exists\r\n        // We have to decrypts datas\r\n        if (req.body) {\r\n            try {\r\n                if (req.body.params && req.body.params['crypto']) {\r\n                    req.body.params = crypto.JSONdecrypt(req.body.params['crypto']);\r\n                } else {\r\n                    if (req.body['crypto']) {\r\n                    req.body = crypto.JSONdecrypt(req.body['crypto']);\r\n                    }\r\n                }\r\n            } catch (e) {\r\n                console.log(\"COULD NOT PARSE crypto\", e);\r\n                return res.status(401).json({\r\n                    message: 'Missing Authorization header'\r\n                });\r\n            }\r\n        }\r\n        next();\r\n    }\r\n    app.use(middlewareCryptoBeforeCors);\r\n    ....\r\n    \r\n```\r\n\r\n\r\n## License\r\n\r\n[MIT](LICENSE)\r\n\r\n[Angular](https://angular.io/)\r\n\r\n","readmeFilename":"README.md"}