Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Signup form with Vipps payment #16

Merged
merged 55 commits into from
Mar 20, 2024
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
Show all changes
55 commits
Select commit Hold shift + click to select a range
1e2541d
add header
sverrejb Jul 31, 2023
0307d49
started on form
sverrejb Aug 1, 2023
6ec6349
form actions, buttons etc
sverrejb Aug 1, 2023
b810323
add icon
sverrejb Aug 1, 2023
47ddd9d
return values on actions
sverrejb Aug 1, 2023
3804324
css and stuff
sverrejb Aug 1, 2023
e530bc7
icon on card button
sverrejb Aug 1, 2023
3ec14f0
slight refactor
sverrejb Aug 1, 2023
7d8f519
h2
sverrejb Aug 1, 2023
dca7cb6
add tnc component
sverrejb Aug 1, 2023
925ff42
fix derp on success
sverrejb Aug 1, 2023
e2714c3
remove unused selector
sverrejb Aug 2, 2023
840aff9
kinda works with google
sverrejb Aug 2, 2023
45bedfa
refactoring?
sverrejb Aug 3, 2023
95cfe3f
blahblah
sverrejb Aug 3, 2023
9760bdb
started on return endpoint
sverrejb Aug 3, 2023
abab5fb
add missing file
sverrejb Aug 3, 2023
9b2e143
started on crypto
sverrejb Aug 30, 2023
f8f2cc7
started on crypto
sverrejb Aug 30, 2023
ea182b5
encryption from env variables
sverrejb Aug 30, 2023
fa2909e
minor crypto refactor
sverrejb Aug 30, 2023
e6a6ec9
google sheet idempotency
sverrejb Aug 31, 2023
e6b7dc1
fix ts shit
sverrejb Aug 31, 2023
0c367af
small error log change
sverrejb Aug 31, 2023
d4117a2
some error handling and graphics
sverrejb Aug 31, 2023
cde377d
some refactor
sverrejb Sep 1, 2023
361ded6
no idea what i am doing
sverrejb Sep 12, 2023
cc8dd9a
updating stuff works
sverrejb Sep 20, 2023
3430e0f
rebase and fix
sverrejb Jan 30, 2024
035363a
delete a paragraph of placeholder
sverrejb Jan 31, 2024
67a54ec
disable prerendering nonstatic page
sverrejb Jan 31, 2024
3ea7adf
update error message
sverrejb Jan 31, 2024
b404fae
cleanup after rebase
sverrejb Feb 21, 2024
cff0ae7
update tnc
sverrejb Feb 21, 2024
acca0c8
more tnc
sverrejb Feb 22, 2024
45522a5
try current node
sverrejb Feb 22, 2024
303c97a
try old node
sverrejb Feb 22, 2024
3ab5480
18.0.0
sverrejb Feb 22, 2024
7b7aa06
18.13.0
sverrejb Feb 22, 2024
0030c85
fuck web development
sverrejb Feb 22, 2024
9b7d3c2
remove placeholder text
sverrejb Feb 22, 2024
7d44648
further vipps integration
sverrejb Mar 17, 2024
68cc978
vipps happy path ish working
sverrejb Mar 18, 2024
a1219cb
capture sort of works
sverrejb Mar 18, 2024
cdc8137
nok for i dag
sverrejb Mar 18, 2024
8c1979e
some cleanup
sverrejb Mar 18, 2024
491ad04
clean more
sverrejb Mar 18, 2024
b72179c
add name to welcome page
sverrejb Mar 19, 2024
642fa39
only capture uncaptured payments
sverrejb Mar 20, 2024
6593f1d
read membership data from config file
sverrejb Mar 20, 2024
ad8ca4d
read membership from config data in vipps module
sverrejb Mar 20, 2024
a900eb5
some cleanup and refactoring
sverrejb Mar 20, 2024
e9c6cd0
comments and timeout
sverrejb Mar 20, 2024
72791fc
delete weird timestamp files
sverrejb Mar 20, 2024
46c4d20
remove unneeded dep
sverrejb Mar 20, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
google sheet idempotency
  • Loading branch information
sverrejb committed Feb 21, 2024
commit e6a6ec9e37873972f8fc6b8d9dce28bc4a88e3b8
32 changes: 28 additions & 4 deletions src/lib/utils/googleSheets.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import { google } from "googleapis";
import { GOOGLE_SHEETS_KEY, GOOGLE_SHEETS_EMAIL, GOOGLE_SHEETS_ID } from '$env/static/private';

export async function saveMemberToGoogleSheet(name: string, email: string, membershipType: string) {
export async function saveMemberToGoogleSheet(id: string, name: string, email: string, membershipType: string) {
let jwtClient = new google.auth.JWT(
GOOGLE_SHEETS_EMAIL,
null,
Expand All @@ -22,24 +22,48 @@ export async function saveMemberToGoogleSheet(name: string, email: string, membe
let sheets = google.sheets('v4');

let data = [
[name, email, membershipType, new Date()]
[id, name, email, membershipType, new Date()]
];

const body = {
values: data,
};

// Check if data already exists
const range = "raw_data!A:E";
const existingData = await sheets.spreadsheets.values.get({
auth: jwtClient,
spreadsheetId: GOOGLE_SHEETS_ID,
range,
});

if (existingData) {
const existingValues = existingData.data.values;

// Check if data already exists in the spreadsheet based on the ID field
const exists = existingValues.some((row) => {
const [existingId] = row;
return existingId === id;
});

// Skip append if data already exists
if (exists) {
console.log("Data already exists in spreadsheet");
return;
}
}

sheets.spreadsheets.values.append({
auth: jwtClient,
spreadsheetId: GOOGLE_SHEETS_ID,
range: "raw_data!A2:D2",
range: "raw_data!A2:E2",
valueInputOption: "RAW",
resource: body
}, function (err, response) {
if (err) {
console.log('The API returned an error: ' + err);
} else {
console.log(response);
console.log('Data saved to google sheet: ' + data);
}
});

Expand Down
13 changes: 5 additions & 8 deletions src/routes/membership/+page.server.js
Original file line number Diff line number Diff line change
@@ -1,24 +1,20 @@
/** @type {import('./$types').Actions} */
import { redirect } from '@sveltejs/kit';
import { ENCRYPTION_KEY, INITIALIZATION_VECTOR } from '$env/static/private';


import { saveMemberToGoogleSheet } from "$lib/utils/googleSheets";
// @ts-ignore
import { ENCRYPTION_KEY, INITIALIZATION_VECTOR } from '$env/static/private';

// @ts-ignore
const prices = { year: 330, year_reduced: 220, semester: 215, semester_reduced: 150 };






async function encryptFormData(formData) {
const name = formData.get("name").toString();
const email = formData.get("email").toString();
const membershipType = formData.get("membershipType").toString();
const id = formData.get("id").toString();

const json = JSON.stringify({ name, email, membershipType });
const json = JSON.stringify({ id, name, email, membershipType });

const encoder = new TextEncoder();
const encryptionKey = encoder.encode(ENCRYPTION_KEY);
Expand All @@ -39,6 +35,7 @@ export const actions = {
payWithVipps: async (event) => {
console.log("paying with vipps");
const formData = await event.request.formData();
formData.append("id", crypto.randomUUID());
const encryptedFormData = await encryptFormData(formData);


Expand Down
6 changes: 4 additions & 2 deletions src/routes/membership/registrationComplete/+page.server.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
/** @type {import('./$types').PageLoad} */
import { ENCRYPTION_KEY, INITIALIZATION_VECTOR } from '$env/static/private';
import { saveMemberToGoogleSheet } from '$lib/utils/googleSheets';

async function decryptFormData(data) {
const encoder = new TextEncoder();
Expand All @@ -15,8 +16,9 @@ async function decryptFormData(data) {

export async function load({ url }) {
const data: string = url.searchParams.get('data');

const decryptedJson = await decryptFormData(data);

console.log(decryptedJson)
const { id, name, email, membershipType } = decryptedJson;

await saveMemberToGoogleSheet(id, name, email, membershipType);
}