Go Einkaufsliste
Da ich sehr viel gutes über Go gehört hab, wollte ich Go lernen und da “learning by doing” am einfachsten ist, hab ich mir als Projekt eine digitale (Einkaufs)listen webapp vorgenommen.
Go die sprache
Bis jetzt finde ich Go ziemlich schön als Sprache. Der Code ist (für mich) obwohl ich mir nicht sehr viel Mühe gegeben hab sehr lesbar und mir gefällt, dass ich keine extra Bibliotheken installieren musste. Ich hatte zwar zwischendurch ein paar Probleme, aber nachdem ich mich dann getraut hab in die offizielle Dokumentation zu gucken, war eigentlich alles zu lösen.
Das Programm
Da das sehr simpel ist und maximal um die 10 Benutzer haben wird, benutze ich einfach das filesystem als datenbank. Da hab ich einfach für jeden benutzer einen Ordner und dann pro Liste eine Datei in der jede Zeile ein element der Liste darstellt. So kann ich auch Verknüpfungen zu Listen herstellen um eine Liste für mehrere Benutzer zu haben.
Sicherheit
Also die Passwörter werden als plaintext in einer .pwd datei im Benutzerordner gespeichert. Das ist aber kein so großes Problem, weil wenn jemand zugriff auf den Server hat, kann er auch einfach so die Listen sehen.
Das größere Problem ist, dass ich beim Login nur ein Cookie mit dem Benutzername ablege, man also einfach manuell ein Cookie mit dem Benutzernamen anlegen kann und dann ohne Passwort zugriff auf die Listen hat. Dafür müsste man aber
- die Domain wissen wo ich das hoste und
- die Benutzernamen
Edit: Mittlerweile wird auch das Passwort als cookie gespeichert, sodass das nicht mehr möglich ist.
Und selbst wenn, die Listen sind eigentlich keine bedenklichen Informationen, aber ich sollte das Trotzdem mal anders machen. Ich glaub ich kann einfach noch ein zweites cookie mit dem gehashten Passwort setzen und das dann jedesmal prüfen.
Frontend
Das Frontend der Listen ist ganz cool geworden. Das ist nämlich ein html <form>
mit checkbuttons für die Listen Elemente, wo ich aber die checkbuttons versteckt hab und stattdessen den Text wenn der Checkbutton checked ist durchgestrichen hab. Um das dann zum Server zu schicken muss man dann aber noch den Aktualisieren Button drücken.
Gestyled hab ich das mit reinem CSS.