# gmitodo - Gemini Shared Task List CGI => gemini://simonvolpert.com/gmitodo/ Canonical project page gmitodo is a Gemini CGI script implementing shared task list functionality. Think of a shopping list each of your family members can add to. ## Installation and Usage Have Python 3 and python-urllib installed. You will also need a Gemini server, such as Jetforce. => https://github.com/michael-lazar/jetforce Jetforce server => gemini://simonvolpert.com/gmitodo/todo Download the executable SHA1 sum: %SHA1% Place the executable in your capsule's /cgi-bin/ directory and give it execution permissions. At this point, you can navigate to /cgi-bin/todo and start using it; See the next section for information about configuring authentication. Development is done via git. You can clone this repository by executing the following command: > git clone https://simonvolpert.com/gmitodo/ ## Authentication and Security By default, gmitodo does not enforce any form of access control, which means anyone can add or remove entries from your task list. To restrict viewing or editing to specific users, you will need to edit the configuration file, named "todo.conf", which is created on the script's first run in one of the following locations: * /etc/gmitodo * $HOME/.config/gmitodo * The current working directory * /tmp/gmitodo The configuration file is well-commented and self-explanatory. You can set viewing and modification permissions separately, identfying clients by either the IP address, or their client certificate SHA hash. The creation of your client certificate varies from client to client; You should refer to your Gemini client's specific instructions. It is worth noting that the CGI script is going to be executed as the user running the Gemini server, and will have all of the server's permissions; Running your server as root is therefore seen as extremely unwise. Make sure to only run the server as an unprivileged user to mitigate the risk. If you REALLY want the state files to be in "/etc/gmitodo", manually create that directory and chown it to the user, running the server. On the other hand, if you really want the state files to be transient, make sure that the user running the server cannot write to any of the other directories in the list, and the files will be created in "/tmp/gmitodo" as a last resort.