En azure function for håndtering av sperringer satt i nettsperre-løsningen.
activateBlocks
-funksjonen er en Azure-tidsstyrt funksjon som aktiverer blokker i MongoDB.
- Fil: src/functions/activateBlocks.js
- Tidsplan:
0-59/5 * * * *
(Hvert 5. minutt fra 0 til 59) - Autentiseringsnivå:
anonymous
Denne funksjonen kjører med jevne mellomrom basert på den angitte tidsplanen. Den aktiverer blokker ved å bruke handleUserActions
-funksjonen.
- handleUserActions: src\lib\jobs\handleUserActions.js
{
"status": 200,
"jsonBody": "..."
}
deactivateBlocks
-funksjonen er en Azure-tidsstyrt funksjon som deaktiverer blokker og flytter dem til historikk-kolleksjonen i MongoDB.
- Fil: src/functions/deactivateBlocks.js
- Tidsplan:
2-59/5 * * * *
(Hvert 5. minutt fra 2 til 59) - Autentiseringsnivå:
anonymous
Denne funksjonen kjører med jevne mellomrom basert på den angitte tidsplanen. Den deaktiverer blokker ved å bruke handleUserActions
-funksjonen og flytter deaktiverte og slettede blokker til historikk-kolleksjonen ved å bruke moveDocuments
-funksjonen.
- handleUserActions: src\lib\jobs\handleUserActions.js
- moveDocuments: src\lib\jobs\handleUserActions.js
{
"status": 200,
"jsonBody": "..."
}
deleteBlock
-funksjonen er en Azure-funksjon som håndterer sletting eller deaktivering av en blokkering i MongoDB.
- Fil: src/functions/deleteBlock.js
- Rute:
deleteBlock/{id}/{action}
- Metoder:
POST
- Autentiseringsnivå:
anonymous
id
: ID-en til blokkeringen som skal slettes eller deaktiveres.action
: Handlingen som skal utføres (delete
ellerdeactivate
).
Denne funksjonen håndterer sletting eller deaktivering av en blokkering basert på statusen til blokkeringen og den oppgitte handlingen. Hvis blokkeringen er aktiv og handlingen er delete
, endres handlingen til deactivate
.
POST /api/deleteBlock/60c72b2f9b1d8e5a5c8b4567/delete
Content-Type: application/json
Status 200
extendedUserInfo
-funksjonen er en Azure-funksjon som henter utvidet informasjon om en bruker basert på deres User Principal Name (UPN).
- Fil: src/functions/extendedUserInfo.js
- Rute:
extendedUserInfo/{upn}
- Metoder:
GET
- Autentiseringsnivå:
anonymous
upn
: User Principal Name (UPN) til brukeren hvis informasjon skal hentes.
Denne funksjonen henter utvidet informasjon om en bruker ved hjelp av UPN. Den bruker getUser
-funksjonen fra ../lib/graph/jobs/users.js for å hente dataene.
GET /api/extendedUserInfo/[email protected]
{
"@odata.context": "https://graph.microsoft.com/v1.0/$metadata#users(id,displayName,givenName,surname,userPrincipalName,companyName,officeLocation,preferredLanguage,mail,jobTitle,mobilePhone,businessPhones)/$entity",
"id": "...",
"displayName": "...",
"givenName": "...",
"surname": "...",
"userPrincipalName": "...",
"companyName": "...",
"officeLocation": "...",
"preferredLanguage": "...",
"mail": "...",
"jobTitle": "...",
"mobilePhone": "...",
"businessPhones": []
}
getBlocks
-funksjonen er en Azure-funksjon som henter blokkeringsdata fra MongoDB basert på status og UPN.
- Fil: src/functions/getBlocks.js
- Rute:
getBlocks/{status}/{upn}
- Metoder:
GET
- Autentiseringsnivå:
anonymous
status
: Statusen til blokkeringene som skal hentes. Kan være en kommaseparert streng med flere statuser (pending
,active
,expired
).upn
: User Principal Name (UPN) til brukeren hvis blokkeringsdata skal hentes.
Denne funksjonen henter blokkeringsdata fra MongoDB basert på den oppgitte statusen og UPN. Den validerer statusparameteren og håndterer både enkeltstatus og kommaseparerte strenger med flere statuser.
GET /api/getBlocks/active,pending/[email protected]
[
{
"_id": "60c72b2f9b1d8e5a5c8b4567",
"status": "pending",
"students": [
{
"@odata.type": "#microsoft.graph.user",
"id": "...",
"displayName": "...",
"officeLocation": "...",
"userPrincipalName": "...",
"mail": "..."
},
// flere students
],
"teacher": {
"teacherId": "...",
"userPrincipalName": "...",
"displayName": "...",
"officeLocation": "..."
},
"blockedGroup": {
"@odata.type": "#microsoft.graph.group",
"id": "...",
"displayName": "...",
"mail": "...",
"description": "..."
},
"typeBlock": {
"type": "...",
"groupId": "..."
},
"createdBy": {
"userId": "...",
"userPrincipalName": "...",
"officeLocation": "...",
"displayName": "..."
},
"startBlock": "timeStamp",
"endBlock": "timeStamp",
"createdTimeStamp": "timeStamp",
"updated": []
}
]
getGroupMembers
-funksjonen er en Azure-funksjon som henter medlemmer av en spesifisert gruppe.
- Fil: src/functions/getGroupMembers.js
- Rute:
getGroupMembers/{groupId}/{onlyStudents?}
- Metoder:
GET
,POST
- Autentiseringsnivå:
anonymous
groupId
: ID-en til gruppen hvis medlemmer skal hentes.onlyStudents
(valgfri): Hvis satt tiltrue
, hentes kun elever.
Denne funksjonen henter medlemmer av en spesifisert gruppe ved hjelp av groupId
. Hvis onlyStudents
-parameteren er satt til true
, hentes kun elever. Den bruker getGroupMembers
-funksjonen fra ../lib/graph/jobs/groups.js for å hente dataene.
GET /api/getGroupMembers/groupId123/true
[
{
"@odata.type": "#microsoft.graph.user",
"id": "...",
"displayName": "...",
"mail": "...",
"officeLocation": null
},
{
"@odata.type": "#microsoft.graph.user",
"id": "...",
"displayName": "...",
"mail": "...",
"officeLocation": null
}
]
getOwnedGroups
-funksjonen er en Azure-funksjon som henter grupper eid av en spesifisert bruker.
- Fil: src/functions/getOwnedGroups.js
- Rute:
getOwnedGroups/{upn}
- Metoder:
GET
,POST
- Autentiseringsnivå:
anonymous
upn
: User Principal Name (UPN) til brukeren hvis eide grupper skal hentes.
Denne funksjonen henter grupper eid av en spesifisert bruker ved hjelp av UPN. Den bruker getOwnedObjects
-funksjonen fra ../lib/graph/jobs/groups.js for å hente dataene.
GET /api/getOwnedGroups/[email protected]
[
{
"@odata.type": "#microsoft.graph.group",
"id": "...",
"displayName": "...",
"mail": "...",
"description": "..."
},
{
"@odata.type": "#microsoft.graph.group",
"id": "...",
"displayName": "...",
"mail": "...",
"description": "..."
}
]
history
-funksjonen er en Azure-funksjon som henter historiske data basert på spesifiserte filtre som lærer, kurs og skole.
- Fil: src/functions/history.js
- Rute:
history/{teacher?}/{course?}/{school?}
- Metoder:
GET
- Autentiseringsnivå:
anonym
teacher
(valgfri): User Principal Name (UPN) til læreren.course
(valgfri): Visningsnavnet til den blokkerte gruppen (kurset).school
(valgfri): Kontorplasseringen til læreren (skolen).
Denne funksjonen bygger et filterobjekt basert på de oppgitte parameterne og søker i MongoDB historie
-collection etter samsvarende poster. Resultatene sorteres i synkende rekkefølge etter _id
.
GET /api/history/[email protected]/courseName/schoolName
[
{
"_id": "60c72b2f9b1d8e5a5c8b4567",
"status": "expired",
"students": [
{
"@odata.type": "#microsoft.graph.user",
"id": "...",
"displayName": "...",
"officeLocation": "...",
"userPrincipalName": "...",
"mail": "..."
},
// flere students
],
"teacher": {
"teacherId": "...",
"userPrincipalName": "...",
"displayName": "...",
"officeLocation": "..."
},
"blockedGroup": {
"@odata.type": "#microsoft.graph.group",
"id": "...",
"displayName": "...",
"mail": "...",
"description": "..."
},
"typeBlock": {
"type": "...",
"groupId": "..."
},
"createdBy": {
"userId": "...",
"userPrincipalName": "...",
"officeLocation": "...",
"displayName": "..."
},
"startBlock": "timeStamp",
"endBlock": "timeStamp",
"createdTimeStamp": "timeStamp",
"updated": []
}
]
submitBlock
-funksjonen er en Azure-funksjon som legger til en ny blokkering i MongoDB.
- Fil: src/functions/submitBlock.js
- Rute:
submitBlock
- Metoder:
POST
- Autentiseringsnivå:
anonymous
Funksjonen forventer en JSON-body med følgende struktur:
teacher
: Informasjon om læreren som setter blokkeringen.blockedGroup
: Informasjon om gruppen som blir blokkert.- Andre relevante felt for blokkeringen.
Denne funksjonen mottar en JSON-body med informasjon om en ny blokkering og legger den til i MongoDB blocksCollection
.
POST /api/submitBlock
Content-Type: application/json
{
{
"status": "pending",
"students": [
{
"@odata.type": "#microsoft.graph.user",
"id": "...",
"displayName": "...",
"userPrincipalName": "...",
"officeLocation": "...",
"mail": "..."
},
// flere students
],
"teacher": {
"teacherId": "...",
"userPrincipalName": "...",
"displayName": "...",
"officeLocation": "..."
},
"blockedGroup": {
"@odata.type": "#microsoft.graph.group",
"id": "...",
"displayName": "...",
"mail": "...",
"description": "..."
},
"typeBlock": {
"type": "...",
"groupId": "undefined"
},
"createdBy": {
"userId": "...",
"userPrincipalName": "...",
"officeLocation": "...",
"displayName": "..."
},
"startBlock": "timeStamp",
"endBlock": "timeStamp",
"createdTimeStamp": "timeStamp",
"updated": []
}
}
{
"acknowledged": true,
"insertedId": "60c72b2f9b1d8e5a5c8b4567"
}
updateBlock
-funksjonen er en Azure-funksjon som oppdaterer en eksisterende blokkering i MongoDB.
- Fil: src/functions/updateBlock.js
- Rute:
updateBlock
- Metoder:
PUT
- Autentiseringsnivå:
anonymous
Funksjonen forventer en JSON-body med følgende struktur:
filter
: Et objekt som spesifiserer kriteriene for å finne blokkeringen som skal oppdateres.update
: Et objekt som spesifiserer feltene som skal oppdateres.
Denne funksjonen mottar en JSON-body med informasjon om hvilken blokkering som skal oppdateres og hvilke felt som skal endres. Den oppdaterer deretter den spesifiserte blokkeringen i MongoDB.
PUT /api/updateBlock
Content-Type: application/json
Eksempel: Legge til en elev.
{
{
"status": "pending",
"students": [
{
"@odata.type": "#microsoft.graph.user",
"id": "...",
"displayName": "...",
"userPrincipalName": "...",
"officeLocation": "...",
"mail": "..."
},
// flere students
],
"teacher": {
"teacherId": "...",
"userPrincipalName": "...",
"displayName": "...",
"officeLocation": "..."
},
"blockedGroup": {
"@odata.type": "#microsoft.graph.group",
"id": "...",
"displayName": "...",
"mail": "...",
"description": "..."
},
"typeBlock": {
"type": "...",
"groupId": "undefined"
},
"createdBy": {
"userId": "...",
"userPrincipalName": "...",
"officeLocation": "...",
"displayName": "..."
},
"startBlock": "timeStamp",
"endBlock": "timeStamp",
"createdTimeStamp": "timeStamp",
"updated": [
{
"updatedBy": {
"displayName": "...",
"teacherId": "...",
"userPrincipalName": "..."
},
"updatedTimeStamp": "2025-01-08T12:03:18.639Z",
"studentsToRemove": [],
"studentsToAdd": [
{
{
"@odata.type": "#microsoft.graph.user",
"id": "...",
"displayName": "...",
"userPrincipalName": "...",
"officeLocation": "...",
"mail": "..."
}
}
],
"typeBlockChange": {},
"dateBlockChange": {
"start": {},
"end": {}
}
}
]
}
}
{
"acknowledged": true,
"modifiedCount": 1
}
validatePermission
-funksjonen er en Azure-funksjon som validerer om en forespørrer har tillatelse til å redigere en lærer basert på spesifikke kriterier.
- Fil: src/functions/validatePermission.js
- Rute:
validatePermission
- Metoder:
POST
- Autentiseringsnivå:
anonymous
Funksjonen forventer en JSON-body med følgende struktur:
requestorUPN
: User Principal Name (UPN) til forespørreren.teacherToBeEditedUPN
: User Principal Name (UPN) til læreren som skal redigeres.
Denne funksjonen validerer om forespørreren har tillatelse til å redigere læreren basert på følgende kriterier:
- Hvis forespørreren er en del av de tillatte selskapene, hoppes valideringen over.
- Hvis forespørreren ikke er en del av de tillatte selskapene, sjekkes det om forespørreren og læreren som skal redigeres er på samme kontorplassering.
POST /api/validatePermission
Content-Type: application/json
{
"requestorUPN": "[email protected]",
"teacherToBeEditedUPN": "[email protected]"
}
Om alt gikk bra:
{
"requestor": {
"@odata.context": "https://graph.microsoft.com/v1.0/$metadata#users(id,displayName,givenName,surname,userPrincipalName,companyName,officeLocation,preferredLanguage,mail,jobTitle,mobilePhone,businessPhones)/$entity",
"id": "...",
"displayName": "...",
"givenName": "...",
"surname": "...",
"userPrincipalName": "...",
"companyName": "...",
"officeLocation": "...", // Match her, eller skipValidation === true
"preferredLanguage": null,
"mail": "...",
"jobTitle": "...",
"mobilePhone": "...",
"businessPhones": []
},
"teacher": {
"@odata.context": "https://graph.microsoft.com/v1.0/$metadata#users(id,displayName,givenName,surname,userPrincipalName,companyName,officeLocation,preferredLanguage,mail,jobTitle,mobilePhone,businessPhones)/$entity",
"id": "...",
"displayName": "...",
"givenName": "...",
"surname": "...",
"userPrincipalName": "...",
"companyName": "...",
"officeLocation": "...", // Match her, eller skipValidation === true
"preferredLanguage": null,
"mail": "...",
"jobTitle": "...",
"mobilePhone": "...",
"businessPhones": []
}
}
Status 403 Forbidden om valideringen ikke gikk bra.
TODO!
createStats
-funksjonen er en funksjon som oppretter statistikk for en blokkering i MongoDB.
block
: Objektet som representerer blokkeringen.block._id
: ID-en til blokkeringen.block.teacher.userPrincipalName
: User Principal Name (UPN) til læreren som eier teamet.block.createdBy.userPrincipalName
: User Principal Name (UPN) til personen som opprettet blokkeringen.block.typeBlock.type
: Typen blokkering.block.students
: Array av studenter i blokkeringen.block.updated
: Array av oppdateringer gjort på blokkeringen.
action
: Handlingen som skal utføres for statistikken.
Denne funksjonen oppretter statistikk for en blokkering ved å hente informasjon om læreren som eier teamet og personen som opprettet blokkeringen. Den bygger deretter en forespørsel og sender den til statistikk-API-et.
Dokumentasjon finner du her: azf-statistics
handleUserActions
-funksjonen er en funksjon som håndterer brukerhandlinger som aktivering og deaktivering av blokker.
action
: Handlingen som skal utføres (activate
ellerdeactivate
).
Denne funksjonen håndterer brukerhandlinger ved å aktivere eller deaktivere blokker basert på den oppgitte handlingen.
moveDocuments
-funksjonen er en funksjon som flytter dokumenter fra en kildekolleksjon til en målkolleksjon i MongoDB basert på et filter.
sourceCollection
: Navnet på kildekolleksjonen.targetCollection
: Navnet på målkolleksjonen.filter
: Et objekt som spesifiserer kriteriene for å finne dokumentene som skal flyttes.limit
: Maksimalt antall dokumenter som skal flyttes.
Denne funksjonen flytter dokumenter fra en kildekolleksjon til en målkolleksjon basert på et filter. Den deler dokumentene inn i batcher av en spesifisert størrelse, setter inn hver batch i målkolleksjonen og sletter deretter hver batch fra kildekolleksjonen.
groups.js
inneholder funksjoner for å håndtere grupper i Microsoft Graph API, inkludert å hente eide objekter, hente gruppemedlemmer, legge til gruppemedlemmer og fjerne gruppemedlemmer.
Henter objekter eid av en bruker.
upn
: User Principal Name (UPN) til brukeren.
Henter medlemmer av en gruppe.
groupId
: ID-en til gruppen.
Legger til medlemmer i en gruppe.
groupId
: ID-en til gruppen.members
: Array av medlemmer som skal legges til.
Fjerner medlemmer fra en gruppe.
groupId
: ID-en til gruppen.members
: Array av medlemmer som skal fjernes.
users.js
inneholder funksjoner for å hente brukerdata fra Microsoft Graph API basert på User Principal Name (UPN).
Henter brukerdata fra Microsoft Graph API basert på den oppgitte User Principal Name (UPN).
upn
: User Principal Name (UPN) til brukeren.
Denne funksjonen henter detaljer om en bruker fra Microsoft Graph API ved hjelp av UPN. Den returnerer et objekt med brukerens detaljer.