# DocStore - document server and indexing engine

## Building

**Requirements:**

* Go (golang) >= 1.16

Linux:

```
make

or offline

make vendor
```

OpenBSD:

```
GOOS=openbsd make

or offline

GOOS=openbsd make vendor
```

## Install

**Requirements:**
* tesseract
* pdftotext

See the `scripts/` directory on how to install docstore on Linux or OpenBSD.

## Config

```
{
	"run_dir": "/var/lib/docstore",    // running directory. data will be stored here
	"user": "docstore",                // drop privileges to user
	"group": "docstore",               // drop privileges to group
	"listen_addr": "127.0.0.1:8080",   // listening <address>:<port>
	"log_file": "docstore.log",        // log file (use - for stdout, this only works in combination with 'foreground: true')
	"secret": "",                      // static hmac secret (at least 64 chars, used for JWT signing)
	"langs": ["deu", "eng"],           // languages for tesseract ocr
	"cmd_timeout": 600,                // timeout in seconds for executed teseract and pdftotext commands
	"tesseract_threads": 1,            // tesseract thread limit
	"tesseract_oem": 1,                // tesseract oem value
	"foreground": false,               // do not fork into the background
	"secure_cookie": false,            // enable secure cookie flag
	"debug": false,                    // enable debugging
	"webdav": false                    // enable webdav upload
}
```

## Features

* Fulltext indexing of documents
  * Query Syntax: https://github.com/bcampbell/qs/blob/master/syntax.md
  * The `Index All` button tries add every file not already indexed to the index
* Custom regex based tags (see https://golang.org/pkg/regexp/syntax/)
  * The `Retag All` button will reapply the current tags to all indexed documents
* Optional WebDav upload functionality
  * WebDav can be accessed at `http://<ip>:<port>/webdav`
  * This WebDav does only permit writing files **once** (reading files or creating directories is not allowed)
* Password hashing using BCrypt
* 2FA using TOTP
* Content Security Policy
* No Javascript (yet)

### DocStore on OpenBSD

DocStore makes use of the OpenBSD native security features [pledge(2)](https://man.openbsd.org/pledge) and [unveil(2)](https://man.openbsd.org/unveil).

## Usage

DocStore manages all files and directories under the `$run_dir/data` directory.

Do not delete or move files around in the `$run_dir/data` directory using the filesystem as this messes with the index mapping.

You can however add more files and directories using the underlying file system.
