Skip to content

Commit bb3227e

Browse files
committed
Merge remote-tracking branch 'origin/main'
# Conflicts: # frontend/src/App.tsx
2 parents 546afb7 + 36ed902 commit bb3227e

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

64 files changed

+1974
-280
lines changed

.github/workflows/main.yaml

+47-13
Original file line numberDiff line numberDiff line change
@@ -12,19 +12,53 @@ jobs:
1212
contents: read
1313
id-token: write
1414
steps:
15-
- uses: actions/checkout@v4
16-
- name: Build and push image and SBOM to OCI registry
17-
uses: nais/docker-build-push@e69b82501b1f6e02ed65607ee4cd714ca43dc010
18-
id: docker-build-push
15+
- name: Checkout
16+
uses: actions/checkout@v4
17+
- id: "auth"
18+
name: "Authenticate to Google Cloud"
19+
uses: "google-github-actions/auth@v2"
1920
with:
20-
team: bachelor-url-forkorter # Replace
21-
identity_provider: ${{ secrets.NAIS_WORKLOAD_IDENTITY_PROVIDER }} # Provided as Organization Secret
22-
project_id: ${{ vars.NAIS_MANAGEMENT_PROJECT_ID }} # Provided as Organization Variable
23-
- name: Deploy to Nais
24-
uses: nais/deploy/actions/deploy@6fdb8f73f1d1e4ec8bf24bd371929cdedb118dbf
21+
workload_identity_provider: ${{ secrets.NAIS_WORKLOAD_IDENTITY_PROVIDER }}
22+
service_account: "gar-bachelor-url-forkorte-51cb@${{ vars.NAIS_MANAGEMENT_PROJECT_ID }}.iam.gserviceaccount.com"
23+
token_format: "access_token"
24+
- name: Set up Docker Buildx
25+
id: buildx
26+
uses: docker/setup-buildx-action@v3
27+
- name: Login to registry
28+
uses: docker/login-action@v3
29+
with:
30+
registry: "europe-north1-docker.pkg.dev/${{ vars.NAIS_MANAGEMENT_PROJECT_ID }}/bachelor-url-forkorter"
31+
username: "oauth2accesstoken"
32+
password: "${{ steps.auth.outputs.access_token }}"
33+
- name: Docker meta
34+
id: meta
35+
uses: docker/metadata-action@369eb591f429131d6889c46b94e711f089e6ca96 # ratchet:docker/metadata-action@v5
36+
with:
37+
images: |
38+
europe-north1-docker.pkg.dev/nais-management-ddba/bachelor-url-forkorter/oslomet-url-forkorter
39+
tags: |
40+
type=sha,prefix={{date 'YYYY.MM.DD-HH.mm'}}-,priority=9002
41+
type=raw,enable=${{ inputs.tag != '' }},value=${{ inputs.tag }},priority=9001
42+
- name: Build and push
43+
uses: docker/build-push-action@48aba3b46d1b1fec4febb7c5d0c644b249a11355 # ratchet:docker/build-push-action@v5
44+
id: build_push
45+
with:
46+
push: true
47+
tags: ${{ steps.meta.outputs.tags }}
48+
labels: ${{ steps.meta.outputs.labels }}
49+
- run: |
50+
wget https://github.com/nais/deploy/releases/download/v2/deploy-linux
51+
chmod +x ./deploy-linux
52+
- run: |
53+
payload=$(curl -H "Authorization: bearer $ACTIONS_ID_TOKEN_REQUEST_TOKEN" "$ACTIONS_ID_TOKEN_REQUEST_URL&audience=hookd")
54+
jwt=$(echo "$payload" | jq -r '.value')
55+
56+
export GITHUB_TOKEN="$jwt"
57+
./deploy-linux
2558
env:
26-
CLUSTER: sandbox # Replace
27-
RESOURCE: .nais/app.yaml # This points to the file we created in the previous step
28-
VAR: image=${{ steps.docker-build-push.outputs.image }}
29-
TELEMETRY: ${{ steps.docker-build-push.outputs.telemetry }}
59+
TZ: "Europe/Oslo"
60+
ACTIONS: "true"
61+
CLUSTER: sandbox
62+
RESOURCE: .nais/app.yaml
63+
VAR: image=${{ fromJSON(steps.meta.outputs.json).tags[0] }}
3064
DEPLOY_SERVER: deploy.test-nais.cloud.nais.io:443

.idea/jarRepositories.xml

+20
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

.idea/kotlinc.xml

+1-1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

.nais/app.yaml

+8-2
Original file line numberDiff line numberDiff line change
@@ -8,11 +8,17 @@ spec:
88
- https://bachelor-url-forkorter.sandbox.test-nais.cloud.nais.io
99
image: {{image}}
1010
port: 8080
11-
ttl: 3h
11+
ttl: 168h
1212
replicas:
1313
max: 1
1414
min: 1
1515
resources:
1616
requests:
1717
cpu: 50m
18-
memory: 32Mi
18+
memory: 32Mi
19+
gcp:
20+
sqlInstances:
21+
- type: POSTGRES_16
22+
tier: db-f1-micro
23+
databases:
24+
- name: postgres-url-forkorter

Rapport beskrivelser

+107
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,107 @@
1+
Rapport beskrivelser underveis:
2+
3+
feat: Legg til forord for bacheloroppgaven
4+
- Inkluderer introduksjon til prosjektet og takk til veiledere og samarbeidspartnere.
5+
6+
feat: Legg til beskrivelse av gruppemedlemmer
7+
- Beskriver hver gruppemedlems bakgrunn og rolle i prosjektet.
8+
9+
feat: Inkluderer beskrivelse av oppdragsgiver (NAV)
10+
- Forklarer NAVs behov for en intern URL-forkortelsestjeneste.
11+
- Beskriver hvordan løsningen vil forbedre informasjonsflyt og sikkerhet.
12+
13+
feat: Legg til veiledere fra OsloMet og NAV
14+
- Inkluderer beskrivelse av veileder fra OsloMet (Andrea Arcuri).
15+
- Inkluderer beskrivelse av veileder fra NAV (Kyrre Havik).
16+
17+
feat: Beskriver hvorfor gruppen valgte denne oppgaven
18+
- Forklarer beslutningsprosessen bak valg av prosjektet.
19+
- Understreker relevans for offentlig sektor og teknologiske utfordringer.
20+
21+
feat: Legg til prosjektmål og beskrivelse
22+
- Definerer hovedmålene for prosjektet og hvordan det skal bidra til NAVs interne infrastruktur.
23+
24+
feat: Definerer problemstilling og delspørsmål
25+
- Inkluderer overordnet problemstilling for utviklingen av URL-forkortelsestjenesten.
26+
- Liste over sentrale underspørsmål for sikkerhet, skalerbarhet og integrasjon.
27+
28+
feat: Beskrivelse av målgruppen
29+
- Definerer primærbrukerne av løsningen, med fokus på NAVs interne ansatte.
30+
31+
feat: Legg til teknologi- og verktøyliste
32+
- Beskriver valg av backend-teknologier (Kotlin, Ktor, PostgreSQL).
33+
- Beskriver frontend-teknologier (React, Redux, Tailwind CSS).
34+
- Inkluderer informasjon om sikkerhet og tilgangsstyring.
35+
- Nevner infrastruktur og distribusjon via NAVs NAIS-plattform.
36+
37+
feat: Inkluderer "Veien videre" for prosjektet
38+
- Beskriver neste steg, inkludert testing, brukeropplæring og videreutvikling.
39+
40+
VIDERE ENDRINGER:
41+
DelKapittel
42+
1.8 Teknologi og verktøy (Foreløpig ikke helt fastsatt)
43+
Beskrivelse av teknologivalgene for backend, frontend, infrastruktur og sikkerhet.
44+
45+
Backend:
46+
Kotlin valgt for sin kompatibilitet med JVM og gode støtte for backend-utvikling.
47+
Javalin brukes for å bygge RESTful API-er.
48+
PostgreSQL valgt som database for produksjon, med H2 for lokal testing.
49+
Logging håndteres med Logback, med planlagt overvåkning via Grafana og Prometheus.
50+
51+
Frontend:
52+
React benyttes for sin komponentbaserte arkitektur.
53+
Tailwind CSS brukes for rask og modulær styling.
54+
Tilstandshåndtering via React Context/Zustand (Redux vurderes).
55+
56+
Infrastruktur og distribusjon:
57+
NAVs NAIS-plattform brukes for hosting og drift av applikasjonen.
58+
CI/CD via GitHub Actions for automatisert testing og utrulling.
59+
60+
Sikkerhet og tilgangsstyring:
61+
OAuth 2.0 / OpenID Connect planlagt for autentisering.
62+
Logging av API-kall for sikkerhet og revisjonssporing.
63+
64+
Kapittel 2: Teknologier og verktøy
65+
Detaljert beskrivelse av hver teknologi og verktøy benyttet i prosjektet.
66+
Backend-teknologier: Kotlin, Ktor, PostgreSQL, OAuth 2.0, Prometheus & Grafana.
67+
Frontend-teknologier: React, Redux (mulig implementering), Tailwind CSS.
68+
Infrastruktur: NAIS-plattform, GitHub Actions for CI/CD.
69+
Sikkerhet: Rate limiting, logging, kryptering for GDPR-overholdelse.
70+
Utviklings- og testverktøy: Postman for API-testing, Docker for containerisering, Jira/Trello for prosjektstyring.
71+
72+
Kapittel 3: Prosessdokumentasjon
73+
3.1 Forord
74+
75+
Gjennomgang av utviklingsprosessen fra idé til ferdig produkt.
76+
Dokumentasjon av teknologivalg, designvalg og implementasjon.
77+
78+
3.2 Metodikk og planlegging
79+
80+
Smidig utviklingsmetodikk inspirert av Scrum.
81+
Sprintplanlegging med standup-møter via Teams/Discord.
82+
GitHub Projects benyttet for oppgavehåndtering med Kanban-brett.
83+
Evaluering og justering etter hver sprint for optimal utviklingsflyt.
84+
85+
3.3 Utviklingsprosessen
86+
87+
Tidlig planlegging:
88+
89+
Backend utviklet først for stabil API-struktur før frontend-integrasjon.
90+
Bruk av databasehåndtering og autentisering via ID-porten vurdert.
91+
UI/UX Design og skisser:
92+
93+
Prototyper laget i Figma med fokus på minimalistisk og intuitivt design.
94+
Responsivt grensesnitt for mobil og desktop.
95+
Utvikling av flyten:
96+
97+
Beskrivelse av hvordan en URL forkortes, lagres og omdirigeres i systemet.
98+
Sekvensdiagrammer for API-flyten mellom frontend og backend.
99+
Databaseutforming:
100+
101+
Beskrivelse av databasevalg (PostgreSQL for produksjon, H2 for testing).
102+
ER-diagram over databasearkitekturen.
103+
Implementering av indeksering for raskere oppslag av korte URL-er.
104+
Systemarkitektur:
105+
106+
Oversikt over frontend-backend-database strukturen.
107+
Bruk av Javalin for API, PostgreSQL for datalagring og Kotlin for backend.

backend/pom.xml

+59-8
Original file line numberDiff line numberDiff line change
@@ -17,12 +17,17 @@
1717
<!-- ===================== -->
1818
<!-- Dependencies -->
1919
<!-- ===================== -->
20-
<kotlin.version>1.9.22</kotlin.version>
21-
<javalin.version>6.1.0</javalin.version>
22-
<jackson.version>2.16.1</jackson.version>
23-
<slf4j-api.version>2.0.11</slf4j-api.version>
20+
<kotlin.version>2.1.10</kotlin.version>
21+
<javalin.version>6.4.0</javalin.version>
22+
<jackson.version>2.18.2</jackson.version>
23+
<slf4j-api.version>2.0.16</slf4j-api.version>
24+
<postgresql.version>42.5.0</postgresql.version>
25+
<hikaricp.version>5.0.1</hikaricp.version>
26+
<exposed.version>0.44.0</exposed.version>
2427
<logback.version>1.5.0</logback.version>
2528
<kotlin-logging.version>3.0.5</kotlin-logging.version>
29+
<jose.version>9.31</jose.version>
30+
<bcrypt.version>0.10.2</bcrypt.version>
2631

2732
<!-- ===================== -->
2833
<!-- Dev dependencies -->
@@ -50,9 +55,55 @@
5055
</dependency>
5156

5257
<dependency>
53-
<groupId>org.slf4j</groupId>
54-
<artifactId>slf4j-api</artifactId>
55-
<version>${slf4j-api.version}</version>
58+
<groupId>at.favre.lib</groupId>
59+
<artifactId>bcrypt</artifactId>
60+
<version>${bcrypt.version}</version>
61+
</dependency>
62+
63+
<dependency>
64+
<groupId>com.nimbusds</groupId>
65+
<artifactId>nimbus-jose-jwt</artifactId>
66+
<version>${jose.version}</version>
67+
</dependency>
68+
69+
<dependency>
70+
<groupId>org.postgresql</groupId>
71+
<artifactId>postgresql</artifactId>
72+
<version>${postgresql.version}</version>
73+
</dependency>
74+
75+
<!-- HikariCP for Connection Pooling -->
76+
<dependency>
77+
<groupId>com.zaxxer</groupId>
78+
<artifactId>HikariCP</artifactId>
79+
<version>${hikaricp.version}</version>
80+
</dependency>
81+
82+
<dependency>
83+
<groupId>org.jetbrains.exposed</groupId>
84+
<artifactId>exposed-core</artifactId>
85+
<version>${exposed.version}</version>
86+
</dependency>
87+
<dependency>
88+
<groupId>org.jetbrains.exposed</groupId>
89+
<artifactId>exposed-dao</artifactId>
90+
<version>${exposed.version}</version>
91+
</dependency>
92+
<dependency>
93+
<groupId>org.jetbrains.exposed</groupId>
94+
<artifactId>exposed-jdbc</artifactId>
95+
<version>${exposed.version}</version>
96+
</dependency>
97+
<dependency>
98+
<groupId>org.jetbrains.exposed</groupId>
99+
<artifactId>exposed-java-time</artifactId>
100+
<version>${exposed.version}</version>
101+
</dependency>
102+
<dependency>
103+
<groupId>com.h2database</groupId>
104+
<artifactId>h2</artifactId>
105+
<version>2.3.232</version>
106+
<scope>runtime</scope>
56107
</dependency>
57108

58109
<dependency>
@@ -147,7 +198,7 @@
147198

148199
<build>
149200
<sourceDirectory>src/main/kotlin</sourceDirectory>
150-
<testSourceDirectory>src/test/kotlin</testSourceDirectory>
201+
<!-- <testSourceDirectory>src/test/kotlin</testSourceDirectory>-->
151202
<finalName>application</finalName>
152203
<plugins>
153204
<!--Setter krav til Java- og Maven-versjoner. -->

0 commit comments

Comments
 (0)