Skip to content

Commit ba3e402

Browse files
committed
log and report login errors
currently the login service only logs an error if a admin unit is not found, but this could be expanded on
1 parent 416c62e commit ba3e402

File tree

5 files changed

+79
-2
lines changed

5 files changed

+79
-2
lines changed

config/authorization/config.ex

+15
Original file line numberDiff line numberDiff line change
@@ -89,6 +89,21 @@ defmodule Acl.UserGroups.Config do
8989
resource_prefix: "http://mu.semte.ch/sessions/"
9090
} } ] },
9191

92+
# // LOGIN ERROR LOGS
93+
%GroupSpec {
94+
name: "error-logs",
95+
useage: [:write],
96+
access: %AlwaysAccessible{},
97+
graphs: [ %GraphSpec{
98+
graph: "http://mu.semte.ch/graphs/login-error-logs",
99+
constraint: %ResourceConstraint{
100+
resource_types: [
101+
"http://persistence.uni-leipzig.org/nlp2rdf/ontologies/rlog#Entry"
102+
]
103+
}}
104+
]
105+
},
106+
92107
# // ORGANIZATION HAS POSSIBLY DUPLICATE USER DATA
93108
%GroupSpec{
94109
name: "org",

config/reports/index.js

+3-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
import historicalReport from "./historicalReport";
22
import monthlyReport from "./monthlyReport";
33
import ivReport from "./ivReport";
4+
import loginErrorReport from './loginErrorReport';
5+
6+
export default [monthlyReport, historicalReport, ivReport, loginErrorReport];
47

5-
export default [monthlyReport, historicalReport, ivReport];

config/reports/loginErrorReport.js

+59
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
import {generateReportFromData} from '../helpers.js';
2+
import { querySudo as query } from '@lblod/mu-auth-sudo';
3+
import { getToday } from "./utils/date.js";
4+
import { MONTHS } from "./utils/constants.js";
5+
6+
export default {
7+
cronPattern: "0 17 * * * *",
8+
name: "dailyLoginErrorReport",
9+
execute: async () => {
10+
const { day, month, year } = getToday();
11+
const metadata = {
12+
title: `Login errors ${day} ${MONTHS[month]} ${year}`,
13+
description: "Dagelijks overzicht van errors gelogged door de login service",
14+
filePrefix: `login-errors-${day}-${month +1 }-${year}`,
15+
};
16+
const data = await fetchErrorLogs();
17+
await generateReportFromData(
18+
data,
19+
[
20+
"message",
21+
"date",
22+
"specificInfo",
23+
"type"
24+
],
25+
metadata
26+
);
27+
}
28+
}
29+
30+
async function fetchErrorLogs() {
31+
const queryString = `
32+
PREFIX rlog: <http://persistence.uni-leipzig.org/nlp2rdf/ontologies/rlog#>
33+
PREFIX dct: <http://purl.org/dc/terms/>
34+
PREFIX ext: <http://mu.semte.ch/vocabularies/ext/>
35+
SELECT ?message ?date ?specificInfo ?type
36+
WHERE {
37+
GRAPH <http://mu.semte.ch/graphs/login-error-logs> {
38+
?log a rlog:Entry ;
39+
rlog:className ?type ;
40+
rlog:message ?message;
41+
rlog:date ?date;
42+
rlog:level ?level;
43+
ext:specificInformation ?specificInfo.
44+
FILTER (?date >= xsd:dateTime(NOW() - "P1D"^^xsd:duration))
45+
}
46+
}
47+
48+
`;
49+
const queryResponse = await query(queryString);
50+
const data = queryResponse.results.bindings.map((entry) => {
51+
return {
52+
message: entry.message.value,
53+
date: entry.date.value,
54+
specificInfo: entry.specificInfo.value,
55+
type: entry.type.value
56+
};
57+
});
58+
return data;
59+
}

config/reports/reportGenerator.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import {generateReportFromData} from '../helpers.js'
1+
import {generateReportFromData} from '../helpers.js';
22
import { querySudo as query } from '@lblod/mu-auth-sudo';
33

44
/**

docker-compose.yml

+1
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,7 @@ services:
8787
MU_APPLICATION_AUTH_CLIENT_SECRET: "secret"
8888
MU_APPLICATION_AUTH_ROLE_CLAIM: "abb_gelinktNotuleren_rol_3d"
8989
LOG_SINK_URL: "http://sink"
90+
LOGS_GRAPH: "http://mu.semte.ch/graphs/login-error-logs"
9091
restart: always
9192
logging: *default-logging
9293
labels:

0 commit comments

Comments
 (0)