Skip to content

szaffarano/gotas

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

57 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Build Status Go Report Card codecov GitHub

Gotas

Gotas is a task server Go implementation.

If we already have a mature and fully functional (and official) implementation, why reinvent the wheel then? I've got two main purposes, the first one is to continue learning Go, and a good way to archive it is by doing real-world projects. I'm a Task Warrior user and fan, and hence I'll doing something useful at least for my personal use. The second reason is that I think it could be interesting to have a multiplatform task server that doesn't have any 3rd party libraries dependency.

Status

Merge algorithm is fully implemented, tested against different task clients, and comparing both taskd and gotas results. Furthermore, either the configuration files, and the filesystem layout is the same, so technically, switching between taskd and gotas is transparent.

Feature Taskd Gotas
sync
init
add user
remove user
suspend user
resume user
add org
remove org
suspend org
resume org
client api

Getting started

Disclaimer: This project is under development. Please backup your current task server data directory to avoid any possible data loss.

Already configured taskd instance

After backing up your task server data directory, stop taskd and start gotas using the same syntax:

$ /path/to/gotas server --data /path/to/taskd-data/dir

or using TASKDDATA environment variable

$ export TASKDDATA="/path/to/taskd-data/dir"
$ /path/to/gotas server

Gotas will read TASKDDATA/config file and work as expected.

Starting from scratch

  1. Initialize gotas repository:

     $ gotas init --data /path/to/taskd-data/dir
    
  2. Create an initial PKI setup. Gotas includes an embedded command to deal with it:

    1. Create a new CA

       $ gotas pki -p /tmp/pki init
       INFO    /tmp/pki/ca.pem: created successfully
       INFO    /tmp/pki/ca.key: created successfully
      

      In case you already have an existent CA, just omit this step, and from now on, use the -p flag pointing it to the directory where the certificate and private key are located. They have to be named ca.pem and ca.key.

    2. Create a new server certificate:

       gotas pki -p /tmp/pki add server -c $(hostname) # or just use any fqdn, or even localhost
       INFO    /tmp/pki/my-hostname.pem: created successfully
       INFO    /tmp/pki/my-hostname.key: created successfully
      

      You can now configure gotas in the same way taskd, i.e.:

       cat $TASKDDATA/config
       ca.cert=/tmp/pki/ca.pem
       server.cert=/tmp/pki/my-hostname.pem
       server.key=/tmp/pki/my-hostname.key
      
    3. Create one or more client certificates to distribute in your clients:

       $ gotas pki -p /tmp/pki add client -c john
       INFO    /tmp/pki/john.pem: created successfully
       INFO    /tmp/pki/john.key: created successfully
      
  3. Start gotas

         $ export TASKDDATA="/path/to/taskd-data/dir"
         $ /path/to/gotas server
    

Limitations

  • Be aware that the --daemon flag is not implemented yet, so gotas will run in the foreground.
  • Because gotas only runs foreground, it only logs to stdout and stderr
  • CRL (Certificate Revocation List) validation is not implemented yet, so this configuration will be silently ignored.
  • Gotas does a full client validation (trust=strict), which means that this configuration will be ignored as well. Future versions will implement it.