<feed xmlns='http://www.w3.org/2005/Atom'>
<title>finserv, branch auth</title>
<subtitle>Personal finances server</subtitle>
<id>https://cgit.xengineering.eu/finserv/atom?h=auth</id>
<link rel='self' href='https://cgit.xengineering.eu/finserv/atom?h=auth'/>
<link rel='alternate' type='text/html' href='https://cgit.xengineering.eu/finserv/'/>
<updated>2026-05-24T14:14:22Z</updated>
<entry>
<title>Add authentication middleware</title>
<updated>2026-05-24T14:14:22Z</updated>
<author>
<name>xengineering</name>
<email>me@xengineering.eu</email>
</author>
<published>2026-05-24T10:35:46Z</published>
<link rel='alternate' type='text/html' href='https://cgit.xengineering.eu/finserv/commit/?id=42d8ed4ccada1b9b3f063ca4ef68dff2844009eb'/>
<id>urn:sha1:42d8ed4ccada1b9b3f063ca4ef68dff2844009eb</id>
<content type='text'>
This protects all parts of /api/* except the /api/register URL. This one
must stay accessible to allow new users.
</content>
</entry>
<entry>
<title>WIP: Add authenticate()</title>
<updated>2026-05-24T14:07:45Z</updated>
<author>
<name>xengineering</name>
<email>me@xengineering.eu</email>
</author>
<published>2026-05-24T14:00:28Z</published>
<link rel='alternate' type='text/html' href='https://cgit.xengineering.eu/finserv/commit/?id=1362d9ff0a4498bbb793d4e919036abd4d7d31ae'/>
<id>urn:sha1:1362d9ff0a4498bbb793d4e919036abd4d7d31ae</id>
<content type='text'>
TODO: replace hard-coded user table

This function authenticates the SHA256 hash of an authentication token.
</content>
</entry>
<entry>
<title>Add POST /api/registration</title>
<updated>2026-05-24T12:45:33Z</updated>
<author>
<name>xengineering</name>
<email>me@xengineering.eu</email>
</author>
<published>2026-05-24T12:12:03Z</published>
<link rel='alternate' type='text/html' href='https://cgit.xengineering.eu/finserv/commit/?id=3b28132b56836d2f7bd3ce01430d334eb7bffa3b'/>
<id>urn:sha1:3b28132b56836d2f7bd3ce01430d334eb7bffa3b</id>
<content type='text'>
This URL sets a random 32 octet token as cookie `token` in Base64
encoding.

The SHA256 hash of the binary token is written as response also in
Base64 encoding.
</content>
</entry>
<entry>
<title>Release version 0.1.0</title>
<updated>2026-05-24T09:48:38Z</updated>
<author>
<name>xengineering</name>
<email>me@xengineering.eu</email>
</author>
<published>2026-05-24T09:48:38Z</published>
<link rel='alternate' type='text/html' href='https://cgit.xengineering.eu/finserv/commit/?id=d7d46df8c4d019be48f7aa0790aa8a2349e45e20'/>
<id>urn:sha1:d7d46df8c4d019be48f7aa0790aa8a2349e45e20</id>
<content type='text'>
This release allows to get started with packaging and deployment in a
very early stage.

All features can be added incrementally.
</content>
</entry>
<entry>
<title>VERSION.txt: Remove `v` prefix</title>
<updated>2026-05-24T09:46:01Z</updated>
<author>
<name>xengineering</name>
<email>me@xengineering.eu</email>
</author>
<published>2026-05-24T09:46:01Z</published>
<link rel='alternate' type='text/html' href='https://cgit.xengineering.eu/finserv/commit/?id=75cf3388c095b7187dd885500e17e0880b270a79'/>
<id>urn:sha1:75cf3388c095b7187dd885500e17e0880b270a79</id>
<content type='text'>
The content of this file should contain the version string of the
software. There is no need to label it with a prefix `v` since this is
redundant.
</content>
</entry>
<entry>
<title>Add missing `.` to log messages</title>
<updated>2026-05-24T09:44:01Z</updated>
<author>
<name>xengineering</name>
<email>me@xengineering.eu</email>
</author>
<published>2026-05-24T09:43:28Z</published>
<link rel='alternate' type='text/html' href='https://cgit.xengineering.eu/finserv/commit/?id=2b37d7902daa6e2a9c2284fd3dccb19429ecbd11'/>
<id>urn:sha1:2b37d7902daa6e2a9c2284fd3dccb19429ecbd11</id>
<content type='text'>
</content>
</entry>
<entry>
<title>README.md: Add public API declaration</title>
<updated>2026-05-24T09:41:14Z</updated>
<author>
<name>xengineering</name>
<email>me@xengineering.eu</email>
</author>
<published>2026-05-24T09:41:14Z</published>
<link rel='alternate' type='text/html' href='https://cgit.xengineering.eu/finserv/commit/?id=fc6315be199305d21e4fb1b1a18917bec4147f3e'/>
<id>urn:sha1:fc6315be199305d21e4fb1b1a18917bec4147f3e</id>
<content type='text'>
This is required to properly use Semantic Versioning.
</content>
</entry>
<entry>
<title>Disable log timestamps</title>
<updated>2026-05-24T09:31:00Z</updated>
<author>
<name>xengineering</name>
<email>me@xengineering.eu</email>
</author>
<published>2026-05-24T09:31:00Z</published>
<link rel='alternate' type='text/html' href='https://cgit.xengineering.eu/finserv/commit/?id=1d0f96aaacd7d8853a1aa970b01560c92c4da86b'/>
<id>urn:sha1:1d0f96aaacd7d8853a1aa970b01560c92c4da86b</id>
<content type='text'>
Many logging systems provide timestamps on their own. To avoid
duplication it is disabled by default.
</content>
</entry>
<entry>
<title>README.md: Add build instructions</title>
<updated>2026-05-24T09:29:38Z</updated>
<author>
<name>xengineering</name>
<email>me@xengineering.eu</email>
</author>
<published>2026-05-24T09:29:38Z</published>
<link rel='alternate' type='text/html' href='https://cgit.xengineering.eu/finserv/commit/?id=5a0e9472d28961b2a8d598165e05f4221171c1a1'/>
<id>urn:sha1:5a0e9472d28961b2a8d598165e05f4221171c1a1</id>
<content type='text'>
</content>
</entry>
<entry>
<title>systemd: Add finserv.service</title>
<updated>2026-05-24T08:45:19Z</updated>
<author>
<name>xengineering</name>
<email>me@xengineering.eu</email>
</author>
<published>2026-05-24T08:45:19Z</published>
<link rel='alternate' type='text/html' href='https://cgit.xengineering.eu/finserv/commit/?id=57b275d398b14aed86a047a829427c557018b5f8'/>
<id>urn:sha1:57b275d398b14aed86a047a829427c557018b5f8</id>
<content type='text'>
This file can be used to package for systemd-based Linux distribution.

It creates the finserv system service running the server. That way
automatic startup on system start can be implemented.
</content>
</entry>
<entry>
<title>systemd: Add finserv.tmpfile.d</title>
<updated>2026-05-24T08:43:47Z</updated>
<author>
<name>xengineering</name>
<email>me@xengineering.eu</email>
</author>
<published>2026-05-24T08:43:47Z</published>
<link rel='alternate' type='text/html' href='https://cgit.xengineering.eu/finserv/commit/?id=bde29ccfbbd33376161bd192637c6c7ac70f5490'/>
<id>urn:sha1:bde29ccfbbd33376161bd192637c6c7ac70f5490</id>
<content type='text'>
This file can be used to package for systemd-based Linux distribution.

I configures the data directory of finserv. This notably includes
setting the proper access permissions to protect the saved data.
</content>
</entry>
<entry>
<title>systemd: Add sysuser.conf</title>
<updated>2026-05-24T08:42:50Z</updated>
<author>
<name>xengineering</name>
<email>me@xengineering.eu</email>
</author>
<published>2026-05-24T08:42:50Z</published>
<link rel='alternate' type='text/html' href='https://cgit.xengineering.eu/finserv/commit/?id=03c582c3b17b7320bf9317b4a27c572f68cc0fd7'/>
<id>urn:sha1:03c582c3b17b7320bf9317b4a27c572f68cc0fd7</id>
<content type='text'>
This file can be used to package for systemd-based Linux distribution.

It creates the `finserv` system user which runs the server.
</content>
</entry>
<entry>
<title>frontend: Add work in progress text to index</title>
<updated>2026-05-23T22:13:24Z</updated>
<author>
<name>xengineering</name>
<email>me@xengineering.eu</email>
</author>
<published>2026-05-23T22:13:24Z</published>
<link rel='alternate' type='text/html' href='https://cgit.xengineering.eu/finserv/commit/?id=d8562450d1c50fdadfb97436b69e74908f97b11d'/>
<id>urn:sha1:d8562450d1c50fdadfb97436b69e74908f97b11d</id>
<content type='text'>
This explains the users the current state of this project.
</content>
</entry>
<entry>
<title>frontend: static: Add simple.css symlink</title>
<updated>2026-05-23T22:10:50Z</updated>
<author>
<name>xengineering</name>
<email>me@xengineering.eu</email>
</author>
<published>2026-05-23T22:08:27Z</published>
<link rel='alternate' type='text/html' href='https://cgit.xengineering.eu/finserv/commit/?id=0425f4b8e6e27923e7a43b24a05117eb62ac6786'/>
<id>urn:sha1:0425f4b8e6e27923e7a43b24a05117eb62ac6786</id>
<content type='text'>
This allows to develop the frontend with `hugo server` and its built-in
page refresh on file change.

For the actual build the file is copied to the build directory by Meson.
</content>
</entry>
<entry>
<title>Use simple.css</title>
<updated>2026-05-23T22:05:40Z</updated>
<author>
<name>xengineering</name>
<email>me@xengineering.eu</email>
</author>
<published>2026-05-23T22:05:40Z</published>
<link rel='alternate' type='text/html' href='https://cgit.xengineering.eu/finserv/commit/?id=15be9a62f557d54448cbb932c4d7c4a96843daf2'/>
<id>urn:sha1:15be9a62f557d54448cbb932c4d7c4a96843daf2</id>
<content type='text'>
This enables the use of simple.css as CSS framework.
</content>
</entry>
<entry>
<title>Add `run` target</title>
<updated>2026-05-23T21:57:04Z</updated>
<author>
<name>xengineering</name>
<email>me@xengineering.eu</email>
</author>
<published>2026-05-23T21:56:18Z</published>
<link rel='alternate' type='text/html' href='https://cgit.xengineering.eu/finserv/commit/?id=cfa648d2b69bdb26bdbb0a9096780d7721c99da3'/>
<id>urn:sha1:cfa648d2b69bdb26bdbb0a9096780d7721c99da3</id>
<content type='text'>
This allows to easily run the server with a single `meson compile -C
build run` during development.
</content>
</entry>
<entry>
<title>frontend: Add simple.css submodule</title>
<updated>2026-05-23T21:55:30Z</updated>
<author>
<name>xengineering</name>
<email>me@xengineering.eu</email>
</author>
<published>2026-05-23T21:55:30Z</published>
<link rel='alternate' type='text/html' href='https://cgit.xengineering.eu/finserv/commit/?id=fe8c7a33aeb2124ffb00a6c6be61369e5e344bc3'/>
<id>urn:sha1:fe8c7a33aeb2124ffb00a6c6be61369e5e344bc3</id>
<content type='text'>
This is the CSS framework which should be used for this repository.
</content>
</entry>
<entry>
<title>Add global Meson build system</title>
<updated>2026-05-23T21:48:15Z</updated>
<author>
<name>xengineering</name>
<email>me@xengineering.eu</email>
</author>
<published>2026-05-23T21:48:15Z</published>
<link rel='alternate' type='text/html' href='https://cgit.xengineering.eu/finserv/commit/?id=4db5f4ae91cc5b9139e3f2e1208e2ec032a89ebf'/>
<id>urn:sha1:4db5f4ae91cc5b9139e3f2e1208e2ec032a89ebf</id>
<content type='text'>
This commit fully introduces Meson as a build system for this
repository. It makes sure the frontend page is built with Hugo before
the Go executable is built and embeds the frontend.
</content>
</entry>
<entry>
<title>frontend: Add Meson build system</title>
<updated>2026-05-23T21:42:27Z</updated>
<author>
<name>xengineering</name>
<email>me@xengineering.eu</email>
</author>
<published>2026-05-23T21:39:01Z</published>
<link rel='alternate' type='text/html' href='https://cgit.xengineering.eu/finserv/commit/?id=0c2903126aa2df80d1ea40295df6365ea37b7651'/>
<id>urn:sha1:0c2903126aa2df80d1ea40295df6365ea37b7651</id>
<content type='text'>
This is a first step towards using Meson for the whole repository.

Having one central build system allows many things like ensuring that
the frontend page is build before embedding it into the Go executable
or like transpiling TypeScript to JavaScript before building the
frontend page.
</content>
</entry>
<entry>
<title>Embed frontend to server executable</title>
<updated>2026-05-23T20:54:30Z</updated>
<author>
<name>xengineering</name>
<email>me@xengineering.eu</email>
</author>
<published>2026-05-23T20:54:30Z</published>
<link rel='alternate' type='text/html' href='https://cgit.xengineering.eu/finserv/commit/?id=a72c0c275a962153a40bc805e5ce3ac7a273f55c'/>
<id>urn:sha1:a72c0c275a962153a40bc805e5ce3ac7a273f55c</id>
<content type='text'>
This makes use of the `embed` package of the Go standard library to
embed the full Hugo static website as a global filesystem variable
inside the executable.

This effectively makes all files of the static website part of the Go
executable. That way it is always possible to just copy the server
executable to a host, make it executable and run it without any other
dependencies.
</content>
</entry>
<entry>
<title>Hook up frontend in Go web server</title>
<updated>2026-05-23T20:38:40Z</updated>
<author>
<name>xengineering</name>
<email>me@xengineering.eu</email>
</author>
<published>2026-05-23T20:37:31Z</published>
<link rel='alternate' type='text/html' href='https://cgit.xengineering.eu/finserv/commit/?id=7bb61037ffa36549661b8a34e305343d40007ca2'/>
<id>urn:sha1:7bb61037ffa36549661b8a34e305343d40007ca2</id>
<content type='text'>
This makes the Hugo-built static website part of site hosted by Go which
also contains the dynamic API under /api.
</content>
</entry>
<entry>
<title>frontend: layouts: Add baseof.html and home.html</title>
<updated>2026-05-23T20:27:36Z</updated>
<author>
<name>xengineering</name>
<email>me@xengineering.eu</email>
</author>
<published>2026-05-23T20:22:39Z</published>
<link rel='alternate' type='text/html' href='https://cgit.xengineering.eu/finserv/commit/?id=e7367b8aa96e6b2eed27ba1441f61f696eaffd3d'/>
<id>urn:sha1:e7367b8aa96e6b2eed27ba1441f61f696eaffd3d</id>
<content type='text'>
These two files are the starting point for the front end.
</content>
</entry>
<entry>
<title>frontend: Add .gitignore</title>
<updated>2026-05-23T20:14:54Z</updated>
<author>
<name>xengineering</name>
<email>me@xengineering.eu</email>
</author>
<published>2026-05-23T20:14:40Z</published>
<link rel='alternate' type='text/html' href='https://cgit.xengineering.eu/finserv/commit/?id=fb573c04333701e15ee4fba274df0f88482b392f'/>
<id>urn:sha1:fb573c04333701e15ee4fba274df0f88482b392f</id>
<content type='text'>
Hugo produces files which should not be committed.
</content>
</entry>
<entry>
<title>frontend: Reduce to explicitly wanted files</title>
<updated>2026-05-23T20:14:06Z</updated>
<author>
<name>xengineering</name>
<email>me@xengineering.eu</email>
</author>
<published>2026-05-23T20:11:47Z</published>
<link rel='alternate' type='text/html' href='https://cgit.xengineering.eu/finserv/commit/?id=2b2d7af6894db8c2f3dbbffc902a218212262de1'/>
<id>urn:sha1:2b2d7af6894db8c2f3dbbffc902a218212262de1</id>
<content type='text'>
Hugo by default generates output files which are not yet needed.
</content>
</entry>
<entry>
<title>frontend: Add hugo.toml</title>
<updated>2026-05-23T19:50:11Z</updated>
<author>
<name>xengineering</name>
<email>me@xengineering.eu</email>
</author>
<published>2026-05-23T19:50:11Z</published>
<link rel='alternate' type='text/html' href='https://cgit.xengineering.eu/finserv/commit/?id=8a89c40d957c9d69376fea013e7377c300d98077'/>
<id>urn:sha1:8a89c40d957c9d69376fea013e7377c300d98077</id>
<content type='text'>
This is the starting point of a Hugo[1] based web frontend.

[1]: https://gohugo.io/
</content>
</entry>
<entry>
<title>Move to /api/version</title>
<updated>2026-05-23T19:35:51Z</updated>
<author>
<name>xengineering</name>
<email>me@xengineering.eu</email>
</author>
<published>2026-05-23T19:35:51Z</published>
<link rel='alternate' type='text/html' href='https://cgit.xengineering.eu/finserv/commit/?id=8adf98994a873e8a04a8d469fd694e9fcd4fa841'/>
<id>urn:sha1:8adf98994a873e8a04a8d469fd694e9fcd4fa841</id>
<content type='text'>
The old /version endpoint was moved. It should be part of the API and it
is intended that everything not part of /api/* is a static web site
which is also served by the Go server.
</content>
</entry>
<entry>
<title>Remove / and hello() handler</title>
<updated>2026-05-23T19:34:55Z</updated>
<author>
<name>xengineering</name>
<email>me@xengineering.eu</email>
</author>
<published>2026-05-23T19:34:55Z</published>
<link rel='alternate' type='text/html' href='https://cgit.xengineering.eu/finserv/commit/?id=39edd9921fe813d47173eded3b49369e2cda7360'/>
<id>urn:sha1:39edd9921fe813d47173eded3b49369e2cda7360</id>
<content type='text'>
This was just for demonstration purposes.
</content>
</entry>
<entry>
<title>Split run() arguments into multiple lines</title>
<updated>2026-05-23T19:28:29Z</updated>
<author>
<name>xengineering</name>
<email>me@xengineering.eu</email>
</author>
<published>2026-05-23T19:24:34Z</published>
<link rel='alternate' type='text/html' href='https://cgit.xengineering.eu/finserv/commit/?id=e810ccb3c96513a307cdec2c54bbb4db876ca2a5'/>
<id>urn:sha1:e810ccb3c96513a307cdec2c54bbb4db876ca2a5</id>
<content type='text'>
One line per argument makes the code more readable and also diffs in
case arguments are changed.
</content>
</entry>
<entry>
<title>Run go fmt</title>
<updated>2026-05-23T19:23:45Z</updated>
<author>
<name>xengineering</name>
<email>me@xengineering.eu</email>
</author>
<published>2026-05-23T19:23:45Z</published>
<link rel='alternate' type='text/html' href='https://cgit.xengineering.eu/finserv/commit/?id=031df7224dbad7f727a7338dfddb72832c8927f0'/>
<id>urn:sha1:031df7224dbad7f727a7338dfddb72832c8927f0</id>
<content type='text'>
</content>
</entry>
<entry>
<title>Make run fully configurable</title>
<updated>2026-05-23T19:22:35Z</updated>
<author>
<name>xengineering</name>
<email>me@xengineering.eu</email>
</author>
<published>2026-05-23T19:22:35Z</published>
<link rel='alternate' type='text/html' href='https://cgit.xengineering.eu/finserv/commit/?id=c6f5cf08563fed28c3cdcf79b0136a4038a02242'/>
<id>urn:sha1:c6f5cf08563fed28c3cdcf79b0136a4038a02242</id>
<content type='text'>
This makes the run() function compared to main() useful at all since all
parameters can be changed to test e.g. with unit tests.
</content>
</entry>
</feed>
