Initial commit

This commit is contained in:
Henrik Højmark committed 2026-04-11 04:38:11 +02:00
commit 9c7df76fbd
91 files changed
+36572

No files matched your search

+543
View File
@@ -0,0 +1,543 @@
# GDPR Scanner — Brugermanual
Version 1.6.14
---
## Indholdsfortegnelse
1. [Hvad er GDPR Scanner?](#1-hvad-er-gdpr-scanner)
2. [Overblik over brugerfladen](#2-overblik-over-brugerfladen)
3. [Forbindelse til dine datakilder](#3-forbindelse-til-dine-datakilder)
4. [Kør en scanning](#4-kør-en-scanning)
5. [Forstå resultaterne](#5-forstå-resultaterne)
6. [Gennemgang og mærkning af fund](#6-gennemgang-og-mærkning-af-fund)
7. [Sletning af elementer](#7-sletning-af-elementer)
8. [Profiler — gem dine scanningsindstillinger](#8-profiler--gem-dine-scanningsindstillinger)
9. [Rapporter og eksport](#9-rapporter-og-eksport)
10. [Del resultater med en gennemganger](#10-del-resultater-med-en-gennemganger)
11. [Planlagte scanninger](#11-planlagte-scanninger)
12. [E-mailrapporter](#12-e-mailrapporter)
13. [Sikkerhedskopi og gendannelse af database](#13-sikkerhedskopi-og-gendannelse-af-database)
14. [Indstillinger — oversigt](#14-indstillinger--oversigt)
15. [Ofte stillede spørgsmål](#15-ofte-stillede-spørgsmål)
---
## 1. Hvad er GDPR Scanner?
GDPR Scanner søger i din organisations digitale data — e-mails, cloud-filer, delte drev og lokale filservere — efter personoplysninger som CPR-numre, navne, adresser, telefonnumre og særlige kategorier af oplysninger efter GDPR artikel 9.
Når der er fundet elementer, kan du gennemgå dem, beslutte hvad der skal ske med hvert enkelt (beholde, slette eller markere som uden for scope), udarbejde en artikel 30-fortegnelse og masseslette forældet data.
**Hvad scanneren gennemgår:**
- Microsoft 365: Exchange e-mail, OneDrive, SharePoint, Teams
- Google Workspace: Gmail, Google Drev
- Lokale og netværksbaserede filmapper (herunder SMB/NAS-drev)
**Hvad den finder:**
- CPR-numre
- Telefonnumre, e-mailadresser, postadresser
- Bankkontonumre og IBAN-numre
- Navne og organisationsnavne
- Fotografier med genkendelige ansigter (valgfrit)
- GPS-placeringsdata indlejret i billedfiler
---
## 2. Overblik over brugerfladen
Når du åbner scanneren, er skærmen inddelt i tre områder:
```
┌─────────────────┬──────────────────────────────────────────┐
│ │ Topbjælke: Scan-knap, profiler, handlinger│
│ Venstre panel ├──────────────────────────────────────────┤
│ │ │
│ - Kilder │ Resultater / scanningsforløb │
│ - Indstillinger│ │
│ - Konti │ │
│ - Statistik ├──────────────────────────────────────────┤
│ │ Aktivitetslog │
└─────────────────┴──────────────────────────────────────────┘
```
**Venstre panel** — vælg hvad der skal scannes og hvordan.
**Topbjælke** — start en scanning, vælg profiler, og tilgå eksporter og indstillinger.
**Resultatområde** — fundne elementer vises her, mens scanningen kører.
**Statuslinje** — vises lige over aktivitetsloggen og angiver hvilken kilde der scannes, hvem der scannes, og hvor langt scanningen er.
**Aktivitetslog** — viser statusbeskeder i realtid under scanningen. Klik på **▾**-pilen i loggens overskrift for at folde panelet sammen eller ud. Du kan også filtrere loggen til kun at vise fejl, kopiere al logtekst til udklipsholderen og ændre størrelsen på panelet ved at trække i håndtaget øverst på panelet.
### Mørkt / lyst tema
Klik på **🌙**-knappen øverst til højre for at skifte mellem mørkt og lyst tema. Din præference huskes.
---
## 3. Forbindelse til dine datakilder
Inden du kan scanne, skal du forbinde mindst én datakilde. Klik på **Kilder** i topbjælken for at åbne kildestyringspanelet.
### 3.1 Microsoft 365
Fanen Microsoft 365 viser din aktuelle forbindelsesstatus. Hvis du ser en grøn prik og dit kontonavn eller lejernavn, er du allerede forbundet.
**Kilder du kan slå til og fra:**
| Skift | Hvad der scannes |
|-------|-----------------|
| Outlook | Exchange-postkasser (indbakke, sendt post, alle mapper) |
| OneDrive | Den enkelte brugers personlige cloud-lager |
| SharePoint | Team- og projektsider |
| Teams | Filer delt i Teams-kanaler |
Slå de kilder fra, du ikke ønsker at medtage. Disse indstillinger huskes.
### 3.2 Google Workspace
Fanen Google Workspace lader dig forbinde en Google Workspace-konto (tidligere G Suite) via en tjenestekonto, eller en personlig Google-konto via login.
**Kilder du kan slå til og fra:**
| Skift | Hvad der scannes |
|-------|-----------------|
| Gmail | Alle e-mails i den enkelte brugers indbakke og labels |
| Google Drev | Alle filer ejet af eller delt med den enkelte bruger |
### 3.3 Lokale og netværksbaserede filer
Fanen **Filkilder** viser de lokale mapper og netværksdrev, du har konfigureret.
**Sådan tilføjer du en ny filkilde:**
1. Indtast en **Betegnelse** — et navn du kan genkende (f.eks. "Skolens Fællesmappe").
2. Indtast **Stien**:
- Lokal mappe: `~/Dokumenter` eller `/Volumes/Drev`
- Netværksdrev: `//nas-server/delt` eller `\\server\delt`
3. Hvis det er et netværksdrev, udfyldes felterne **SMB-vært**, **Brugernavn** og **Adgangskode** automatisk. Adgangskoden gemmes sikkert i systemets nøglering.
4. Klik på **Tilføj**.
Du kan tilføje så mange filkilder, du har brug for. De vil fremgå som valgbare kilder i venstre panel, når du er klar til at scanne.
---
## 4. Kør en scanning
### 4.1 Vælg dine kilder
I venstre panel under **Kilder** sætter du hak ved de kilder, du vil medtage. Du kan kombinere M365, Google og filkilder i samme scanning.
### 4.2 Vælg konti
Under **Konti** vises alle brugere tilknyttet din M365- og/eller Google-lejer.
- Brug **søgefeltet** til at finde bestemte personer.
- Brug knapperne **Alle / Ansat / Elev** til at filtrere efter rolle.
- Brug **Alle**- og **Ingen**-knapperne til at vælge eller fravælge alle på én gang.
- Sæt hak ved eller fjern hak fra enkeltpersoner.
For filkilder er kontovalg ikke relevant — alle filer i de valgte stier scannes.
### 4.3 Konfigurer indstillinger
Under **Indstillinger** kan du justere scanningen:
**Datofilter (Scan e-mails/filer fra)**
Scan kun elementer ændret efter en bestemt dato. Hurtige forudindstillinger — **1 år**, **2 år**, **5 år**, **10 år**, **Alle** — lader dig vælge et interval med ét klik. Du kan også vælge en specifik dato med datovælgeren.
> Tip: "2 år" er et godt udgangspunkt for den første scanning. Du kan altid udvide til "Alle" bagefter.
**Scan e-mailindhold** — gennemgår selve teksten i e-mails. Aktiveret som standard.
**Scan vedhæftede filer** — gennemgår filer vedhæftet e-mails. Aktiveret som standard.
**Maks. vedhæftet filstørrelse** — spring vedhæftede filer over, der er større end denne grænse (standard 20 MB). Øg grænsen, hvis du vil kontrollere større dokumenter.
**Maks. e-mails pr. bruger** — stop efter at have scannet dette antal e-mails per person (standard 2.000). Øg det, hvis du har brug for fuld dækning.
### 4.4 Start scanningen
Klik på den blå **Scan**-knap i topbjælken.
En statuslinje viser:
- En farvet **kildemærkat** — **Outlook**, **OneDrive**, **SharePoint**, **Teams**, **Gmail**, **GDrive** eller **Local** — efterfulgt af det fulde navn på den konto, der scannes i øjeblikket
- En løbende optælling af scannede og fundne elementer
- Estimeret resterende tid
Resultater vises i hovedområdet efterhånden som de findes — du behøver ikke vente på, at scanningen er færdig, før du begynder at gennemgå dem.
Klik på **Stop** for at afbryde. Et kontrolpunkt gemmes automatisk, så du kan fortsætte senere.
### 4.5 Genoptag en afbrudt scanning
Hvis en scanning blev afbrudt (via stop, nedbrud eller lukning af programmet), vises et gult banner øverst i resultatområdet:
> Forrige scanning blev afbrudt — X scannet, Y fundet
> **▶ Genoptag** · Start forfra
Klik på **▶ Genoptag** for at fortsætte fra det sted, scanningen slap. Klik på **Start forfra** for at kassere kontrolpunktet og begynde en ny scanning.
---
## 5. Forstå resultaterne
Hvert fundet element vises som et kort. Her er forklaringen på mærker og labels:
### Kildemærker
| Mærke | Betydning |
|-------|-----------|
| Outlook | Fundet i en Exchange-postkasse |
| OneDrive | Fundet i en brugers OneDrive |
| SharePoint | Fundet på et SharePoint-site |
| Teams | Fundet i en Teams-kanal |
| Gmail | Fundet i en Gmail-postkasse |
| Google Drev | Fundet i Google Drev |
| Lokal / Netværk | Fundet på et filshare |
### Risikoniveau
| Niveau | Betydning |
|--------|-----------|
| HØJ | Flere CPR-numre, særlige kategorier af data, ældre end opbevaringspolitikken eller eksternt delt |
| MELLEM | Et enkelt CPR-nummer med noget deling eller kontekstuel risiko |
| LAV | Et enkelt CPR-nummer, ikke delt, nyligt oprettet |
### Øvrige mærker
| Mærke | Betydning |
|-------|-----------|
| Tal (f.eks. **3**) | Antal CPR-numre fundet i elementet |
| **Delt** | Elementet er delt med andre brugere |
| **Ekstern** | Elementet er delt med nogen uden for organisationen |
| **Art. 9** | Særlige kategorier af oplysninger fundet (helbred, religion, biometriske data mv.) |
| **N ansigter** | N genkendelige ansigter registreret i et foto |
| **GPS** | Filen indeholder GPS-placeringsdata i metadata |
### Kortvisning vs. listevisning
Standardvisningen er **kortvisning**. Klik på **Liste** i filterbjælken for at skifte til en kompakt tabelvisning med sorterbare kolonner. Klik på **Gitter** for at skifte tilbage.
### Filtrering af resultater
Brug filterbjælken over resultaterne til at indsnævre visningen:
- **Søgefelt** — søg på navn, emne eller filsti.
- **Kildetype** — vis kun én kildetype.
- **Disposition** — vis elementer efter gennemgangsstatus.
- **Deling** — filtrer på delt / ekstern / alle.
- **Risiko** — vis kun Art. 9, fotos, GPS eller høj-risiko-elementer.
---
## 6. Gennemgang og mærkning af fund
Klik på et resultatkort for at åbne forhåndsvisningspanelet i højre side af skærmen.
Forhåndsvisningen viser:
- Elementets navn eller e-mailens emne
- Kontoen (ejer / afsender)
- Kilde og ændringsdate
- Alle fundne CPR-numre og deres kontekst
- Øvrige personoplysninger registreret (telefon, e-mailadresse, IBAN mv.)
- Deling og ekstern adgangsinformation
### Angiv en disposition
Hvert element har en **Disposition**-rullemenu i forhåndsvisningspanelet. Vælg én af følgende:
| Disposition | Brug den når… |
|-------------|---------------|
| Ikke gennemgået | Endnu ikke vurderet — standardværdi |
| Opbevar — lovkrav | Du er lovpligtig til at beholde den |
| Opbevar — legitim interesse | Du har en legitim interesse i at beholde den |
| Opbevar — kontrakt | Nødvendig i forbindelse med en kontrakt |
| Slet — planlagt | Markeret til fremtidig sletning |
| Privat brug — uden for scope | Personligt element, ikke inden for GDPR-scopet |
| Slettet | Allerede slettet (angives automatisk ved sletning) |
Klik på **Gem** efter valget. En lille **✓ Gemt**-bekræftelse vises.
### Find alle elementer for en bestemt person
Klik på **🔍** i venstre panel (under Statistik) for at åbne **Registreret person**-opslaget. Indtast et CPR-nummer, og scanneren finder alle fundne elementer, der indeholder dette nummer. Du kan derefter slette dem alle i ét trin — i overensstemmelse med retten til sletning (GDPR artikel 17).
CPR-nummeret hashes inden søgningen og gemmes aldrig i klartekst.
---
## 7. Sletning af elementer
### 7.1 Sletning af et enkelt element
Med et element åbent i forhåndsvisningspanelet kan du angive dispositionen **Slet — planlagt** og bruge handlingsknappen til at slette det. E-mailen flyttes til mappen Slettet post; filer flyttes til papirkurven i den pågældende tjeneste.
### 7.2 Massesletning
Klik på **Slet**-knappen i filterbjælken for at åbne massesletningsvinduet.
1. **Indstil filtre** for at målrette de elementer, du ønsker at slette:
- **Kildetype** — slet fra én kilde eller alle.
- **Min. CPR-fund** — slet kun elementer med mindst dette antal CPR-numre.
- **Ældre end dato** — slet kun elementer ændret inden en bestemt dato.
- Klik på **🗓 Filter forældet** for automatisk at udfylde datoen ud fra din opbevaringspolitik.
2. Vinduet viser, hvor mange elementer der matcher dine filtre.
3. Klik på den røde **Slet matchende elementer**-knap for at fortsætte.
4. En statuslinje viser sletningerne i realtid. E-mails flyttes til **Slettet post**; filer flyttes til **papirkurven**.
En fuldstændig revisionslog over alle sletninger (hvad der er slettet, hvornår og hvorfor) medtages i artikel 30-rapporten.
---
## 8. Profiler — gem dine scanningsindstillinger
En profil gemmer dine valgte kilder, konti, scanningsindstillinger og datoindstillinger, så du kan genbruge dem uden at konfigurere alt på ny hver gang.
### Gem en profil
Konfigurer venstre panel præcis som du ønsker det — herunder hvilke M365-kilder, Google-kilder og lokale filkilder der er aktiveret, hvilke konti der er valgt, og alle indstillinger — og klik derefter på **Gem**-knappen i topbjælken. Indtast et navn og klik OK. Profilen gemmes og vælges med det samme.
### Anvend en profil
Klik på profil-rullemenuen i topbjælken og vælg en profil. Alle indstillinger i venstre panel — kilder, konti, indstillinger og datofilter — indlæses på én gang. Venstre panel viser derefter din aktive tilstand, og du kan justere hvad som helst, inden du scanner.
En **Ryd**-knap vises ved siden af rullemenuen, når en profil er valgt. Klik på den for at rydde profil­etiketten uden at ændre indstillingerne i venstre panel. Det er nyttigt, når du vil køre en engangsscan uden at overskrive en gemt profil.
### Administrer profiler
Klik på **Profiler** for at åbne profil­administrations­panelet. Her kan du:
- **Redigere** en profil — ændre navn, beskrivelse, kilder, konti eller indstillinger.
- **Duplikere** en profil — nyttigt som udgangspunkt for en variant.
- **Slette** en profil.
> Bemærk: Redigering af en profil påvirker ikke scanninger, der allerede er gennemført med den pågældende profil.
---
## 9. Rapporter og eksport
### 9.1 Excel-eksport
Klik på **Excel** i filterbjælken for at downloade de aktuelle resultater som en Excel-projektmappe. Projektmappen indeholder:
- Et oversigtsfaneblad med scanningsdato, antal elementer og kildefordeling.
- Et separat faneblad for hver kildetype (Outlook, OneDrive, SharePoint, Teams, Gmail, Google Drive, Lokal, Netværk).
- Alle fundne elementer, herunder kilde, konto, CPR-antal, risikoniveau, delingsstatus og disposition.
Knapperne **Excel** og **Art.30** er altid tilgængelige — også efter genstart af programmet — og eksporterer resultaterne fra den seneste afsluttede scanningssession uden at kræve en ny scanning.
Excel-filen er det primære arbejdsdokument til din interne gennemgangsproces.
### 9.2 GDPR Artikel 30-rapport (Word-dokument)
Klik på **Art.30** i filterbjælken for at generere et Word-dokument, der opfylder kravet i GDPR artikel 30 om at føre en fortegnelse over behandlingsaktiviteter.
Dokumentet indeholder:
- **Resumé** — scanningsdato, samlet antal elementer, CPR-fund pr. kilde.
- **Datakategorier** — hvilke typer personoplysninger der er fundet.
- **Datafortegnelse** — den fulde liste over fundne elementer.
- **Opbevaringsanalyse** — elementer ældre end din opbevaringspolitik, fordelt på kilder.
- **Særlige kategorier (Art. 9)** — helbreds-, biometriske og andre følsomme oplysninger.
- **Fotografier / biometriske data** — hvis ansigtsgenkendelse var aktiveret.
- **GPS-data** — filer med indlejrede placeringsoplysninger.
- **Compliance-tendens** — antal fundne elementer på tværs af dine seneste 20 scanninger.
- **Revisionslog for sletninger** — en komplet dokumentation af alle sletninger foretaget via scanneren.
- **Metode** — hvordan scanningen er udført og det juridiske grundlag.
- **Noter om elevdata** — vejledning om krav til forældresamtykke for børn under 15 år.
---
## 10. Del resultater med en gennemganger
Du kan give en DPO, skoleleder eller compliance-koordinator skrivebeskyttet adgang til resultatgitteret — herunder mulighed for at mærke dispositioner — uden at give dem adgang til scanningskontroller, loginoplysninger eller indstillinger.
### 10.1 Token-links
Klik på **🔗**-knappen øverst til højre i topbjælken for at åbne delingspanelet.
1. Angiv eventuelt en **Betegnelse** for at identificere, hvem linket er til (f.eks. "DPO-gennemgang april 2026").
2. Vælg en **Udløbsdato** — 7 dage, 30 dage, 90 dage, 1 år eller Aldrig.
3. Klik på **Opret**. Der genereres et unikt link: `http://host:5100/view?token=…`
4. Klik på **Kopiér** for at kopiere linket til udklipsholderen, og send det til gennemgangeren.
Gennemgangeren åbner linket i en browser. De kan se det fulde resultatgitter og mærke dispositioner, men kan ikke starte scanninger, ændre indstillinger, se loginoplysninger eller slette elementer.
**Administrer eksisterende links**
Delingspanelet viser alle aktive links. Hver række viser betegnelse, udløbsdato og hvornår linket sidst blev brugt. Klik på **Kopiér** for at kopiere et link igen, eller **Tilbagekald** for at gøre det ugyldigt med det samme.
### 10.2 Viewer-PIN
Som alternativ til token-links kan du angive en numerisk PIN-kode (4–8 cifre) under **Indstillinger → Sikkerhed → Viewer-PIN**. Alle, der kender PIN-koden, kan åbne `http://host:5100/view` i en browser, indtaste PIN-koden og få adgang til den skrivebeskyttede visning i hele browserens session.
For at angive eller ændre PIN-koden skal du indtaste den nye kode i feltet **Ny PIN** og klikke på **Gem PIN**. Klik på **Ryd PIN** for at fjerne den.
> **Sikkerhedsnote:** Token-links er mere sikre end en PIN-kode, fordi hvert link kan tilbagekaldes individuelt og har en udløbsdato. Brug PIN-indstillingen kun til betroede interne gennemgangere på dit lokale netværk.
### 10.3 Hvad gennemgangeren kan gøre
| Handling | Tilladt |
|----------|---------|
| Gennemse resultatgitter | Ja |
| Filtrere og søge i resultater | Ja |
| Åbne forhåndsvisning | Ja |
| Mærke dispositioner | Ja |
| Eksportere til Excel | Ja |
| Eksportere Artikel 30-rapport | Ja |
| Starte eller stoppe en scanning | Nej |
| Se eller ændre loginoplysninger | Nej |
| Slette elementer | Nej |
| Tilgå indstillinger | Nej |
| Oprette eller tilbagekalde viewer-links | Nej |
---
## 11. Planlagte scanninger
Gå til **Indstillinger → Planlægger** for at konfigurere automatiske scanninger.
### Opret en planlagt scanning
1. Klik på **+ Tilføj planlagt scanning**.
2. Giv jobbet et navn.
3. Vælg frekvens: **Dagligt**, **Ugentligt** eller **Månedligt**.
4. For ugentlige scanninger vælges ugedag. For månedlige vælges dag i måneden.
5. Angiv det tidspunkt, scanningen skal køre.
6. Vælg en **Profil** — scanneren bruger den pågældende profils kilder, konti og indstillinger.
7. Aktiver eventuelt:
- **Send rapport automatisk** — send Excel-rapporten pr. e-mail til dine konfigurerede modtagere efter hver scanning.
- **Håndhæv opbevaringspolitik** — slet automatisk elementer ældre end din opbevaringspolitik efter hver scanning.
8. Klik på **Gem**.
Planlæggerikatoren i topbjælken viser dato og tidspunkt for den næste planlagte scanning ("Næste: …").
### Se seneste kørsler
Fanen Planlægger viser historik over seneste kørsler med starttidspunkt, status og antal fundne elementer.
---
## 12. E-mailrapporter
Gå til **Indstillinger → E-mailrapport** for at konfigurere e-mail-afsendelse.
### Opsætning af SMTP
Udfyld oplysningerne for din udgående mailserver:
| Felt | Eksempel |
|------|----------|
| SMTP-vært | smtp.office365.com |
| Port | 587 |
| Brugernavn | scanner@skole.dk |
| Adgangskode | (din e-mailadgangskode eller app-adgangskode) |
| Afsenderadresse | scanner@skole.dk |
| Modtagere | dpo@skole.dk; it@skole.dk |
Klik på **Gem** for at gemme, og klik derefter på **Test** for at sende en test-e-mail og bekræfte, at konfigurationen virker.
> Hvis din konto har MFA (to-faktor-godkendelse) aktiveret, kan du ikke bruge din almindelige adgangskode. Du skal oprette en **app-adgangskode** i din kontos sikkerhedsindstillinger:
> - **Personlig Microsoft-konto**: account.microsoft.com/security → App-adgangskoder
> - **Gmail**: myaccount.google.com → Sikkerhed → 2-trinsbekræftelse → App-adgangskoder
### Send en rapport manuelt
Klik på **Send nu** for øjeblikkeligt at sende den aktuelle Excel-rapport pr. e-mail til alle konfigurerede modtagere.
---
## 13. Sikkerhedskopi og gendannelse af database
Alle scanningsresultater, dispositioner og sletningsrevisionsloggen gemmes i en lokal database. Det anbefales at tage regelmæssige sikkerhedskopier.
Gå til **Indstillinger → Database**.
### Sikkerhedskopi (Eksport)
Klik på **Eksporter** for at oprette en `.zip`-sikkerhedskopi af din database. Gem den på et sikkert sted.
### Gendannelse (Import)
Klik på **Importer** for at gendanne fra en sikkerhedskopi. To tilstande er tilgængelige:
| Tilstand | Hvornår du bruger den |
|----------|-----------------------|
| Flet (sikker) | Tilføj dispositioner og sletningslog fra sikkerhedskopien til dine eksisterende data. Brug denne til at samle data fra flere installationer. |
| Erstat (fuld gendannelse) | Slet alt eksisterende og gendan sikkerhedskopien fuldstændigt. Brug denne til at flytte til en ny maskine eller gendanne efter datatab. Kræver bekræftelse med admin-PIN. |
### Nulstil database
Klik på **Nulstil database** for at slette alle scanningsdata, dispositioner og sletningslog. Dette kan ikke fortrydes. Hvis en admin-PIN er sat, skal du indtaste den for at fortsætte.
---
## 14. Indstillinger — oversigt
### Fanen Generelt
| Indstilling | Beskrivelse |
|-------------|-------------|
| Tema | Mørkt eller lyst |
### Fanen Sikkerhed
| Indstilling | Beskrivelse |
|-------------|-------------|
| Admin-PIN | Valgfri PIN-kode, der beskytter destruktive handlinger (nulstil database, erstat ved import) |
| Viewer-PIN | Valgfri 4–8-cifret PIN-kode, der giver alle adgang til `/view` i en browser som skrivebeskyttet gennemganger uden et token-link |
### Avancerede scanningsindstillinger
Disse indstillinger findes i venstre panel under **Indstillinger**:
**Delta-scanning** — efter din første fulde scanning kan du aktivere dette for kun at scanne elementer, der er ændret siden sidste scanning. Meget hurtigere til løbende kontrol. Knappen "Ryd tokens" tvinger den næste scanning til at være en fuld scanning.
**Søg efter ansigter i billeder** — langsommere scanning, der registrerer fotografier med genkendelige menneskelige ansigter. Markerer dem som artikel 9 biometriske data. Anbefales til skoler, der opbevarer elevfotos.
**Opbevaringspolitik** — når aktiveret, markeres elementer ældre end det angivne antal år som forældet. Regnskabsårets afslutning bestemmer, hvordan skæringsdatoen beregnes:
| Indstilling | Beregning af skæringsdato |
|-------------|--------------------------|
| Løbende (fra i dag) | I dag minus N år |
| 31 dec (Bogføringsloven) | Seneste 31. december minus N år |
| 30 jun / 31 mar | Seneste forekomst af den dato minus N år |
---
## 15. Ofte stillede spørgsmål
**Gemmer scanneren CPR-numre?**
Nej. CPR-numre fundet under en scanning gemmes kun som et antal (f.eks. "3 CPR-numre fundet") og som en SHA-256-hash, der bruges til personopslag. Det faktiske nummer skrives aldrig til databasen.
**Hvad sker der, når jeg sletter elementer via scanneren?**
E-mails flyttes til brugerens **Slettet post**-mappe i Exchange — de slettes ikke permanent og kan gendannes af brugeren eller en administrator. Filer flyttes til **papirkurven** i den pågældende tjeneste (OneDrive, SharePoint, filsystem). Permanent sletning kræver en efterfølgende handling af brugeren eller administrator.
**Kan jeg scanne uden at forbinde til Microsoft 365?**
Ja. Du kan scanne lokale og SMB-filshares uden nogen M365- eller Google-forbindelse. Åbn **Kilder**, gå til fanen **Filkilder**, og tilføj dine filstier.
**Hvad er delta-scanning, og hvornår skal jeg bruge det?**
Delta-scanning bruger Microsoft Graphs ændringstokens til kun at hente elementer ændret siden den seneste scanning. Det er ideelt til regelmæssige (f.eks. ugentlige) compliance-tjek efter, at du har gennemført en fuld basisscan. Aktiver det i afsnittet Indstillinger i venstre panel.
**Scanningen stoppede — kan jeg fortsætte, hvor den slap?**
Ja. Når du starter scanningen igen, vil et gult banner tilbyde at genoptage fra kontrolpunktet. Klik på **▶ Genoptag** for at fortsætte. Hvis du foretrækker at starte forfra, klikker du på **Start forfra**.
**Hvordan dokumenterer jeg compliance, hvis vi bliver auditeret?**
Brug **Art.30**-knappen til at eksportere artikel 30-rapporten. Det er et Word-dokument, der dækker din datafortegnelse, opbevaringsanalyse, sletningslog og metode — præcis hvad en tilsynsmyndighed (Datatilsynet) typisk anmoder om.
**Hvad gør filteret "Elev / Ansat"?**
Scanneren klassificerer brugere som ansatte eller elever ud fra deres Microsoft 365-licenstype eller Google Workspace-organisationsenhed. Du kan bruge dette filter i kontolisten til at begrænse en scanning til kun ansatte, kun elever eller en bestemt person. Det er nyttigt, fordi reglerne for behandling af elevdata — særligt for børn under 15 år — adskiller sig fra reglerne for medarbejderdata i henhold til databeskyttelsesloven.
**Hvordan tilføjer jeg en konto, der ikke er på listen?**
I kontoafsnittet i venstre panel er der et felt **+ Tilføj konto manuelt**. Indtast e-mailadressen eller UPN'en, og den tilføjes til den aktuelle sessions kontoliste.
**Kører scanneren? Jeg kan ikke se en statuslinje.**
Tjek aktivitetsloggen nederst på skærmen. Hvis en scanning kører, vises der beskeder her. Hvis du ikke ser noget, er scanningen muligvis afsluttet eller ikke startet. Kontrollér også, at du har valgt mindst én kilde og mindst én konto.
**Kan en gennemganger mærke dispositioner uden adgang til scanningskontrollerne?**
Ja. Brug **🔗 Del**-knappen til at oprette et skrivebeskyttet viewer-link eller angiv en Viewer-PIN under Indstillinger → Sikkerhed. Gennemgangeren åbner linket i sin browser og kan gennemse resultater og mærke dispositioner uden at se loginoplysninger, kilder eller scanningsknapper. Se afsnit 10 for detaljer.
---
*GDPR Scanner v1.6.14 — teknisk opsætning og konfiguration: se README.md*
+543
View File
@@ -0,0 +1,543 @@
# GDPR Scanner — User Manual
Version 1.6.14
---
## Table of Contents
1. [What is GDPR Scanner?](#1-what-is-gdpr-scanner)
2. [The Interface at a Glance](#2-the-interface-at-a-glance)
3. [Connecting to Your Data Sources](#3-connecting-to-your-data-sources)
4. [Running a Scan](#4-running-a-scan)
5. [Understanding the Results](#5-understanding-the-results)
6. [Reviewing and Tagging Results](#6-reviewing-and-tagging-results)
7. [Deleting Items](#7-deleting-items)
8. [Profiles — Saving Your Scan Settings](#8-profiles--saving-your-scan-settings)
9. [Reports and Exports](#9-reports-and-exports)
10. [Sharing Results with a Reviewer](#10-sharing-results-with-a-reviewer)
11. [Scheduled Scans](#11-scheduled-scans)
12. [Email Reports](#12-email-reports)
13. [Database Backup and Restore](#13-database-backup-and-restore)
14. [Settings Reference](#14-settings-reference)
15. [Frequently Asked Questions](#15-frequently-asked-questions)
---
## 1. What is GDPR Scanner?
GDPR Scanner searches your organisation's digital data — emails, cloud files, shared drives, and local file servers — for personal data such as CPR numbers, names, addresses, phone numbers, and special-category data under GDPR Article 9.
When items are found, you can review them, decide what to do with each one (keep, delete, or note as out of scope), produce an Article 30 compliance report, and delete overdue data in bulk.
**What it scans:**
- Microsoft 365: Exchange email, OneDrive, SharePoint, Teams
- Google Workspace: Gmail, Google Drive
- Local and network file shares (including SMB/NAS drives)
**What it finds:**
- CPR numbers (Danish civil registration numbers)
- Phone numbers, email addresses, postal addresses
- Bank account and IBAN numbers
- Names and organisation names
- Photographs containing recognisable faces (optional)
- GPS location data embedded in image files
---
## 2. The Interface at a Glance
When you open the scanner, the screen is divided into three areas:
```
┌─────────────────┬──────────────────────────────────────────┐
│ │ Top bar: Scan button, profiles, actions │
│ Left sidebar ├──────────────────────────────────────────┤
│ │ │
│ - Sources │ Results / scan progress │
│ - Options │ │
│ - Accounts │ │
│ - Stats ├──────────────────────────────────────────┤
│ │ Activity log │
└─────────────────┴──────────────────────────────────────────┘
```
**Left sidebar** — choose what to scan and how.
**Top bar** — start a scan, select profiles, and access exports and settings.
**Results area** — flagged items appear here as the scan runs.
**Progress bar** — sits just above the activity log and shows which source is being scanned, who is being scanned, and how far along the scan is.
**Activity log** — shows live status messages during scanning. Click the **▾** arrow in the log header to collapse or expand the panel. You can also filter the log to show only errors, copy all log text to the clipboard, and resize the panel by dragging the handle at its top edge.
### Dark / Light mode
Click the **🌙** button in the top-right corner to switch between dark and light mode. Your preference is remembered.
---
## 3. Connecting to Your Data Sources
Before you can scan, you need to connect to at least one data source. Click the **Sources** button in the top bar to open the Source Management panel.
### 3.1 Microsoft 365
The Microsoft 365 tab shows your current connection status. If you see a green dot and your account or tenant name, you are already connected.
**Sources you can enable or disable:**
| Toggle | What it scans |
|--------|---------------|
| Outlook | Exchange mailboxes (inbox, sent, all folders) |
| OneDrive | Each user's personal cloud storage |
| SharePoint | Team and project sites |
| Teams | Files shared in Teams channels |
Turn off any source you do not want to include. These settings are remembered.
### 3.2 Google Workspace
The Google Workspace tab lets you connect a Google Workspace (formerly G Suite) account via a service account, or a personal Google account via sign-in.
**Sources you can enable or disable:**
| Toggle | What it scans |
|--------|---------------|
| Gmail | All emails in each user's inbox and labels |
| Google Drive | All files owned by or shared with each user |
### 3.3 Local and Network File Shares
The **Filkilder** (File Sources) tab lists any local folders or network drives you have configured.
**To add a new file source:**
1. Enter a **Label** — a friendly name you will recognise (e.g. "Skolens Fællesmappe").
2. Enter the **Path**:
- Local folder: `~/Documents` or `/Volumes/Share`
- Network share: `//nas-server/shared` or `\\server\share`
3. If it is a network share, fill in the **SMB Host**, **Username**, and **Password** that appear automatically. The password is stored securely in your system keychain.
4. Click **Tilføj** (Add).
You can add as many file sources as you need. Each one will appear as a selectable source in the main sidebar when you are ready to scan.
---
## 4. Running a Scan
### 4.1 Select Your Sources
In the left sidebar under **Kilder** (Sources), tick the sources you want to include in this scan. You can mix M365, Google, and file sources in the same scan.
### 4.2 Choose Your Accounts
Under **Konti** (Accounts) the sidebar shows all users connected to your M365 and/or Google tenant.
- Use the **search box** to find specific people.
- Use the **Alle / Ansat / Elev** buttons to filter by role.
- Use the **Alle** and **Ingen** buttons to select or deselect everyone at once.
- Tick or untick individual names.
For file sources, accounts are not relevant — all files in the selected paths are scanned.
### 4.3 Configure Options
Under **Indstillinger** (Options) you can refine the scan:
**Date filter (Scan e-mails/filer fra)**
Only scan items modified after a certain date. Quick presets — **1 år**, **2 år**, **5 år**, **10 år**, **Alle** — let you choose a window with one click. You can also pick a specific date with the date picker.
> Tip: Starting with "2 år" is a good first scan. You can always widen to "Alle" later.
**Email body** — scan the text content of emails. On by default.
**Attachments** — scan files attached to emails. On by default.
**Max attachment size** — skip attachments larger than this limit (default 20 MB). Increase it if you want to check large documents.
**Max emails per user** — stop after scanning this many emails per person (default 2,000). Increase if you need complete coverage.
### 4.4 Start the Scan
Click the blue **Scan** button in the top bar.
A progress bar appears showing:
- A coloured **source label** — **Outlook**, **OneDrive**, **SharePoint**, **Teams**, **Gmail**, **GDrive**, or **Local** — followed by the full name of the account currently being scanned
- A live count of items scanned and flagged
- An estimated time remaining
Results appear in the main area as they are found — you do not need to wait for the scan to finish before reviewing them.
To stop a scan, click **Stop**. A checkpoint is saved automatically so you can resume later.
### 4.5 Resuming an Interrupted Scan
If a scan was interrupted (by a stop, a crash, or closing the application), a yellow banner appears at the top of the results area:
> Previous scan interrupted — X scanned, Y found
> **▶ Genoptag** · Start fresh
Click **▶ Genoptag** to continue from where the scan left off. Click **Start fresh** to discard the checkpoint and begin again.
---
## 5. Understanding the Results
Each flagged item appears as a card. Here is what the badges and labels mean:
### Source badges
| Badge | Meaning |
|-------|---------|
| Outlook | Found in an Exchange mailbox |
| OneDrive | Found in a user's OneDrive |
| SharePoint | Found in a SharePoint site |
| Teams | Found in a Teams channel |
| Gmail | Found in a Gmail mailbox |
| Google Drive | Found in Google Drive |
| Local / Network | Found on a file share |
### Risk level
| Level | Meaning |
|-------|---------|
| HIGH | Multiple CPR numbers, special-category data, older than retention policy, or externally shared |
| MEDIUM | Single CPR with some sharing or contextual risk |
| LOW | Single CPR number, not shared, recent |
### Other badges
| Badge | Meaning |
|-------|---------|
| Number (e.g. **3**) | Number of CPR numbers found in this item |
| **Delt** (Shared) | The item has been shared with other users |
| **Ekstern** (External) | The item has been shared with someone outside your organisation |
| **Art. 9** | Special-category data detected (health, religion, biometric, etc.) |
| **N faces** | N recognisable faces detected in a photo |
| **GPS** | The file contains GPS location data in its metadata |
### Grid view vs. list view
The default **grid view** shows cards. Click **List** in the filter bar to switch to a compact table view with sortable columns. Click **Grid** to switch back.
### Filtering results
Use the filter bar above the results to narrow down what you see:
- **Search box** — search by name, subject, or path.
- **Source dropdown** — show only one source type.
- **Disposition dropdown** — show items by their review status.
- **Transfer dropdown** — filter by shared / external / all.
- **Risk dropdown** — show only Art. 9, photos, GPS, or high-risk items.
---
## 6. Reviewing and Tagging Results
Click any result card to open the preview panel on the right side of the screen.
The preview shows:
- The item name or email subject
- The account (owner / sender)
- Source and modification date
- All CPR numbers found and their context
- Other personal data detected (phone, email address, IBAN, etc.)
- Sharing and external-access information
### Setting a disposition
Every item has a **Disposition** dropdown in the preview panel. Choose one of:
| Disposition | Use when… |
|-------------|-----------|
| Ikke gennemgået (Unreviewed) | Not yet assessed — the default |
| Opbevar — lovkrav | You must keep it by law |
| Opbevar — legitim interesse | You have a legitimate interest in keeping it |
| Opbevar — kontrakt | Required for a contract |
| Slet — planlagt | Marked for future deletion |
| Privat brug — uden for scope | Personal item, not in scope for GDPR processing |
| Slettet | Already deleted (set automatically when you delete an item) |
After choosing, click **Gem**. A small **✓ Gemt** confirmation appears.
### Finding all items for a specific person
Click **🔍** in the sidebar (under Stats) to open the **Data Subject Lookup**. Enter a CPR number and the scanner will find all flagged items containing that number. You can then delete all of them in one step — supporting the GDPR right to erasure (Article 17).
The CPR number is hashed before the search and is never stored in plaintext.
---
## 7. Deleting Items
### 7.1 Deleting a Single Item
With an item open in the preview panel, set its disposition to **Slet — planlagt**, then use the action button to delete it. The item moves to the Deleted Items folder (email) or recycle bin (files).
### 7.2 Bulk Delete
Click the **Delete** button in the filter bar to open the bulk delete modal.
1. **Set filters** to target the items you want to delete:
- **Source type** — delete from one source or all.
- **Min. CPR hits** — only delete items with at least this many CPR numbers.
- **Older than date** — only delete items modified before a specific date.
- Click **🗓 Filter overdue** to automatically fill in the date based on your retention policy.
2. The modal shows how many items match your filters.
3. Click the red **Delete matching items** button to proceed.
4. A progress bar shows deletions as they happen. Emails go to **Deleted Items**; files go to the **recycle bin**.
A full audit log of every deletion (what was deleted, when, and why) is included in the Article 30 report.
---
## 8. Profiles — Saving Your Scan Settings
A profile stores your chosen sources, accounts, scan options, and date settings so you can re-use them without reconfiguring every time.
### Saving a profile
Configure the sidebar exactly as you want it — including which M365 sources, Google sources, and local file sources are enabled, which accounts are selected, and all options — then click the **Save** button in the top bar. Enter a name and click OK. The profile is saved and selected immediately.
### Applying a profile
Click the profile dropdown in the top bar and select a profile. All sidebar settings — sources, accounts, options, and date filter — are loaded at once. The sidebar then shows your live state and you can adjust anything before scanning.
A **Clear** button appears next to the dropdown after you select a profile. Click it to clear the profile label without changing the sidebar settings. This is useful when you want to run a one-off scan without overwriting a saved profile.
### Managing profiles
Click **Profiles** to open the profile management panel. Here you can:
- **Edit** any profile — change its name, description, sources, accounts, or options.
- **Duplicate** a profile — useful as a starting point for a variation.
- **Delete** a profile.
> Note: Editing a profile does not affect scans already completed with that profile.
---
## 9. Reports and Exports
### 9.1 Excel Export
Click **Excel** in the filter bar to download the current results as an Excel workbook. The workbook contains:
- A summary tab with scan date, item counts, and source breakdown.
- A separate tab for each source type (Outlook, OneDrive, SharePoint, Teams, Gmail, Google Drive, Local, Network).
- Every flagged item, including source, account, CPR count, risk level, sharing status, and disposition.
The **Excel** and **Art.30** buttons are always available — even after restarting the application — and will export the results from the most recent completed scan session without requiring a new scan.
The Excel file is the main working document for your internal review process.
### 9.2 GDPR Article 30 Report (Word document)
Click **Art.30** in the filter bar to generate a Word document that satisfies the GDPR Article 30 requirement to maintain a record of processing activities.
The document includes:
- **Executive summary** — scan date, total items, CPR counts per source.
- **Data categories** — which types of personal data were found.
- **Data inventory** — the full list of flagged items.
- **Retention analysis** — items older than your retention policy, with a breakdown by source.
- **Special-category data (Art. 9)** — health, biometric, and other sensitive data found.
- **Photographs / biometric data** — if face scanning was enabled.
- **GPS data** — files with embedded location information.
- **Compliance trend** — flagged counts across your last 20 scans.
- **Deletion audit log** — a complete record of all deletions made through the scanner.
- **Methodology** — how the scan was performed and the legal basis for scanning.
- **Notes on student data** — guidance on parental consent requirements for children under 15.
---
## 10. Sharing Results with a Reviewer
You can give a DPO, school principal, or compliance coordinator read-only access to the results grid — including the ability to tag dispositions — without giving them access to scan controls, credentials, or settings.
### 10.1 Token links
Click the **🔗** button in the top-right of the top bar to open the Share panel.
1. Optionally enter a **Label** to identify who the link is for (e.g. "DPO review April 2026").
2. Choose an **Expiry** — 7 days, 30 days, 90 days, 1 year, or Never.
3. Click **Create**. A unique link is generated: `http://host:5100/view?token=…`
4. Click **Copy** to copy the link to your clipboard, then send it to the reviewer.
The reviewer opens the link in any browser. They see the full results grid and can tag dispositions but cannot start scans, change settings, view credentials, or delete items.
**Managing existing links**
The Share panel lists all active links. Each row shows the label, expiry date, and when the link was last used. Click **Copy** to copy a link again, or **Revoke** to invalidate it immediately.
### 10.2 Viewer PIN
As an alternative to token links, you can set a numeric PIN (4–8 digits) in **Settings → Security → Viewer PIN**. Anyone who knows the PIN can open `http://host:5100/view` in a browser, enter the PIN, and access the read-only view for the duration of their browser session.
To set or change the PIN, enter the new PIN in the **New PIN** field and click **Save PIN**. To remove it, click **Clear PIN**.
> **Security note:** Token links are more secure than a PIN because each link can be individually revoked and has an expiry date. Use the PIN option only for trusted internal reviewers on your local network.
### 10.3 What the reviewer can do
| Action | Allowed |
|--------|---------|
| Browse results grid | Yes |
| Filter and search results | Yes |
| Open item preview | Yes |
| Tag dispositions | Yes |
| Export to Excel | Yes |
| Export Article 30 report | Yes |
| Start or stop a scan | No |
| View or change credentials | No |
| Delete items | No |
| Access Settings | No |
| Create or revoke viewer links | No |
---
## 11. Scheduled Scans
Go to **Settings → Planlægger** to configure automatic scans.
### Creating a scheduled scan
1. Click **+ Tilføj planlagt scanning** (+ Add scheduled scan).
2. Give the job a name.
3. Choose the frequency: **Dagligt**, **Ugentligt**, or **Månedligt**.
4. For weekly scans, choose the day of the week. For monthly, choose the day of the month.
5. Set the time the scan should run.
6. Choose a **Profile** — the scanner will use that profile's sources, accounts, and options.
7. Optionally enable:
- **Send rapport automatisk** — email the Excel report to your configured recipients after each scan.
- **Håndhæv opbevaringspolitik** — automatically delete items older than your retention policy after each scan.
8. Click **Gem** (Save).
The scheduler indicator in the top bar shows the date and time of the next scheduled scan ("Next: …").
### Viewing recent runs
The scheduler tab shows a history of recent runs, including start time, status, and the number of items flagged.
---
## 12. Email Reports
Go to **Settings → E-mailrapport** to configure email sending.
### Setting up SMTP
Fill in your outgoing mail server details:
| Field | Example |
|-------|---------|
| SMTP host | smtp.office365.com |
| Port | 587 |
| Username | scanner@skole.dk |
| Password | (your email password or app password) |
| From address | scanner@skole.dk |
| Recipients | dpo@skole.dk; it@skole.dk |
Click **Gem** to save, then click **Test** to send a test email and verify the configuration is working.
> If your account has MFA (two-factor authentication) enabled, you cannot use your regular password. You need to create an **App Password** in your account security settings:
> - **Microsoft personal account**: account.microsoft.com/security → App passwords
> - **Gmail**: myaccount.google.com → Security → 2-Step Verification → App passwords
### Sending a report manually
Click **Send nu** (Send now) to email the current Excel report immediately to all configured recipients.
---
## 13. Database Backup and Restore
All scan results, dispositions, and the deletion audit log are stored in a local database. It is good practice to take regular backups.
Go to **Settings → Database**.
### Backup (Export)
Click **Export** to create a `.zip` backup of your database. Save it to a safe location.
### Restore (Import)
Click **Import** to restore from a backup. Two modes are available:
| Mode | When to use |
|------|-------------|
| Merge (safe) | Add dispositions and deletion log from the backup to your existing data. Use this to consolidate data from multiple installations. |
| Replace (full restore) | Erase everything and restore the backup completely. Use this to move to a new machine or recover from data loss. Requires Admin PIN confirmation. |
### Reset database
Click **Reset DB** to wipe all scan data, dispositions, and deletion log. This is irreversible. If an Admin PIN is set, you must enter it to proceed.
---
## 14. Settings Reference
### General tab
| Setting | Description |
|---------|-------------|
| Theme | Dark or light mode |
### Security tab
| Setting | Description |
|---------|-------------|
| Admin PIN | Optional PIN that protects destructive actions (database reset, replace import) |
| Viewer PIN | Optional 4–8 digit PIN that lets anyone open `/view` in a browser for read-only access to results without a token link |
### Advanced scan options
These options are in the left sidebar under **Indstillinger**:
**Delta scanning** — after your first full scan, enable this to scan only items that have changed since the last scan. Much faster for routine checks. A "Clear tokens" button forces the next scan to be a full scan.
**Scan photos for faces** — slower scan that detects photographs containing recognisable human faces. Flags them as Article 9 biometric data. Recommended for schools storing student photos.
**Retention policy** — when enabled, marks items older than the specified number of years as overdue. The fiscal year end setting determines how the cutoff date is calculated:
| Option | Cutoff date calculation |
|--------|------------------------|
| Rolling (fra i dag) | Today minus N years |
| 31 dec (Bogføringsloven) | Last 31 December minus N years |
| 30 jun / 31 mar | Last occurrence of that date minus N years |
---
## 15. Frequently Asked Questions
**Does the scanner store CPR numbers?**
No. CPR numbers found during a scan are stored only as a count (e.g. "3 CPR numbers found") and as a SHA-256 hash used for the Data Subject Lookup. The actual number is never written to the database.
**What happens when I delete items through the scanner?**
Emails are moved to the user's **Deleted Items** folder in Exchange — they are not permanently deleted and can be recovered by the user or an administrator. Files are moved to the **recycle bin** of the relevant service (OneDrive, SharePoint, file system). A permanent deletion requires a second action by the user or admin.
**Can I scan without connecting to Microsoft 365?**
Yes. You can scan local and SMB file shares without any M365 or Google connection. Open **Sources**, go to the **Filkilder** tab, and add your file paths.
**What is delta scanning and when should I use it?**
Delta scanning uses Microsoft Graph change tokens to fetch only items modified since the last scan. It is ideal for regular (e.g. weekly) compliance checks after you have done a full baseline scan. Enable it in the Options section of the sidebar.
**The scan stopped — can I continue where it left off?**
Yes. When you restart the scan, a yellow banner will offer to resume from the checkpoint. Click **▶ Genoptag** to continue. If you prefer to start over, click **Start fresh**.
**How do I prove compliance if we are audited?**
Use the **Art.30** button to export the Article 30 report. It is a Word document covering your data inventory, retention analysis, deletion log, and methodology — exactly what a supervisory authority (Datatilsynet) typically requests.
**What does the "Elev / Ansat" filter do?**
The scanner classifies users as staff (Ansat) or students (Elev) based on their Microsoft 365 licence type or Google Workspace organisational unit. You can use this filter in the accounts list to restrict a scan to only staff, only students, or a specific individual. This is useful because the rules for processing student data — especially for children under 15 — differ from staff data under Databeskyttelsesloven.
**How do I add an account that is not in the list?**
In the accounts section of the sidebar, there is an **+ Tilføj konto manuelt** (Add account manually) field. Enter the email address or UPN and it will be added to the current session's account list.
**Is the scanner running? I cannot see a progress bar.**
Check the activity log at the bottom of the screen. If a scan is running it will show messages there. If you see nothing, the scan may have completed or not started. Also check that you have at least one source ticked and at least one account selected.
**Can a reviewer tag dispositions without access to the scan controls?**
Yes. Use the **🔗 Share** button to create a read-only viewer link or set a Viewer PIN in Settings → Security. The reviewer opens the link in their browser and can browse results and tag dispositions without seeing credentials, sources, or scan buttons. See section 10 for details.
---
*GDPR Scanner v1.6.14 — for technical setup and configuration see README.md*
+144
View File
@@ -0,0 +1,144 @@
# Google Workspace Setup
Step-by-step guide for connecting GDPRScanner to Google Workspace via a service account.
GDPRScanner connects using a **service account** with **domain-wide delegation** — this allows it to scan all users' Gmail and Drive without requiring each user to sign in individually.
---
## 1. Create a Google Cloud project
Go to [console.cloud.google.com](https://console.cloud.google.com) and create a new project (or use an existing one).
---
## 2. Enable the required APIs
In your project: **APIs & Services → Enable APIs and Services**. Enable:
- **Gmail API**
- **Google Drive API**
- **Admin SDK API**
---
## 3. Create a service account
Go to **IAM & Admin → Service accounts → Create service account**.
| Field | Value |
|---|---|
| Name | gdprscanner (or any name) |
| Description | GDPRScanner service account |
Click **Create and continue**. Skip the optional role and user access steps. Click **Done**.
### Create a key
Click on the service account → **Keys → Add key → Create new key → JSON**.
Download the JSON file. This is your service account key — treat it like a password.
---
## 4. Enable domain-wide delegation
Back on the service account page: **Show advanced settings → Domain-wide delegation → Enable**.
Note the **Client ID** (a long number) — you'll need it in the next step.
---
## 5. Authorise scopes in Google Admin Console
Go to [admin.google.com](https://admin.google.com) →
**Security → Access and data control → API controls → Manage domain-wide delegation → Add new**.
| Field | Value |
|---|---|
| Client ID | The numeric Client ID from the service account |
| OAuth scopes | See below |
Add all of these scopes (paste as a comma-separated list):
```
https://www.googleapis.com/auth/admin.directory.user.readonly,
https://www.googleapis.com/auth/gmail.readonly,
https://www.googleapis.com/auth/drive.readonly
```
Click **Authorise**. Changes can take a few minutes to propagate.
---
## 6. Connect in GDPRScanner
Open GDPRScanner → **Source Management → Google Workspace** tab.
1. **Upload service account key** — select the JSON file you downloaded in step 3
2. **Admin email** — enter the email address of a Google Workspace admin user in your domain (e.g. `admin@skolen.dk`). The service account impersonates this user to call the Admin Directory API.
Click **Connect**. If successful, the status dot turns green and shows the service account email.
---
## 7. User role classification
GDPRScanner classifies Google Workspace users as **staff** or **student** based on their **Organisational Unit (OU) path** in Google Admin.
The mapping is in `classification/google_ou_roles.json`. Edit it to match your school's OU structure — no code change required.
Default mapping:
| OU prefix | Role |
|---|---|
| `/Elever` | student |
| `/Personale` | staff |
| `/Admin` | staff |
To see your OU structure: **Google Admin → Directory → Administrer organisationsenheder**.
Example `classification/google_ou_roles.json` for a typical Danish school (Gudenaaskolen.dk structure):
```json
{
"student_ou_prefixes": ["/Elever"],
"staff_ou_prefixes": ["/Personale", "/Admin"]
}
```
After editing the file, restart GDPRScanner — no rebuild required.
---
## 8. Verify
After connecting:
- **Sources panel** shows Gmail and Google Drive checkboxes
- **Accounts panel** shows all Google Workspace users with `GWS` badges
- Users are classified as Elev / Ansat based on their OU
Select one or more accounts, check Gmail and/or Google Drive, and click Scan.
---
## Notes on what is scanned
| Source | What is scanned |
|---|---|
| Gmail | Email bodies and attachments for all mail folders |
| Google Drive | My Drive files — Docs, Sheets, Slides are auto-exported to text for scanning |
---
## Troubleshooting
| Symptom | Likely cause |
|---|---|
| `unauthorized_client` on connect | Domain-wide delegation not enabled, or scopes not authorised in Admin Console |
| 0 users listed | `admin.directory.user.readonly` scope missing, or wrong admin email |
| Users show as "Anden" (other) | OU path not matched in `classification/google_ou_roles.json` — check OU paths in Google Admin and compare with the file |
| Gmail scan finds nothing | `gmail.readonly` scope not authorised |
| Drive scan finds nothing | `drive.readonly` scope not authorised |
| `RefreshError` on scan | Service account key expired or revoked — generate a new key |
+160
View File
@@ -0,0 +1,160 @@
# Microsoft 365 Setup
Step-by-step guide for connecting GDPRScanner to Microsoft 365.
---
## 1. Register an app in Azure
Go to **Azure Portal → Microsoft Entra ID → App registrations → New registration**.
| Field | Value |
|---|---|
| Name | GDPRScanner (or any name) |
| Supported account types | Accounts in this organisational directory only |
| Redirect URI | Leave blank |
Click **Register**. Note the **Application (client) ID** and **Directory (tenant) ID** — you'll need both.
---
## 2. Choose an authentication mode
| Mode | How it works | When to use |
|---|---|---|
| **Application** | Client credentials — client ID + tenant ID + client secret. No user interaction. | Automated / scheduled scans, all-user scans |
| **Delegated** | OAuth device code flow — user signs in interactively. | Single-user scans, testing |
### Application mode — create a client secret
In your app registration: **Certificates & secrets → New client secret**.
Set an expiry (24 months recommended) and copy the **Value** immediately — it is only shown once.
### Delegated mode — no secret needed
The scanner will show a device code URL. Open it in a browser, sign in, and the scanner authenticates as that user.
---
## 3. Add API permissions
Go to **API permissions → Add a permission → Microsoft Graph**.
### Scan only
| Permission | Type |
|---|---|
| `Mail.Read` | Application or Delegated |
| `Files.Read.All` | Application or Delegated |
| `Sites.Read.All` | Application or Delegated |
| `ChannelMessage.Read.All` | Application |
| `Team.ReadBasic.All` | Application |
| `User.Read.All` | Application |
### Scan + Delete
Add these in addition to the read permissions above:
| Permission | Type |
|---|---|
| `Mail.ReadWrite` | Application or Delegated |
| `Files.ReadWrite.All` | Application or Delegated |
| `Sites.ReadWrite.All` | Application or Delegated |
### Email reports via Graph
If you want the scanner to send email reports via Microsoft 365 (not SMTP):
| Permission | Type |
|---|---|
| `Mail.Send` | Application or Delegated |
### Grant admin consent
All **Application** permissions require admin consent. Click **Grant admin consent for [your tenant]** at the top of the API permissions page. Without this, scans will fail with 403 errors.
---
## 4. Connect in GDPRScanner
Open GDPRScanner → **Source Management → Microsoft 365** tab.
| Field | Where to find it |
|---|---|
| Client ID | App registration → Overview → Application (client) ID |
| Tenant ID | App registration → Overview → Directory (tenant) ID |
| Client Secret | The value you copied in step 2 (Application mode only) |
Click **Connect**. In Application mode, the connection is immediate. In Delegated mode, a browser window opens for sign-in.
---
## 5. Verify
After connecting, the Sources panel shows:
- **Email** — Exchange mailboxes
- **OneDrive** — personal drives
- **SharePoint** — site file libraries
- **Teams** — Teams channel files
The Accounts panel lists all users in the tenant (Application mode) or just the signed-in user (Delegated mode).
---
## Notes on deletion
Emails deleted via the scanner are moved to **Deleted Items** — recoverable for 14–30 days depending on admin configuration. Files are sent to the **OneDrive/SharePoint recycle bin** — retained for 93 days across both recycle bin stages before permanent deletion. Nothing is permanently destroyed without a second manual step.
---
## Headless / scheduled mode
Headless mode uses Application auth only. Credentials are read in priority order:
1. `--settings FILE` — a JSON file you provide
2. Environment variables: `M365_CLIENT_ID`, `M365_TENANT_ID`, `M365_CLIENT_SECRET`
Example settings file:
```json
{
"client_id": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"tenant_id": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"client_secret": "your-secret",
"sources": ["email", "onedrive"],
"options": {
"older_than_days": 365,
"email_body": true,
"attachments": true,
"delta": true
}
}
```
Run:
```bash
python gdpr_scanner.py --headless --output ~/Reports/ --settings settings.json
```
See the full CLI flag reference in `README.md`.
---
## Role classification (staff / student)
GDPRScanner classifies users as **staff** or **student** based on their Microsoft 365 licence SKU. The mapping is in `classification/m365_skus.json`. If users appear as "other", open **Settings → SKU debug** to see which SKU IDs are assigned in your tenant and add any missing ones to `m365_skus.json`.
---
## Troubleshooting
| Symptom | Likely cause |
|---|---|
| 403 on scan start | Admin consent not granted, or wrong permissions added |
| `AADSTS7000215` | Invalid client secret — check it was copied correctly |
| No users listed | `User.Read.All` permission missing or not consented |
| Teams files not appearing | `ChannelMessage.Read.All` or `Team.ReadBasic.All` missing |
| Delta scan not working | Delta tokens require at least one full scan first |