# Documize Community Edition

To discover Documize please visit https://documize.com

Documize® is a registered trade mark of Documize Inc.

This repository is copyright 2016 Documize Inc. <legal@documize.com>. All rights reserved.

This software (Documize Community Edition) is licensed under GNU AGPL v3 http://www.gnu.org/licenses/agpl-3.0.en.html

You can operate outside the AGPL restrictions by purchasing Documize Enterprise Edition and obtaining a commercial license by contacting <sales@documize.com>. 

## Running Documize for the first time 

Although the Documize binaries run on Linux, Windows and OSX, the build process has only been tested on OSX.

Install the prerequisites:
* Go from https://golang.org (be careful to set the $GOPATH environment variable correctly, you may find https://www.goinggo.net/2016/05/installing-go-and-your-workspace.html helpful)
* NPM from https://www.npmjs.com 
* Ember from http://emberjs.com/ 
* MySQL (v10.7+) from http://dev.mysql.com/downloads/mysql/

Make sure this repository sits at the following position relative to your $GOPATH: $GOPATH/src/github.com/documize/community

After cloning the repository in the above location, go there and run: ./build.sh 

The build script packages up the Ember JS/HTML/CSS code for production use, then generates Go code that creates a simple in-memory file system to contain it. That generated Go code is compiled with the rest to produce a single binary for each of the target systems. 

Your ./bin directory should now contain a set of binaries for a number of target systems. This binary can be executed on any system which also has access to a MySQL database with no further dependencies.

Use a MySQL tool to create an empty database for Documize to use, making sure that the default collation setting is utf8_general_ci or some other utf8 variant.

Run Documize for the first time to set-up the database and your user information (for example on OSX, using port 5001, MySQL user root/password and database ‘documize’):
```
./bin/documize-darwin-amd64 -port=5001 -db='root:password@tcp(localhost:3306)/documize'
```
An error message will appear in the log to say your installation is in set-up mode. Now navigate to http://localhost:5001 and follow the instructions.

Hopefully you will now have a working Documize instance.

Once you have set-up the database as described above, you could go to the ./documize directory and use the command "go run documize.go" in place of the binary name.

## Command line flags and environment variables 

The command line flags are defined below:
```
Usage of ./bin/documize-darwin-amd64:
    -cert string
        the cert.pem file used for https
    -db string
        "username:password@protocol(hostname:port)/databasename" for example "fred:bloggs@tcp(localhost:3306)/documize"
    -forcesslport string
        redirect given http port number to TLS
    -insecure string
        if 'true' allow https endpoints with invalid certificates (only for testing)
    -key string
        the key.pem file used for https
    -log string
        system being logged e.g. 'PRODUCTION' (default "Non-production")
    -offline string
        set to '1' for OFFLINE mode
    -plugin string
        the JSON file describing plugins, default 'DB' uses the database config table 'FILEPLUGINS' entry (default "DB")
    -port string
        http/https port number
    -showsettings
        if true, show settings in the log (WARNING: these settings may include passwords)
```
Flags related to SSL/TLS are discussed in detail later. 

For operational convenience, some of these flags can also be set through environment variables: DOCUMIZECERT => -cert ; DOCUMIZEDB => -db ; DOCUMIZEFORCESSLPORT => -forcesslport ; DOCUMIZEKEY => -key ; DOCUMIZEPORT => -port .

## Configuring the server to use HTTPS

To configure SSL you will need valid certificate and key .pem files. 

If you don’t have a valid certification key pair for your development machine, you can generate them by doing the following:
```
cd selfcert
go run generate_cert.go -host localhost
cd ..
```
…obviously you should never use a self-generated certificate in a live environment.

To run Documize using those certs (using the set-up above):
```
./bin/documize-darwin-amd64 -db='root:password@tcp(localhost:3306)/documize' -port=5001 -cert selfcert/cert.pem -key selfcert/key.pem 
```
If you navigate to https://localhost:5001 and you want to remove the Chrome warning messages about your invalid self-cert follow the instructions at: https://www.accuweaver.com/2014/09/19/make-chrome-accept-a-self-signed-certificate-on-osx/

If you do not specify a port, Documize will default to port ```443``` if there are key/cert files, port ```80``` otherwise.

If you want non-SSL http:// traffic to redirect to the SSL port, say from port 9999, use command line flag: ```-forcesslport=9999``` 

## Ember 

This section is only required if you want to develop the Ember code.

These two commands are best run in different terminal windows: 

(1) Run the Go binary needs to run an SSL server on port 5001, as described in the sections above.

(2) Run the Ember code using the command ```ember s``` from the app directory.

Ember should be visible by navigating to: http://localhost:4200
 

## Configuring SMTP 

In order to send e-mail from your Documize instance, you must configure it.

At present this configuration is not available from the web interface, it requires the use of a MySQL tool of your choice.

In your database, the table `config` has two fields `key` holding CHAR(255) and `config` holding JSON.

The SQL to find you current SMTP configuration is: ``` `SELECT `config` FROM `config` WHERE `key` = 'SMTP'; ```

In an empty database the result will be something like:

```{"host": "", "port": "", "sender": "", "userid": "", "password": ""}```

To configure SMTP, you must set these values in the JSON as your systems require, using a MySQL tool. 

The host is the DNS name of your SMTP server; the port defaults to 587; the sender Documize use is "Documize <hello@documize.com>"; userid and password are your SMTP server credentials.
