diff --git a/.github/workflows/backend-ci.yml b/.github/workflows/backend-ci.yml index 359256a..3bb4ba4 100644 --- a/.github/workflows/backend-ci.yml +++ b/.github/workflows/backend-ci.yml @@ -43,6 +43,14 @@ jobs: distribution: 'temurin' cache: 'maven' + - name: Generate JWT Keys for Testing + run: | + mkdir -p src/main/resources + openssl genrsa -out privateKey.pem 2048 + openssl pkcs8 -topk8 -inform PEM -outform PEM -in privateKey.pem -out src/main/resources/privateKey.pk8 -nocrypt + openssl rsa -in privateKey.pem -pubout -outform PEM -out src/main/resources/publicKey.pem + rm privateKey.pem + - name: Build and Test run: ./mvnw clean verify diff --git a/.gitignore b/.gitignore index 0bd7be6..b0f8192 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,13 @@ .DS_Store -.frontend/agents/ \ No newline at end of file +.frontend/agents/ +target/ +*.class +*.log +.idea/ +.vscode/ +*.swp +*.pem +*.pk8 +node_modules/ +dist/ +.env \ No newline at end of file diff --git a/backend/pom.xml b/backend/pom.xml index 7bcf0e2..cb84385 100644 --- a/backend/pom.xml +++ b/backend/pom.xml @@ -64,7 +64,6 @@ io.quarkus quarkus-smallrye-jwt-build - 3.35.0 io.quarkus diff --git a/backend/src/main/resources/application.properties b/backend/src/main/resources/application.properties index c4318d2..67775e2 100644 --- a/backend/src/main/resources/application.properties +++ b/backend/src/main/resources/application.properties @@ -12,8 +12,8 @@ quarkus.flyway.migrate-at-start=true quarkus.mailer.mock=false # -------------> CONFIGURAÇÕES JWT <------------- -smallrye.jwt.sign.key.location=classpath:privateKey.pk8 -mp.jwt.verify.publickey.location=classpath:publicKey.pem +smallrye.jwt.sign.key.location=${JWT_PRIVATE_KEY_LOCATION:classpath:privateKey.pk8} +mp.jwt.verify.publickey.location=${JWT_PUBLIC_KEY_LOCATION:classpath:publicKey.pem} mp.jwt.verify.issuer=https://flima.dev # -------------> CONFIGURAÇÕES Kafka <------------- diff --git a/backend/src/main/resources/privateKey.pem b/backend/src/main/resources/privateKey.pem deleted file mode 100644 index 811a934..0000000 --- a/backend/src/main/resources/privateKey.pem +++ /dev/null @@ -1,28 +0,0 @@ ------BEGIN PRIVATE KEY----- -MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQDPqqUqUVpj9mMV -C0FFb1sVvYc6YQEMtEimIVvsKp74vaejBPCaWDzf3hG+NJori5WvVmOw2rO5ebD8 -K847sqkxaU69Z1FgdhypfDe8ELsVtkm1y/GXmO54eQo3oIbCfWwPsgsiQ37FIKtM -K+aQ2gJsIHen6QtbYvfoKGj8k+zkt2aguWTccw5MEW9h3hKUo+J/pBV7nQS3Bzho -xZTr7zAlXKNjstDofMgQ3bIu/Ftp4VX2UR3yw+RKC5t87v+wLge/Ru8ZJlSMwwJX -tHytPD5nKG5FuvD3NacSoOVsMrcixJmGawnD88q6U5jy1R2UMjcsgW6uDV2jNcMn -9wr26NJlAgMBAAECggEAAUBUzIQV52HLE0Ki2d6Ty5q0XBHxWW0j9MgFv4XM78dC -M8s6OA64+3cPDWHQQm4gIuDLfTKRTeF6uiLUuNRvulaG/0EYlUDSFVISCp4F57Uf -X6aFaEEL5oVKwspCy1O3W3AjvRs4y0qkbHMujgNi2UdxO2srvhkMGgEe5tORyNCV -KzCiMURK57tm5hqUe5NjbLcgBKGsSC+65fG3UiZzpfHWOETz7D0Zr5M5aw9iESGY -1WwPf1G4BolKu/8rIvfBbZj2McD7pYumeasjeQedVg3gyl97n69n5K2ke1cy7BCs -LA0fi2WooeHgcSS62aHFr9kMGc5NbufMxLHMqSmu2QKBgQDogjq0GnwEs7Cyr+rt -jzRB4N+osq+vAu/VL38BMHAZHXJdpgvHr/bmlNgo6Ufsbo4CDM+mUTkmqZkt5muH -ptTNtj3gUuhGRSdmGD4J6obBsoiFjmuMwq4B3LZ/Ioo2FDEhuNSiS/Th7dNlYniW -DVZEHazC8JhJO8oH0QrjkfmF+QKBgQDkpeGm76HFKbGeD25gfgeaEfdfKrFs2tFv -PigBcocF6zE4uskPz5pTyqkLmZmt4OUBJtwR6ASIQZ2p/dZ6SV3JKxJoTiZdlSOe -iq6AiwoU5RtGZDMfv9IfiqGqZBL5smPOBIvC4sKfp+PxDlzzRtT7bkzATWQpgBD5 -4PYoNLdazQKBgQCXuCswTTvyIYNDBpIpVFIITwIDZh5H+IWhui2JDB+J8/Il8+0p -78QQML5g6+DYAkg+RDfX0paViQQAtKQkT5P7bFkyIUeaWxPbhiQtelFW4fY+GHJL -1tmPM4QOr+46XbC1zZNLGH+CUhuow7nmSGurZSXPywnEd/RcZ2dQmneVmQKBgEU/ -F7//Avc7UVeVRNBkWtkGZ+yieWmGO7d9E5CcptfcCuQrbYkkTpDh56BjvG80lSZs -Jmol4nmBpcY94h7W6Vhrev+r62KcMFVrmr3DXiJF4KTI49LRvUlgKuX3uOd2Z1OV -fN5g3qCLsDTpLK1g3k/nb8ctqRAIgRusTeCPVphhAoGBALh5+qg7Z2+tDi1aFn84 -V1r4CIkujT6h7AIoIgItVDcMnm/I0LUR4377vRUGq4LRlQQ31QDXff2Oq2iyTZ9F -L1N1ceIdE0oopURZV6pR0alkFZvq6qKKbrGqKwWhEAoR5WMvxXZUNWSwbH+QIplK -4xs5IvFJlnsgCn4H4bP0HF1x ------END PRIVATE KEY----- diff --git a/backend/src/main/resources/privateKey.pk8 b/backend/src/main/resources/privateKey.pk8 deleted file mode 100644 index 811a934..0000000 --- a/backend/src/main/resources/privateKey.pk8 +++ /dev/null @@ -1,28 +0,0 @@ ------BEGIN PRIVATE KEY----- -MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQDPqqUqUVpj9mMV -C0FFb1sVvYc6YQEMtEimIVvsKp74vaejBPCaWDzf3hG+NJori5WvVmOw2rO5ebD8 -K847sqkxaU69Z1FgdhypfDe8ELsVtkm1y/GXmO54eQo3oIbCfWwPsgsiQ37FIKtM -K+aQ2gJsIHen6QtbYvfoKGj8k+zkt2aguWTccw5MEW9h3hKUo+J/pBV7nQS3Bzho -xZTr7zAlXKNjstDofMgQ3bIu/Ftp4VX2UR3yw+RKC5t87v+wLge/Ru8ZJlSMwwJX -tHytPD5nKG5FuvD3NacSoOVsMrcixJmGawnD88q6U5jy1R2UMjcsgW6uDV2jNcMn -9wr26NJlAgMBAAECggEAAUBUzIQV52HLE0Ki2d6Ty5q0XBHxWW0j9MgFv4XM78dC -M8s6OA64+3cPDWHQQm4gIuDLfTKRTeF6uiLUuNRvulaG/0EYlUDSFVISCp4F57Uf -X6aFaEEL5oVKwspCy1O3W3AjvRs4y0qkbHMujgNi2UdxO2srvhkMGgEe5tORyNCV -KzCiMURK57tm5hqUe5NjbLcgBKGsSC+65fG3UiZzpfHWOETz7D0Zr5M5aw9iESGY -1WwPf1G4BolKu/8rIvfBbZj2McD7pYumeasjeQedVg3gyl97n69n5K2ke1cy7BCs -LA0fi2WooeHgcSS62aHFr9kMGc5NbufMxLHMqSmu2QKBgQDogjq0GnwEs7Cyr+rt -jzRB4N+osq+vAu/VL38BMHAZHXJdpgvHr/bmlNgo6Ufsbo4CDM+mUTkmqZkt5muH -ptTNtj3gUuhGRSdmGD4J6obBsoiFjmuMwq4B3LZ/Ioo2FDEhuNSiS/Th7dNlYniW -DVZEHazC8JhJO8oH0QrjkfmF+QKBgQDkpeGm76HFKbGeD25gfgeaEfdfKrFs2tFv -PigBcocF6zE4uskPz5pTyqkLmZmt4OUBJtwR6ASIQZ2p/dZ6SV3JKxJoTiZdlSOe -iq6AiwoU5RtGZDMfv9IfiqGqZBL5smPOBIvC4sKfp+PxDlzzRtT7bkzATWQpgBD5 -4PYoNLdazQKBgQCXuCswTTvyIYNDBpIpVFIITwIDZh5H+IWhui2JDB+J8/Il8+0p -78QQML5g6+DYAkg+RDfX0paViQQAtKQkT5P7bFkyIUeaWxPbhiQtelFW4fY+GHJL -1tmPM4QOr+46XbC1zZNLGH+CUhuow7nmSGurZSXPywnEd/RcZ2dQmneVmQKBgEU/ -F7//Avc7UVeVRNBkWtkGZ+yieWmGO7d9E5CcptfcCuQrbYkkTpDh56BjvG80lSZs -Jmol4nmBpcY94h7W6Vhrev+r62KcMFVrmr3DXiJF4KTI49LRvUlgKuX3uOd2Z1OV -fN5g3qCLsDTpLK1g3k/nb8ctqRAIgRusTeCPVphhAoGBALh5+qg7Z2+tDi1aFn84 -V1r4CIkujT6h7AIoIgItVDcMnm/I0LUR4377vRUGq4LRlQQ31QDXff2Oq2iyTZ9F -L1N1ceIdE0oopURZV6pR0alkFZvq6qKKbrGqKwWhEAoR5WMvxXZUNWSwbH+QIplK -4xs5IvFJlnsgCn4H4bP0HF1x ------END PRIVATE KEY----- diff --git a/backend/src/main/resources/publicKey.pem b/backend/src/main/resources/publicKey.pem deleted file mode 100644 index 3c667a8..0000000 --- a/backend/src/main/resources/publicKey.pem +++ /dev/null @@ -1,9 +0,0 @@ ------BEGIN PUBLIC KEY----- -MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAz6qlKlFaY/ZjFQtBRW9b -Fb2HOmEBDLRIpiFb7Cqe+L2nowTwmlg8394RvjSaK4uVr1ZjsNqzuXmw/CvOO7Kp -MWlOvWdRYHYcqXw3vBC7FbZJtcvxl5jueHkKN6CGwn1sD7ILIkN+xSCrTCvmkNoC -bCB3p+kLW2L36Cho/JPs5LdmoLlk3HMOTBFvYd4SlKPif6QVe50Etwc4aMWU6+8w -JVyjY7LQ6HzIEN2yLvxbaeFV9lEd8sPkSgubfO7/sC4Hv0bvGSZUjMMCV7R8rTw+ -ZyhuRbrw9zWnEqDlbDK3IsSZhmsJw/PKulOY8tUdlDI3LIFurg1dozXDJ/cK9ujS -ZQIDAQAB ------END PUBLIC KEY----- diff --git a/backend/src/test/resources/application-test.properties b/backend/src/test/resources/application-test.properties index 9fe1c20..5ae7671 100644 --- a/backend/src/test/resources/application-test.properties +++ b/backend/src/test/resources/application-test.properties @@ -5,7 +5,7 @@ quarkus.flyway.migrate-at-start=true # Mock de Mailer para Testes quarkus.mailer.mock=true -# JWT Test Config +# JWT Test Config (Uses generated RSA keys) mp.jwt.verify.issuer=https://flima.dev # Kafka Resilience Config diff --git a/backend/src/test/resources/application.properties b/backend/src/test/resources/application.properties new file mode 100644 index 0000000..e69de29 diff --git a/frontend/nginx.conf b/frontend/nginx.conf index 02afa27..266f2cf 100644 --- a/frontend/nginx.conf +++ b/frontend/nginx.conf @@ -16,6 +16,14 @@ server { try_files $uri $uri/ /index.html; } + location /api { + proxy_pass http://flima-backend-service:80; + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Proto $scheme; + } + # Cache static assets location ~* \.(?:ico|css|js|gif|jpe?g|png|woff2?|eot|ttf|svg)$ { expires 6M; diff --git a/frontend/package-lock.json b/frontend/package-lock.json index 9d967b0..1aa85ed 100644 --- a/frontend/package-lock.json +++ b/frontend/package-lock.json @@ -10,6 +10,7 @@ "dependencies": { "@reduxjs/toolkit": "^2.11.2", "jwt-decode": "^4.0.0", + "prop-types": "^15.8.1", "react": "^19.2.5", "react-dom": "^19.2.5", "react-redux": "^9.2.0" @@ -3381,7 +3382,6 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "dev": true, "license": "MIT" }, "node_modules/js-yaml": { @@ -3903,6 +3903,18 @@ "dev": true, "license": "MIT" }, + "node_modules/loose-envify": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "license": "MIT", + "dependencies": { + "js-tokens": "^3.0.0 || ^4.0.0" + }, + "bin": { + "loose-envify": "cli.js" + } + }, "node_modules/lowdb": { "version": "7.0.1", "resolved": "https://registry.npmjs.org/lowdb/-/lowdb-7.0.1.tgz", @@ -4220,7 +4232,6 @@ "version": "4.1.1", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", - "dev": true, "license": "MIT", "engines": { "node": ">=0.10.0" @@ -4607,6 +4618,23 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, + "node_modules/prop-types": { + "version": "15.8.1", + "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", + "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", + "license": "MIT", + "dependencies": { + "loose-envify": "^1.4.0", + "object-assign": "^4.1.1", + "react-is": "^16.13.1" + } + }, + "node_modules/prop-types/node_modules/react-is": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", + "license": "MIT" + }, "node_modules/punycode": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", diff --git a/frontend/package.json b/frontend/package.json index 7198a89..3ff7841 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -14,6 +14,7 @@ "dependencies": { "@reduxjs/toolkit": "^2.11.2", "jwt-decode": "^4.0.0", + "prop-types": "^15.8.1", "react": "^19.2.5", "react-dom": "^19.2.5", "react-redux": "^9.2.0" diff --git a/frontend/sonar-project.properties b/frontend/sonar-project.properties index 3b7d450..cbb2b59 100644 --- a/frontend/sonar-project.properties +++ b/frontend/sonar-project.properties @@ -1,7 +1,6 @@ -sonar.projectKey=devflima +sonar.projectKey=devflima_flima.dev_frontend sonar.organization=devflima sonar.sources=src -sonar.tests=src -sonar.test.inclusions=src/**/*.test.js,src/**/*.test.jsx +sonar.tests=src/test sonar.javascript.lcov.reportPaths=coverage/lcov.info -sonar.exclusions=node_modules/**,dist/** +sonar.exclusions=src/test/**, node_modules/**, dist/** diff --git a/frontend/public/logo.svg b/frontend/src/assets/logo.svg similarity index 100% rename from frontend/public/logo.svg rename to frontend/src/assets/logo.svg diff --git a/frontend/src/components/Footer.jsx b/frontend/src/components/Footer.jsx index c47f7fa..4e9e0d9 100644 --- a/frontend/src/components/Footer.jsx +++ b/frontend/src/components/Footer.jsx @@ -3,20 +3,20 @@ export default function Footer() {