Compare commits

..

1 commit

Author SHA1 Message Date
83bc490740 Make support mail contact configurable
Still fails because the config is not available in the base template.
2024-01-16 10:27:44 +01:00
17 changed files with 130 additions and 119 deletions

View file

@ -7,8 +7,7 @@ e.g. by executing `go version`.
Initialize the database. For developing, we recommend using sqlite: Initialize the database. For developing, we recommend using sqlite:
user@host:path/to/repo$ sqlite3 officeHours.db -init officeHoursSQLite.sql user@host:path/to/repo$ sqlite3 officeHours.db -init officeHoursSQLite.sql
sqlite> .read dummydata/rooms.sql sqlite> .read dummydatasqlite.sql
sqlite> .read dummydata/summerCourses.sql
Now start the development webserver, note that you need to manually Now start the development webserver, note that you need to manually
restart it to code changes take effect. restart it to code changes take effect.

View file

@ -46,6 +46,7 @@ type Config struct {
SmtpUseAuth bool // Set whether to use authentication on the smarthosthost SmtpUseAuth bool // Set whether to use authentication on the smarthosthost
SmtpIdentity string // Smarthost username SmtpIdentity string // Smarthost username
SmtpPassword string // Smarthost password SmtpPassword string // Smarthost password
SupportMail string // separate mail address for support contact
} }
SQL struct { SQL struct {
Type string // Can be "SQLite" or "Mysql" Type string // Can be "SQLite" or "Mysql"
@ -143,6 +144,15 @@ func validateConfig(conf *Config) error {
err = fmt.Errorf("Validating config: Mail FromName could not be parsed (%w)", mailFromNameErr) err = fmt.Errorf("Validating config: Mail FromName could not be parsed (%w)", mailFromNameErr)
log.Println(err) log.Println(err)
} }
supportMail, mailSupportMailErr := mail.ParseAddress(string(conf.Mailer.SupportMail))
if !(mailSupportMailErr == nil) {
err = fmt.Errorf("Validating config: SupportMail could not be parsed (%w)", mailSupportMailErr)
log.Println(err)
}
if !(supportMail.Name == "") {
err = fmt.Errorf("Validating config: SupportMail must not contain a name")
log.Println(err)
}
if !(conf.SQL.Type == "SQLite" || conf.SQL.Type == "Mysql") { if !(conf.SQL.Type == "SQLite" || conf.SQL.Type == "Mysql") {
err = fmt.Errorf("Validating config: SQL type must be 'SQLite' or 'Mysql', but is '%s'.", conf.SQL.Type) err = fmt.Errorf("Validating config: SQL type must be 'SQLite' or 'Mysql', but is '%s'.", conf.SQL.Type)
log.Println(err.Error()) log.Println(err.Error())

View file

@ -28,7 +28,8 @@
"smtpPort": 25, "smtpPort": 25,
"smtpUseAuth": false, "smtpUseAuth": false,
"smtpIdentity": "", "smtpIdentity": "",
"smtpPassword": "" "smtpPassword": "",
"supportMail": "officeHoursSupport@localhost"
}, },
"SQL": { "SQL": {
"type": "SQLite", "type": "SQLite",

View file

@ -1,7 +0,0 @@
INSERT INTO `room` (name, max_occupy) VALUES
('S2|15-333', 1),
('S2|15-336', 2),
('S2|15-345', 2),
('S2|15-415', 1),
('S2|15-444', 1),
('Sonstige', 1024);

View file

@ -1,37 +0,0 @@
INSERT INTO `course` (name) VALUES
('Algorithmic Discrete Mathematics'),
('Analysis II'),
('Analysis II (engl.)'),
('Aussagen- und Prädikatenlogik'),
('Discrete Optimization'),
('Einführung in die Algebra'),
('Einführung in die Finanzmathematik'),
('Einführung in die mathematische Modellierung'),
('Einführung in die Programmierung'),
('Einführung in die Stochastik'),
('Elementare PDE'),
('Elementare Zahlentheorie'),
('Graph Theory'),
('Höhere Mathematik II'),
('Integrationstheorie'),
('LA für Physik und Lehramt'),
('Linear Algebra II (engl.)'),
('Lineare Algebra II'),
('Logik und Grundlagen'),
('Mathe für Chemiker'),
('Mathe II für Informatik'),
('Mathe II für Bauwesen'),
('Mathe II für ET'),
('Mathe II für Maschinenbau'),
('Mathe IV für Maschinenbau'),
('Mathe IV (ET) / Mathe III (Inf) / Praktische Mathe (MEd)'),
('Mathe für MINT'),
('Mathe & Statistik für Biologen'),
('Mathematik im Kontext'),
('Model Theory'),
('Nichtlineare Optimierung'),
('Numerische Lineare Algebra'),
('Riemannsche Flächen'),
('Sobolev Spaces'),
('Topologie'),
('Vertrauenspersonen');

View file

@ -1,41 +0,0 @@
INSERT INTO `course` (name) VALUES
('Algebra'),
('Analysis I'),
('Analysis I (engl.)'),
('Applied Proof Theory'),
('Automaten, Formale Sprachen und Entscheidbarkeit'),
('Complex Analysis'),
('Differentialgeometrie'),
('Einführung in die Numerische Mathematik'),
('Einführung in die Optimierung'),
('Einführung in die Programmierung'),
('Funktionalanalysis'),
('Geometrie für Lehramt'),
('Gewöhnliche Differentialgleichungen'),
('Höhere Mathematik I'),
('Introduction to mathematical logic'),
('LA für Physik und Lehramt'),
('Linear Algebra I (engl.)'),
('Lineare Algebra I'),
('Mathe für Chemiker'),
('Mathe I für Informatik'),
('Mathe I für Maschinenbau'),
('Mathe I für Bau'),
('Mathe I für ET'),
('Mathe III für Maschinenbau'),
('Mathe III für Bau'),
('Mathe III ET'),
('Mathe IV für Maschinenbau'),
('Mathe IV (ET) / Mathe III (Inf) / Praktische Mathe (MEd)'),
('Mathe für MINT'),
('Mathe & Statistik für Biologen'),
('Mathematik als gemeinsame Sprache der Naturwissenschaften'),
('Numerik gewöhnlicher Differentialgleichungen'),
('Numerische Mathe für MB (IV)'),
('Parabolische PDEs'),
('Partial Differential Equations'),
('Probability Theory'),
('Statistik I für Humanwissenschaftler'),
('Statistik I für WI'),
('Vertrauenspersonen'),
('Wahrscheinlichkeitstheorie');

91
dummydatasqlite.sql Normal file
View file

@ -0,0 +1,91 @@
INSERT INTO `room` (name, max_occupy) VALUES
('S2|15-333', 1),
('S2|15-336', 2),
('S2|15-345', 2),
('S2|15-415', 1),
('S2|15-444', 1),
('Sonstige', 1024);
INSERT INTO `course` (name) VALUES
('Algebra'),
('Algebraische Geometrie'),
('Algebraische Kurven'),
('Algebraische Topologie'),
('Algorithmic Discrete Mathematics'),
('Analysis I (engl.)'),
('Analysis I'),
('Analysis II (engl.)'),
('Analysis II'),
('Applied Proof Theory'),
('Aussagen- und Prädikatenlogik'),
('Automaten, Formale Sprachen und Entscheidbarkeit'),
('Banach- und C*-Algebren'),
('Classical and Non-Classical Model Theory'),
('Complex Analysis'),
('Darstellende Geometrie'),
('Darstellungstheorie'),
('Differentialgeometrie'),
('Differentialgeometrie für VI'),
('Diskrete Mathematik'),
('Diskrete Optimierung'),
('Einführung in die Algebra'),
('Einführung in die Finanzmathematik'),
('Einführung in die Numerische Mathematik'),
('Einführung in die Optimierung'),
('Einführung in die Programmierung'),
('Einführung in die Stochastik'),
('Einführung in die mathematische Modellierung'),
('Elementare PDE'),
('Elementare Zahlentheorie'),
('Funktionalanalysis'),
('Funktionalanalysis II'),
('Geometrie für Lehramt'),
('Gewöhnliche Differentialgleichungen'),
('Höhere Mathematik I'),
('Höhere Mathematik II'),
('Integrationstheorie'),
('Introduction to mathematical logic'),
('Kurvenschätzung'),
('LA für Physik und Lehramt'),
('Lebensversicherungsmathematik'),
('Linear Algebra I (engl.)'),
('Lineare Algebra I'),
('Linear Algebra II (engl.)'),
('Lineare Algebra II'),
('Logics of Knowledge and Information'),
('Manifolds'),
('Mathe für Chemiker'),
('Mathe I für Informatik'),
('Mathe I für Maschinenbau'),
('Mathe I für Bau'),
('Mathe I für ET'),
('Mathe II für Informatik'),
('Mathe II für Bauwesen'),
('Mathe II für ET'),
('Mathe II für Maschinenbau'),
('Mathe III für Maschinenbau'),
('Mathe III für Bau'),
('Mathe III ET'),
('Mathe IV für Maschinenbau'),
('Mathe IV (ET) / Mathe III (Inf) / Praktische Mathe (MEd)'),
('Mathe für MINT'),
('Mathe & Statistik für Biologen'),
('Mathematik als gemeinsame Sprache der Naturwissenschaften'),
('Mathematik im Kontext'),
('Mathematische Grundlagen der Quantenmechanik'),
('Mathematische Statistik'),
('Nichtlineare Optimierung'),
('Numerik gewöhnlicher Differentialgleichungen'),
('Numerische Lineare Algebra'),
('Numerische Mathe für MB (IV)'),
('Parabolische PDEs'),
('Partial Differential Equations I'),
('Probability Theory'),
('Riemannsche Flächen'),
('Schadenversicherungsmathematik'),
('Sobolev Spaces'),
('Spieltheorie'),
('Statistik I für Humanwissenschaftler'),
('Statistik I für WI'),
('Stochastische Prozesse I'),
('Topologie'),
('Wahrscheinlichkeitstheorie');

6
go.mod
View file

@ -2,8 +2,6 @@ module officeHours
go 1.18 go 1.18
require github.com/mattn/go-sqlite3 v1.14.22 require github.com/mattn/go-sqlite3 v1.14.19
require github.com/go-sql-driver/mysql v1.8.1 require github.com/go-sql-driver/mysql v1.7.1
require filippo.io/edwards25519 v1.1.0 // indirect

10
go.sum
View file

@ -1,6 +1,4 @@
filippo.io/edwards25519 v1.1.0 h1:FNf4tywRC1HmFuKW5xopWpigGjJKiJSV0Cqo0cJWDaA= github.com/go-sql-driver/mysql v1.7.1 h1:lUIinVbN1DY0xBg0eMOzmmtGoHwWBbvnWubQUrtU8EI=
filippo.io/edwards25519 v1.1.0/go.mod h1:BxyFTGdWcka3PhytdK4V28tE5sGfRvvvRV7EaN4VDT4= github.com/go-sql-driver/mysql v1.7.1/go.mod h1:OXbVy3sEdcQ2Doequ6Z5BW6fXNQTmx+9S1MCJN5yJMI=
github.com/go-sql-driver/mysql v1.8.1 h1:LedoTUt/eveggdHS9qUFC1EFSa8bU2+1pZjSRpvNJ1Y= github.com/mattn/go-sqlite3 v1.14.19 h1:fhGleo2h1p8tVChob4I9HpmVFIAkKGpiukdrgQbWfGI=
github.com/go-sql-driver/mysql v1.8.1/go.mod h1:wEBSXgmK//2ZFJyE+qWnIsVGmvmEKlqwuVSjsCm7DZg= github.com/mattn/go-sqlite3 v1.14.19/go.mod h1:2eHXhiwb8IkHr+BDWZGa96P6+rkvnG63S2DGjv9HUNg=
github.com/mattn/go-sqlite3 v1.14.22 h1:2gZY6PC6kBnID23Tichd1K+Z0oS6nE/XwU+Vz/5o4kU=
github.com/mattn/go-sqlite3 v1.14.22/go.mod h1:Uh1q+B4BYcTPb+yiD3kU8Ct7aC0hY9fxUwlHK0RXw+Y=

View file

@ -1,8 +1,8 @@
{{define "title"}}Sprechstunde anlegen Fehler{{end}} {{define "title"}}Sprechstunde anlegen Fehler{{end}}
{{define "content"}} {{define "content"}}
<div class="col-md-8 offset-md-2 alert alert-danger"> <div class="col-md-8 offset-md-2">
Irgendetwas ist schief gegangen. Bitte sende folgende Daten an <a href="mailto:sprechstundentool@mathebau.de">sprechstundentool@mathebau.de</a> mit einer Beschreibung, was du tun wolltest. Irgendetwas ist schief gegangen. Bitte sende folgende Daten an <a href="mailto:{{.Config.Mailer.SupportMail}}">{{.Config.Mailer.SupportMail}}</a> mit einer Beschreibung, was du tun wolltest.
<br> <br>
{{.}} {{.}}
</div> </div>

View file

@ -36,7 +36,7 @@
<div class="form-floating mb-3"> <div class="form-floating mb-3">
<div class="form-check"> <div class="form-check">
<input class="form-check-input" name="subscribeToMailinglist" id="subscribeToMailinglist" type="checkbox" value="subscribe" {{if eq .SubscribeToMailinglist true}}checked{{end}}> <input class="form-check-input" name="subscribeToMailinglist" id="subscribeToMailinglist" type="checkbox" value="subscribe" {{if eq .SubscribeToMailinglist true}}checked{{end}}>
<label class="form-check-label" for="subscribeToMailinglist"><a href="https://lists.mathebau.de/postorius/lists/shk.lists.mathebau.de/">Mailingliste für SHK</a> abonnieren</label> <label class="form-check-label" for="subscribeToMailinglist"><a href="https://lists.mathebau.de/postorius/lists/shk.mathebau.de/">Mailingliste für SHK</a> abbonieren</label>
</div> </div>
</div> </div>
@ -50,7 +50,7 @@
<label for="veranstaltung">Veranstaltung</label> <label for="veranstaltung">Veranstaltung</label>
<div class="form-text"> <div class="form-text">
Wenn du eine Veranstaltung hier vermisst, schreibe an Wenn du eine Veranstaltung hier vermisst, schreibe an
<a href="mailto:sprechstundentool@mathebau.de?subject=Sprechstundentool: Neue Veranstaltung&body=Hey liebe Sprechstundentool-Admins,%0D%0A%0D%0Ameine Veranstaltung fehlt im Auswahlmenü.%0D%0AEs ist die Veranstaltung%0D%0A%0D%0AViele Grüße%0D%0A" tabindex="-1">sprechstundentool@mathebau.de</a>. <a href="mailto:{{.Config.Mailer.SupportMail}}?subject=Sprechstundentool: Neue Veranstaltung&body=Hey liebe Sprechstundentool-Admins,%0D%0A%0D%0Ameine Veranstaltung fehlt im Auswahlmenü.%0D%0AEs ist die Veranstaltung%0D%0A%0D%0AViele Grüße%0D%0A" tabindex="-1">{{.Config.Mailer.SupportMail}}</a>.
</div> </div>
</div> </div>

View file

@ -1,14 +1,14 @@
{{define "title"}}Sprechstunde anlegen{{end}} {{define "title"}}Sprechstunde anlegen{{end}}
{{define "content"}} {{define "content"}}
<div class="col-md-8 offset-md-2 alert alert-success"> <div class="col-md-8 offset-md-2">
<div class="alert alert-danger">
Die Mailzustellung an Web und GMX ist gerade gestört.
Falls deine Mailadresse dorthin weiterleitet und du die Bestätigung nicht erhältst,
melde dich bei <a href="mailto:{{.Config.Mailer.SupportMail}}">{{.Config.Mailer.SupportMail}}</a>.
</div>
Die Sprechstunde wurde angelegt. Die Sprechstunde wurde angelegt.
Du solltest eine Mail mit einem Aktivierungslink erhalten haben. Du solltest eine Mail mit einem Aktivierungslink erhalten haben.
Klicke auf diesen, um die Sprechstunde öffentlich anzuzeigen. Klicke auf diesen, um die Sprechstunde öffentlich anzuzeigen.
</div> </div>
<div class="col-md-8 offset-md-2 alert alert-warning">
Wir haben vermehrt erfahren, dass Mails, die an GMX oder Web.de weitergeleitet werden, nicht zugestellt werden.
Falls du davon betroffen bist, melde dich bei <a href="mailto:sprechstundentool@mathebau.de">sprechstundentool@mathebau.de</a>.
</div>
{{end}} {{end}}

View file

@ -13,7 +13,7 @@
</head> </head>
<body> <body>
<div class="container"> <div class="container">
<nav class="col-md-8 offset-md-2 bg-secondary bg-gradient mt-3 mb-2 p-3 rounded" style="--bs-bg-opacity: .3;"> <div class="col-md-8 offset-md-2 bg-secondary bg-gradient mt-3 mb-2 p-3 rounded" style="--bs-bg-opacity: .3;">
<h5 class="text-center m-1">Sprechstunden für Matheveranstaltungen an der TU Darmstadt</h5> <h5 class="text-center m-1">Sprechstunden für Matheveranstaltungen an der TU Darmstadt</h5>
<p class="text-center mb-0"> <p class="text-center mb-0">
<a href="/">Startseite</a> <a href="/">Startseite</a>
@ -22,20 +22,19 @@
&bull; &bull;
<a href="/deleteOfficeHour">Sprechstunde löschen</a> <a href="/deleteOfficeHour">Sprechstunde löschen</a>
</p> </p>
</nav> </div>
<main id="content"> <div id="content">
<h1 class="h3 m-1 mb-3 text-center">{{template "title" .}}</h1> <h1 class="h3 m-1 mb-3 text-center">{{template "title" .}}</h1>
{{block "content" .}}Du solltest dies nicht sehen.{{end}} {{block "content" .}}Du solltest dies nicht sehen.{{end}}
</main> </div>
</div> </div>
<footer class="container"> <footer class="container">
<div class="col-md-8 offset-md-2 bg-secondary bg-gradient my-3 p-3 rounded" style="--bs-bg-opacity: .3;"> <div class="col-md-8 offset-md-2 bg-secondary bg-gradient my-3 p-3 rounded" style="--bs-bg-opacity: .3;">
&COPY; <a class="text-body" href="https://mathebau.de/">Fachschaft Mathematik, TU Darmstadt</a> &COPY; <a class="text-body" href="https://mathebau.de/">Fachschaft Mathematik, TU Darmstadt</a>
<br> <br>
<!-- NOTE: when updating this hard coded email adress, also update it in addMask.html --> Technische Fragen an <a href="mailto:{{.Config.Mailer.SupportMail}}">{{.Config.Mailer.SupportMail}}</a>
Technische Fragen an <a href="mailto:sprechstundentool@mathebau.de">sprechstundentool@mathebau.de</a>
<br> <br>
Quellcode und Featurewünsche:&nbsp;<a href="https://gitea.mathebau.de/Fachschaft/sprechstunden-go">Gitea-Repository</a> Quellcode und Featurewünsche:&nbsp;<a href="https://gitea.mathebau.de/Fachschaft/sprechstunden-go">Gitea-Repository</a>
</div> </div>

View file

@ -1,7 +1,7 @@
{{define "title"}}Sprechstunde löschen Fehler{{end}} {{define "title"}}Sprechstunde löschen Fehler{{end}}
{{define "content"}} {{define "content"}}
<div class="col-md-8 offset-md-2 alert alert-danger"> <div class="col-md-8 offset-md-2">
Das Löschen der Sprechstunde ist fehlgeschlagen: {{.Error}} Das Löschen der Sprechstunde ist fehlgeschlagen: {{.Error}}
</div> </div>
{{end}} {{end}}

View file

@ -1,7 +1,7 @@
{{define "title"}}Sprechstunde löschen{{end}} {{define "title"}}Sprechstunde löschen{{end}}
{{define "content"}} {{define "content"}}
<div class="col-md-8 offset-md-2 alert alert-info"> <div class="col-md-8 offset-md-2">
Du solltest eine Mail mit einem Bestätigungslink erhalten haben. Du solltest eine Mail mit einem Bestätigungslink erhalten haben.
Klicke auf diesen, um die Sprechstunde endgültig zu löschen. Klicke auf diesen, um die Sprechstunde endgültig zu löschen.
</div> </div>

View file

@ -1,8 +1,8 @@
{{define "title"}}Anfrage ausführen fehlgeschlagen{{end}} {{define "title"}}Anfrage ausführen fehlgeschlagen{{end}}
{{define "content"}} {{define "content"}}
<div class="col-md-8 offset-md-2 alert alert-danger"> <div class="col-md-8 offset-md-2">
Irgendetwas ist schief gegangen. Bitte sende folgende Daten an <a href="mailto:sprechstundentool@mathebau.de">sprechstundentool@mathebau.de</a> mit einer Beschreibung, was du tun wolltest. Irgendetwas ist schief gegangen. Bitte sende folgende Daten an <a href="mailto:{{.Config.Mailer.SupportMail}}">{{.Config.Mailer.SupportMail}}</a> mit einer Beschreibung, was du tun wolltest.
<br> <br>
{{.}} {{.}}
</div>" </div>"

View file

@ -1,7 +1,7 @@
{{define "title"}}Anfrage ausgeführt{{end}} {{define "title"}}Anfrage ausgeführt{{end}}
{{define "content"}} {{define "content"}}
<div class="col-md-8 offset-md-2 alert alert-success"> <div class="col-md-8 offset-md-2">
Deine Anfrage wurde ausgeführt. Deine Anfrage wurde ausgeführt.
</div> </div>
{{end}} {{end}}