Footer in eigenes Template verschoben und Logging verbessert
This commit is contained in:
parent
c38286bcc5
commit
4f5dc053a0
14 changed files with 40 additions and 44 deletions
|
@ -40,6 +40,9 @@ type Config struct {
|
||||||
MysqlPort int
|
MysqlPort int
|
||||||
MysqlDatabase string
|
MysqlDatabase string
|
||||||
}
|
}
|
||||||
|
Tutor struct {
|
||||||
|
MailSuffix string
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// ReadConfigFile takes a file path as an argument and attempts to
|
// ReadConfigFile takes a file path as an argument and attempts to
|
||||||
|
@ -48,15 +51,18 @@ type Config struct {
|
||||||
func ReadConfigFile(filename string, conf *Config) error {
|
func ReadConfigFile(filename string, conf *Config) error {
|
||||||
configData, err := ioutil.ReadFile(filename)
|
configData, err := ioutil.ReadFile(filename)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
log.Printf("Error reading config file: %s", err.Error())
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
err = json.Unmarshal(configData, conf)
|
err = json.Unmarshal(configData, conf)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
log.Printf("Error parsing config file as json: %s", err.Error())
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
return validateConfig(conf)
|
return validateConfig(conf)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Checks config for sane values (e.g. correct port range or database type).
|
||||||
func validateConfig(conf *Config) error {
|
func validateConfig(conf *Config) error {
|
||||||
var err error
|
var err error
|
||||||
if !(conf.Server.ListenPort >= 1 && conf.Server.ListenPort <= 65535) {
|
if !(conf.Server.ListenPort >= 1 && conf.Server.ListenPort <= 65535) {
|
||||||
|
@ -64,7 +70,7 @@ func validateConfig(conf *Config) error {
|
||||||
log.Println(err.Error())
|
log.Println(err.Error())
|
||||||
}
|
}
|
||||||
if !(conf.Server.Protocol == "http" || conf.Server.Protocol == "https") {
|
if !(conf.Server.Protocol == "http" || conf.Server.Protocol == "https") {
|
||||||
err = fmt.Errorf("Validating config: Server protocol must be http or https, but is '%s'.", conf.Server.Protocol)
|
err = fmt.Errorf("Validating config: Server protocol must be 'http' or 'https', but is '%s'.", conf.Server.Protocol)
|
||||||
log.Println(err.Error())
|
log.Println(err.Error())
|
||||||
}
|
}
|
||||||
if !(conf.Date.MinuteGranularity >= 1 && conf.Date.MinuteGranularity <= 60) {
|
if !(conf.Date.MinuteGranularity >= 1 && conf.Date.MinuteGranularity <= 60) {
|
||||||
|
@ -76,7 +82,7 @@ func validateConfig(conf *Config) error {
|
||||||
log.Println(err.Error())
|
log.Println(err.Error())
|
||||||
}
|
}
|
||||||
if !(conf.Mailer.Type == "Stdout" || conf.Mailer.Type == "Smtp") {
|
if !(conf.Mailer.Type == "Stdout" || conf.Mailer.Type == "Smtp") {
|
||||||
err = fmt.Errorf("Validating config: Mailer type must be 'stdout' or 'smtp', but is '%s'.", conf.Mailer.Type)
|
err = fmt.Errorf("Validating config: Mailer type must be 'Stdout' or 'Smtp', but is '%s'.", conf.Mailer.Type)
|
||||||
log.Println(err.Error())
|
log.Println(err.Error())
|
||||||
}
|
}
|
||||||
if !(conf.SQL.Type == "SQLite" || conf.SQL.Type == "Mysql") {
|
if !(conf.SQL.Type == "SQLite" || conf.SQL.Type == "Mysql") {
|
||||||
|
|
|
@ -14,7 +14,7 @@
|
||||||
"mailer": {
|
"mailer": {
|
||||||
"type": "Stdout",
|
"type": "Stdout",
|
||||||
"fromAddress": "sprechstunden@localhost",
|
"fromAddress": "sprechstunden@localhost",
|
||||||
"fromName": "Mathebau Sprechstunden <sprechstunden@localhost>",
|
"fromName": "Sprechstunden <sprechstunden@localhost>",
|
||||||
"smtpHost": "localhost",
|
"smtpHost": "localhost",
|
||||||
"smtpPort": 25,
|
"smtpPort": 25,
|
||||||
"smtpUseAuth": false,
|
"smtpUseAuth": false,
|
||||||
|
@ -29,5 +29,8 @@
|
||||||
"mysqlHost": "localhost",
|
"mysqlHost": "localhost",
|
||||||
"mysqlPort": 3306,
|
"mysqlPort": 3306,
|
||||||
"mysqlDatabase": "officeHours"
|
"mysqlDatabase": "officeHours"
|
||||||
|
},
|
||||||
|
"tutor": {
|
||||||
|
"mailSuffix": ""
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -2,8 +2,10 @@ package controllers
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"log"
|
||||||
"net/http"
|
"net/http"
|
||||||
"net/mail"
|
"net/mail"
|
||||||
|
"sprechstundentool/config"
|
||||||
"sprechstundentool/models"
|
"sprechstundentool/models"
|
||||||
"strconv"
|
"strconv"
|
||||||
"strings"
|
"strings"
|
||||||
|
@ -22,6 +24,7 @@ type maskData struct {
|
||||||
Email string
|
Email string
|
||||||
Info string
|
Info string
|
||||||
Errors []string
|
Errors []string
|
||||||
|
Config config.Config
|
||||||
}
|
}
|
||||||
|
|
||||||
func (b *BaseHandler) AddOfficeHourHandler(w http.ResponseWriter, req *http.Request) {
|
func (b *BaseHandler) AddOfficeHourHandler(w http.ResponseWriter, req *http.Request) {
|
||||||
|
@ -105,8 +108,8 @@ func (b *BaseHandler) AddOfficeHourHandler(w http.ResponseWriter, req *http.Requ
|
||||||
if err != nil {
|
if err != nil {
|
||||||
email = &mail.Address{"", req.FormValue("email")}
|
email = &mail.Address{"", req.FormValue("email")}
|
||||||
errors = append(errors, "Mailaddresse konnte nicht geparst werden.")
|
errors = append(errors, "Mailaddresse konnte nicht geparst werden.")
|
||||||
} else if !strings.HasSuffix(email.Address, "tu-darmstadt.de") {
|
} else if !strings.HasSuffix(email.Address, b.config.Tutor.MailSuffix) {
|
||||||
errors = append(errors, "Mailaddresse muss auf „tu-darmstadt.de“ enden.")
|
errors = append(errors, fmt.Sprintf("Mailaddresse muss auf „%s“ enden.", b.config.Tutor.MailSuffix))
|
||||||
}
|
}
|
||||||
info := req.FormValue("info")
|
info := req.FormValue("info")
|
||||||
|
|
||||||
|
@ -130,6 +133,7 @@ func (b *BaseHandler) AddOfficeHourHandler(w http.ResponseWriter, req *http.Requ
|
||||||
email.Address,
|
email.Address,
|
||||||
info,
|
info,
|
||||||
errors,
|
errors,
|
||||||
|
b.config,
|
||||||
}
|
}
|
||||||
b.writeAddOfficeHourMask(w, req, data)
|
b.writeAddOfficeHourMask(w, req, data)
|
||||||
} else {
|
} else {
|
||||||
|
@ -155,14 +159,15 @@ func (b *BaseHandler) AddOfficeHourHandler(w http.ResponseWriter, req *http.Requ
|
||||||
}
|
}
|
||||||
|
|
||||||
func (b *BaseHandler) writeAddOfficeHourMask(w http.ResponseWriter, req *http.Request, data maskData) {
|
func (b *BaseHandler) writeAddOfficeHourMask(w http.ResponseWriter, req *http.Request, data maskData) {
|
||||||
if len(data.Errors) != 0 {
|
|
||||||
w.WriteHeader(http.StatusBadRequest)
|
|
||||||
}
|
|
||||||
if req.Method == http.MethodGet {
|
if req.Method == http.MethodGet {
|
||||||
data.Errors = []string{}
|
data.Errors = []string{}
|
||||||
}
|
}
|
||||||
|
if len(data.Errors) != 0 {
|
||||||
|
w.WriteHeader(http.StatusBadRequest)
|
||||||
|
}
|
||||||
err := Templates.ExecuteTemplate(w, "addMask.html", data)
|
err := Templates.ExecuteTemplate(w, "addMask.html", data)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
log.Printf("Template addMask.html could not be parsed: %s", err.Error())
|
||||||
w.Write([]byte(fmt.Sprintf("Template konnte nicht geparst werden : %s", err.Error())))
|
w.Write([]byte(fmt.Sprintf("Template konnte nicht geparst werden : %s", err.Error())))
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
|
@ -12,6 +12,7 @@ var Templates, _ = template.Must(template.ParseFiles(
|
||||||
"templates/deleteSuccess.html",
|
"templates/deleteSuccess.html",
|
||||||
"templates/executeFailure.html",
|
"templates/executeFailure.html",
|
||||||
"templates/executeSuccess.html",
|
"templates/executeSuccess.html",
|
||||||
|
"templates/footer.html",
|
||||||
"templates/index.html",
|
"templates/index.html",
|
||||||
"templates/officeHourTable.html",
|
"templates/officeHourTable.html",
|
||||||
"templates/requestNotFound.html")).
|
"templates/requestNotFound.html")).
|
||||||
|
|
3
main.go
3
main.go
|
@ -1,3 +1,4 @@
|
||||||
|
// main
|
||||||
package main
|
package main
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
@ -51,5 +52,5 @@ func main() {
|
||||||
http.HandleFunc("/", h.RootHandler)
|
http.HandleFunc("/", h.RootHandler)
|
||||||
|
|
||||||
err = http.ListenAndServe(fmt.Sprintf("%s:%d", conf.Server.ListenAddress, conf.Server.ListenPort), nil)
|
err = http.ListenAndServe(fmt.Sprintf("%s:%d", conf.Server.ListenAddress, conf.Server.ListenPort), nil)
|
||||||
fmt.Println(err.Error())
|
log.Println(err.Error())
|
||||||
}
|
}
|
||||||
|
|
|
@ -6,9 +6,6 @@
|
||||||
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:sprechstundentool@mathebau.de">sprechstundentool@mathebau.de</a> mit einer Beschreibung, was du tun wolltest.
|
||||||
<br />
|
<br />
|
||||||
{{.}}
|
{{.}}
|
||||||
<footer>
|
{{template "footer.html" .}}
|
||||||
<a href="/addOfficeHour">Sprechstunde anlegen</a><br />
|
|
||||||
Technische Fragen an <a href="mailto:sprechstundentool@mathebau.de">sprechstundentool@mathebau.de</a>
|
|
||||||
</footer>
|
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
|
@ -39,15 +39,12 @@
|
||||||
<input type="submit">
|
<input type="submit">
|
||||||
</form>
|
</form>
|
||||||
</p>
|
</p>
|
||||||
Du musst hier eine Email-Adresse angeben, die auf „tu-darmstadt.de“ endet.<br />
|
{{if ne .Config.Tutor.MailSuffix ""}}Du musst hier eine Email-Adresse angeben, die auf „{{.Config.Tutor.MailSuffix}}“ endet.<br />{{end}}
|
||||||
Außerdem dürfen in Räumen nur begrenzt viele Sprechstunden gleichzeitig stattfinden, nämlich
|
Außerdem dürfen in Räumen nur begrenzt viele Sprechstunden gleichzeitig stattfinden, nämlich
|
||||||
<dl>
|
<dl>
|
||||||
{{range $room := .Rooms}}
|
{{range $room := .Rooms}}
|
||||||
<dt>{{$room.Name}}</dt><dl>{{$room.MaxOccupy}} Sprechstunde{{if gt $room.MaxOccupy 1}}n{{end}}</dl><br />{{end}}
|
<dt>{{$room.Name}}</dt><dl>{{$room.MaxOccupy}} Sprechstunde{{if gt $room.MaxOccupy 1}}n{{end}}</dl><br />{{end}}
|
||||||
</dl>
|
</dl>
|
||||||
<footer>
|
{{template "footer.html" .}}
|
||||||
<a href="/addOfficeHour">Sprechstunde anlegen</a><br />
|
|
||||||
Technische Fragen an <a href="mailto:sprechstundentool@mathebau.de">sprechstundentool@mathebau.de</a>
|
|
||||||
</footer>
|
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
|
@ -5,9 +5,6 @@
|
||||||
<body>
|
<body>
|
||||||
Die Sprechstunde wurde angelegt. Du solltest eine Mail mit einem Aktivierungslink erhalten haben.
|
Die Sprechstunde wurde angelegt. Du solltest eine Mail mit einem Aktivierungslink erhalten haben.
|
||||||
<br />
|
<br />
|
||||||
<footer>
|
{{template "footer.html" .}}
|
||||||
<a href="/addOfficeHour">Sprechstunde anlegen</a><br />
|
|
||||||
Technische Fragen an <a href="mailto:sprechstundentool@mathebau.de">sprechstundentool@mathebau.de</a>
|
|
||||||
</footer>
|
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
|
@ -5,9 +5,6 @@
|
||||||
<body>
|
<body>
|
||||||
Du solltest eine Mail mit einem Bestätigungslink erhalten haben.
|
Du solltest eine Mail mit einem Bestätigungslink erhalten haben.
|
||||||
<br />
|
<br />
|
||||||
<footer>
|
{{template "footer.html" .}}
|
||||||
<a href="/addOfficeHour">Sprechstunde anlegen</a><br />
|
|
||||||
Technische Fragen an <a href="mailto:sprechstundentool@mathebau.de">sprechstundentool@mathebau.de</a>
|
|
||||||
</footer>
|
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
|
@ -6,9 +6,6 @@
|
||||||
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:sprechstundentool@mathebau.de">sprechstundentool@mathebau.de</a> mit einer Beschreibung, was du tun wolltest.
|
||||||
<br />
|
<br />
|
||||||
{{.}}
|
{{.}}
|
||||||
<footer>
|
{{template "footer.html" .}}
|
||||||
<a href="/addOfficeHour">Sprechstunde anlegen</a><br />
|
|
||||||
Technische Fragen an <a href="mailto:sprechstundentool@mathebau.de">sprechstundentool@mathebau.de</a>
|
|
||||||
</footer>
|
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
|
@ -4,9 +4,6 @@
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
Deine Anfrage wurde ausgeführt.
|
Deine Anfrage wurde ausgeführt.
|
||||||
<footer>
|
{{template "footer.html" .}}
|
||||||
<a href="/addOfficeHour">Sprechstunde anlegen</a><br />
|
|
||||||
Technische Fragen an <a href="mailto:sprechstundentool@mathebau.de">sprechstundentool@mathebau.de</a>
|
|
||||||
</footer>
|
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
5
templates/footer.html
Normal file
5
templates/footer.html
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
<footer>
|
||||||
|
<a href="/addOfficeHour">Sprechstunde anlegen</a><br />
|
||||||
|
<a href="/deleteOfficeHour">Sprechstunde löschen</a><br />
|
||||||
|
Technische Fragen an <a href="mailto:sprechstundentool@mathebau.de">sprechstundentool@mathebau.de</a>
|
||||||
|
</footer>
|
|
@ -22,10 +22,6 @@
|
||||||
<input type="submit" value="Auswählen" />
|
<input type="submit" value="Auswählen" />
|
||||||
</form>
|
</form>
|
||||||
{{.Timetable}}
|
{{.Timetable}}
|
||||||
<footer>
|
{{template "footer.html" .}}
|
||||||
<a href="/addOfficeHour">Sprechstunde anlegen</a><br />
|
|
||||||
<a href="/deleteOfficeHour">Sprechstunde löschen</a><br />
|
|
||||||
Technische Fragen an <a href="mailto:sprechstundentool@mathebau.de">sprechstundentool@mathebau.de</a>
|
|
||||||
</footer>
|
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
|
@ -11,9 +11,6 @@
|
||||||
<label for="code">Bestätigungscode</label>: <input type="text" name="code"/>
|
<label for="code">Bestätigungscode</label>: <input type="text" name="code"/>
|
||||||
<input type="submit" />
|
<input type="submit" />
|
||||||
</form>
|
</form>
|
||||||
<footer>
|
{{template "footer.html" .}}
|
||||||
<a href="/addOfficeHour">Sprechstunde anlegen</a><br />
|
|
||||||
Technische Fragen an <a href="mailto:sprechstundentool@mathebau.de">sprechstundentool@mathebau.de</a>
|
|
||||||
</footer>
|
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
Loading…
Reference in a new issue