feat: WEB-210 Updated as per review comments

This commit is contained in:
Hrishikesh Vaipurkar
2024-07-02 11:53:10 +02:00
parent 1c5859a252
commit d33e038703
5 changed files with 67 additions and 54 deletions

View File

@@ -32,8 +32,11 @@ SEAMLESS_LOGOUT_NO="http://www.example.no/updatelogout?newweb=1"
SEAMLESS_LOGOUT_SV="http://www.example.sv/updatelogout?newweb=1"
WEBVIEW_ENCRYPTION_KEY="MTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTI="
BOOKING_ENCRYPTION_KEY=""
// (WEB-210) Note below both variables are required to Support Legacy encryption
// WEB-210 NodeJS v17+ uses OPENSSL 3.0 in which the encryption algorithm “DES-ECB” is deprecated and
// to enable support NODE_OPTIONS="--openssl-legacy-provider" is required.
NODE_OPTIONS="--openssl-legacy-provider"
// The runtime execution is happening in AWS functions as per Netlify setup, the AWS functions need another variable
// OPENSSL_MODULES="/var/lang/lib/ossl-modules" to enable legacy encryption support.
OPENSSL_MODULES="/var/lang/lib/ossl-modules"
PUBLIC_URL="http://localhost:3000"

View File

@@ -26,7 +26,7 @@ export default async function SoonestStays({
<SectionHeader title={title} subtitle={subtitle} link={link} />
{response.data.length ? (
<Grids.Stackable>
{response.data.map((stay) => (
{response.data.map((stay: any) => (
<StayCard
key={stay.attributes.confirmationNumber}
lang={lang}

View File

@@ -22,7 +22,7 @@ export default function StayCard({ stay, lang }: StayCardProps) {
const departDateTime = depart.format("YYYY-MM-DD")
return (
<Link href={bookingUrl ?? ""}>
<Link href={bookingUrl}>
<article className={styles.stay}>
<Image
className={styles.image}

View File

@@ -61,7 +61,7 @@ export const getStaysSchema = z.object({
checkinDate: z.string(),
checkoutDate: z.string(),
isWebAppOrigin: z.boolean(),
bookingUrl: z.string().optional(),
bookingUrl: z.string().default(""),
}),
relationships: z.object({
hotel: z.object({

View File

@@ -1,3 +1,5 @@
import { env } from "process"
import * as api from "@/lib/api"
import {
protectedProcedure,
@@ -63,6 +65,60 @@ function fakingRequest<T>(payload: T): Promise<T> {
})
}
const updateStaysBookingUrl = async (verifiedData: any, ctx: any) => {
// Tenporary API call needed till we have user name in ctx session data
const apiResponse = await api.get(api.endpoints.v1.profile, {
cache: "no-store",
headers: {
Authorization: `Bearer ${ctx.session.token.access_token}`,
},
})
// Temporary domain and lang support for current web
let localeDomain = env.PUBLIC_URL
let fullBookingUrl = localeDomain + "/hotelreservation/my-booking"
switch (ctx.lang) {
case "sv":
localeDomain = localeDomain?.replace(".com", ".se")
fullBookingUrl = localeDomain + "/hotelreservation/din-bokning"
break
case "no":
localeDomain = localeDomain?.replace(".com", ".no")
fullBookingUrl = localeDomain + "/hotelreservation/my-booking"
break
case "da":
localeDomain = localeDomain?.replace(".com", ".dk")
fullBookingUrl = localeDomain + "/hotelreservation/min-booking"
break
case "fi":
localeDomain = localeDomain?.replace(".com", ".fi")
fullBookingUrl = localeDomain + "/varaa-hotelli/varauksesi"
break
case "de":
localeDomain = localeDomain?.replace(".com", ".de")
fullBookingUrl = localeDomain + "/hotelreservation/my-booking"
break
default:
break
}
if (apiResponse.ok) {
const apiJson = await apiResponse.json()
if (apiJson.data?.attributes) {
verifiedData.data.data.forEach((stay: any) => {
const originalString =
stay.attributes.confirmationNumber.toString() +
"," +
apiJson.data.attributes.lastName
let encryptedBookingValue = encryptValue(originalString)
stay.attributes.bookingUrl =
fullBookingUrl + "?RefId=" + encryptedBookingValue
})
}
}
return verifiedData
}
export const userQueryRouter = router({
get: protectedProcedure
.input(getUserInputSchema)
@@ -213,33 +269,10 @@ export const userQueryRouter = router({
? verifiedData.data.links.offset
: undefined
// Tenporary till we have user name in ctx session data
// ----
const apiResponseUser = await api.get(api.endpoints.v1.profile, {
cache: "no-store",
headers: {
Authorization: `Bearer ${ctx.session.token.access_token}`,
},
})
if (apiResponseUser.ok) {
const apiJsonUser = await apiResponseUser.json()
if (apiJsonUser.data?.attributes) {
verifiedData.data.data.forEach((stay) => {
const originalString =
stay.attributes.confirmationNumber.toString() +
"," +
apiJsonUser.data.attributes.lastName
let bookingUrl = encryptValue(originalString)
stay.attributes.bookingUrl =
"/hotelreservation/my-booking?RefId=" + bookingUrl
})
}
}
// ------------------
const updatedData = await updateStaysBookingUrl(verifiedData, ctx)
return {
data: verifiedData.data.data,
data: updatedData.data.data,
nextCursor,
}
}),
@@ -298,33 +331,10 @@ export const userQueryRouter = router({
? verifiedData.data.links.offset
: undefined
// Tenporary till we have user name in ctx session data
// ----
const apiResponseUser = await api.get(api.endpoints.v1.profile, {
cache: "no-store",
headers: {
Authorization: `Bearer ${ctx.session.token.access_token}`,
},
})
if (apiResponseUser.ok) {
const apiJsonUser = await apiResponseUser.json()
if (apiJsonUser.data?.attributes) {
verifiedData.data.data.forEach((stay) => {
const originalString =
stay.attributes.confirmationNumber.toString() +
"," +
apiJsonUser.data.attributes.lastName
let bookingUrl = encryptValue(originalString)
stay.attributes.bookingUrl =
"/hotelreservation/my-booking?RefId=" + bookingUrl
})
}
}
// ------------------
const updatedData = await updateStaysBookingUrl(verifiedData, ctx)
return {
data: verifiedData.data.data,
data: updatedData.data.data,
nextCursor,
}
}),