diff --git a/.github/workflows/azure-static-web-apps-proud-meadow-082953800.yml b/.github/workflows/azure-static-web-apps-proud-meadow-082953800.yml index b6cb66f..c347510 100644 --- a/.github/workflows/azure-static-web-apps-proud-meadow-082953800.yml +++ b/.github/workflows/azure-static-web-apps-proud-meadow-082953800.yml @@ -33,7 +33,7 @@ jobs: # Pick API URL by branch name - name: Select API base URL run: | - if [ "${{ github.ref_name }}" = "Develop" ]; then + if [ "${{ github.ref_name }}" = "develop" ] || [ "${{ github.ref_name }}" = "Feature" ]; then echo "VITE_API_BASE_URL=${{ secrets.API_URL_STAGING }}" >> $GITHUB_ENV else echo "VITE_API_BASE_URL=${{ secrets.API_URL_PROD }}" >> $GITHUB_ENV diff --git a/.github/workflows/develop_jrfbattendanceappdev.yml b/.github/workflows/develop_jrfbattendanceappdev.yml index b33bb5c..58b607c 100644 --- a/.github/workflows/develop_jrfbattendanceappdev.yml +++ b/.github/workflows/develop_jrfbattendanceappdev.yml @@ -5,7 +5,7 @@ name: Build and deploy API (staging) - JRFBAttendanceAppDev on: workflow_dispatch: push: - branches: [ Develop ] + branches: [ Develop, Feature ] concurrency: group: api-staging-${{ github.ref }} diff --git a/.gitignore b/.gitignore index 35225a2..cde9502 100644 --- a/.gitignore +++ b/.gitignore @@ -2,4 +2,7 @@ .vscode .deployment dist -node_modules \ No newline at end of file +node_modules +.dockerignore +Dockerfile.dev +docker-compose.yml \ No newline at end of file diff --git a/api/src/index.ts b/api/src/index.ts index a557804..10f05b3 100644 --- a/api/src/index.ts +++ b/api/src/index.ts @@ -20,6 +20,7 @@ dotenv.config(); const app = express(); const port = process.env.PORT || 8080; +const isProd = process.env.NODE_ENV === "production"; const DB_NAME = process.env.DB_NAME; const cosmosDbUri = process.env.COSMOS_DB_URI; const sessionStoreUrl = process.env.SESSION_STORE_URL @@ -60,11 +61,12 @@ app.use( resave: false, saveUninitialized: false, proxy: true, + cookie: { - httpOnly: true, - secure: true, - sameSite: 'none', - maxAge: 60 * 60 * 1000, //1 hour + httpOnly: true, + secure: isProd, + sameSite: isProd ? "none" : "lax", + maxAge: 60 * 60 * 1000, //1 hour }, }), ); diff --git a/frontend/src/Pages/Attendance/Non-op-page.jsx b/frontend/src/Pages/Attendance/Non-op-page.jsx index 198dbba..8576765 100644 --- a/frontend/src/Pages/Attendance/Non-op-page.jsx +++ b/frontend/src/Pages/Attendance/Non-op-page.jsx @@ -6,12 +6,8 @@ import {useCsrfToken} from "../../Components/csrfHelper.jsx" import CheckboxContainer from '../../Components/checkboxContainer.jsx' const activities = [ - "Training", "Meeting", - "Maintenance", "Community-Engagement", - "BA-Checks", - "Chainsaw-Checks", "Other-Non-operational" ]; @@ -29,8 +25,6 @@ export default function OperationalPage() { useEffect(() => { if (csrfToken) sessionStorage.setItem("csrf", csrfToken); }, [csrfToken]); - const [baType, setBaType] = useState(""); - const [chainsawType, setChainsawType] = useState(""); const [otherType, setOtherType] = useState("") const [selectedActivity, setSelectedActivity] = useState(sessionStorage.getItem("activity") || ""); const [date, setDate] = useState(""); @@ -61,32 +55,14 @@ export default function OperationalPage() { username = username.replace(/\./g, " "); const activitySelection = 'Non-Operational' - let payloads; - - if (activity === "BA-Checks") { - payloads = - baType === "All Vehicles" - ? ["Cat 1", "Pumper"] - : [baType] - } else if (activity === "Chainsaw-Checks") { - payloads = - chainsawType === "All Vehicles" - ? ["Cat 1", "Pumper", "Cat 9"] - :[chainsawType] - } else{ - payloads = [null] - } try { - let finalresponse; - for (const type of payloads){ + let finalresponse; const data = { name: username, operational: activitySelection, activity, roles: selectedRoles, epochTimestamp: dateObj.getTime(), - ...(activity === "BA-Checks" && { baType: type }), - ...(activity === "Chainsaw-Checks" && { chainsawType: type }), ...(activity === "Other-Non-operational" && { otherType }) } const response = await fetch(`${apiurl}/api/attendance/submit`, { @@ -102,7 +78,6 @@ export default function OperationalPage() { throw new Error("Insert Failed") } finalresponse = response - }; const result = await finalresponse.json(); const message = encodeURIComponent("Attendance logged successfully!"); @@ -133,59 +108,13 @@ export default function OperationalPage() { ))} - {selectedActivity === "BA-Checks" && ( -