# Tau

Encrypted tasks management app using peer-to-peer network and raft consensus.  
multiple users can collaborate by working on the same tasks, and all users will have synced task list.


## Install 

```shell
% git clone https://github.com/darkrenaissance/darkfi 
% cd darkfi
% make BINS="taud tau"
% sudo make install "BINS=taud tau"
```

## Usage (Local Deployment)

### Seed Node

First you must run a seed node. The seed node is a static host which nodes can
connect to when they first connect to the network. The `seed_session` simply
connects to a seed node and runs `protocol_seed`, which requests a list of
addresses from the seed node and disconnects straight after receiving them.

	in config file:

		## P2P accept address
		inbound="127.0.0.1:11001" 

Note that the above config doesn't specify an external address since the
seed node shouldn't be advertised in the list of connectable nodes. The seed
node does not participate as a normal node in the p2p network. It simply allows
new nodes to discover other nodes in the network during the bootstrapping phase.

### Inbound Node

This is a node accepting inbound connections on the network but which is not
making any outbound connections.

The external address is important and must be correct.

	in config file:
		
		## P2P accept address
		inbound="127.0.0.1:11002" 
		
		## P2P external address
		external_addr="127.0.0.1:11002"

		## Seed nodes to connect to 
		seeds=["127.0.0.1:11001"]

### Outbound Node

This is a node which has 8 outbound connection slots and no inbound connections.
This means the node has 8 slots which will actively search for unique nodes to
connect to in the p2p network.

	in config file:

		## Connection slots
		outbound_connections=8

		## Seed nodes to connect to 
		seeds=["127.0.0.1:11001"]


Also note that for the first time ever running seed node you must run it with 
`--key-gen`:
```shell
% taud --key-gen
```
This will generate a new secret key in `/home/\${USER}/.config/tau/secret_key` that 
you can share with nodes you want them to get and decrypt your tasks, otherwise if you
have already generated or got a copy from a peer place it in the same directory
`/home/\${USER}/.config/tau/secret_key`.


## Usage (CLI)

```shell
% tau --help 
```
	tau 0.3.0
	Command-line client for taud
	
	USAGE:
		tau [OPTIONS] <SUBCOMMAND>

	OPTIONS:
		-e, --endpoint <ENDPOINT>    taud JSON-RPC endpoint [default: tcp://127.0.0.1:11055]
		-h, --help                   Print help information
		-v                           Increase verbosity (-vvv supported)
		-V, --version                Print version information

	SUBCOMMANDS:
		add        Add a new task                                                    
		comment    Set or Get comment for a task
		help       Print this message or the help of the given subcommand(s)
		info       Get task info by ID
		state      Set or Get task state
		update     Update/Edit an existing task by ID

```shell
% tau help [SUBCOMMAND]
```

### Example  

```shell
% # add new task  
% tau add "new title"   
% tau add "new title" project:blockchain desc:"new description" rank:3 assign:dark
% 
% # lists tasks
% tau 		   		 
% tau open	# open tasks
% tau pause	# paused tasks
% tau 0522	# created at May 2022
% tau project:blockchain assign:dark
% tau rank:gt:n	# lists all tasks that have rank greater than n
% tau rank:ls:n	# lists all tasks that have rank lesser than n
% 
% # update task 
% tau update 3 project:network rank:20
% 
% # state 
% tau state 3		# get state
% tau state 3 pause	# set the state to pause 
% 
% # comments 
% tau comment 1			# list comments
% tau comment 3 "new comment"	# add new comment 
```
