1
0
Fork 0
mirror of https://github.com/documize/community.git synced 2025-08-08 06:55:28 +02:00

Merge pull request #8 from documize/pre-release-tidy

Salt a param + pre-release tidy
This commit is contained in:
Elliott Stoneham 2016-06-14 21:30:07 +01:00 committed by GitHub
commit 20815494f0
6 changed files with 68 additions and 27 deletions

View file

@ -12,17 +12,25 @@ You can operate outside the AGPL restrictions by purchasing Documize Enterprise
## Running Documize for the first time ## 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. Although the Documize binaries run on Linux, Windows and macOS, the build process has only been tested on macOS.
Install the prerequisites: 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) * 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 * NPM from https://www.npmjs.com
* Ember from http://emberjs.com/ * Ember from http://emberjs.com/
* MySQL (v10.7+) from http://dev.mysql.com/downloads/mysql/ * Bower from https://bower.io/
* MySQL (v10.7+) from http://dev.mysql.com/downloads/mysql/ (don't forget to copy the one-time password and your system may require a restart)
Make sure this repository sits at the following position relative to your $GOPATH: $GOPATH/src/github.com/documize/community 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 After cloning the repository in the above location, go there and run:
```
cd app
npm install
bower install
cd ..
./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. 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.

View file

@ -12,6 +12,7 @@
package endpoint package endpoint
import ( import (
"crypto/rand"
"database/sql" "database/sql"
"encoding/json" "encoding/json"
"errors" "errors"
@ -21,11 +22,13 @@ import (
"time" "time"
jwt "github.com/dgrijalva/jwt-go" jwt "github.com/dgrijalva/jwt-go"
"github.com/documize/community/documize/api/endpoint/models" "github.com/documize/community/documize/api/endpoint/models"
"github.com/documize/community/documize/api/entity" "github.com/documize/community/documize/api/entity"
"github.com/documize/community/documize/api/request" "github.com/documize/community/documize/api/request"
"github.com/documize/community/documize/api/util" "github.com/documize/community/documize/api/util"
"github.com/documize/community/documize/section/provider" "github.com/documize/community/documize/section/provider"
"github.com/documize/community/wordsmith/environment"
"github.com/documize/community/wordsmith/log" "github.com/documize/community/wordsmith/log"
"github.com/documize/community/wordsmith/utility" "github.com/documize/community/wordsmith/utility"
) )
@ -298,7 +301,33 @@ func preAuthorizeStaticAssets(r *http.Request) bool {
return false return false
} }
const jwtKey = "tsu3Acndky8cdTNx3" var jwtKey string
func init() {
environment.GetString(&jwtKey, "salt", false, "the salt string used to encode JWT tokens, if not set a random value will be generated",
func(t *string, n string) bool {
if jwtKey == "" {
b := make([]byte, 17)
_, err := rand.Read(b)
if err != nil {
jwtKey = err.Error()
log.Error("problem using crypto/rand", err)
return false
}
for k, v := range b {
if (v >= 'a' && v <= 'z') || (v >= 'A' && v <= 'Z') || (v >= '0' && v <= '0') {
b[k] = v
} else {
s := fmt.Sprintf("%x", v)
b[k] = s[0]
}
}
jwtKey = string(b)
log.Info("Please set DOCUMIZESALT or use -salt with this value: " + jwtKey)
}
return true
})
}
// Generates JSON Web Token (http://jwt.io) // Generates JSON Web Token (http://jwt.io)
func generateJWT(user, org, domain string) string { func generateJWT(user, org, domain string) string {

View file

@ -712,7 +712,8 @@ func writeUsers(w http.ResponseWriter, u []entity.User) {
if err != nil { if err != nil {
log.Error("unable to writeUsers", err) log.Error("unable to writeUsers", err)
u = []entity.User{} writeServerError(w, "unabe to writeUsers", err)
return
} }
writeSuccessBytes(w, j) writeSuccessBytes(w, j)

View file

@ -102,19 +102,19 @@ func TestOrganization(t *testing.T) {
_, err = p.GetOrganization("XXXXXXXXX") _, err = p.GetOrganization("XXXXXXXXX")
if err == nil { if err == nil {
t.Error("no error getting non-existant organization", err) t.Error("no error getting non-existent organization", err)
} }
p.testRollback(t) p.testRollback(t)
err = p.UpdateOrganization(entity.Organization{BaseEntity: entity.BaseEntity{RefID: "XXXXXXXXX"}}) err = p.UpdateOrganization(entity.Organization{BaseEntity: entity.BaseEntity{RefID: "XXXXXXXXX"}})
if err == nil { if err == nil {
t.Error("no error updating non-existant organization", err) t.Error("no error updating non-existent organization", err)
} }
p.testRollback(t) p.testRollback(t)
err = p.RemoveOrganization("XXXXXXXXX") err = p.RemoveOrganization("XXXXXXXXX")
if err == nil { if err == nil {
t.Error("no error removing non-existant organization", err) t.Error("no error removing non-existent organization", err)
} }
p.testRollback(t) p.testRollback(t)
} }

View file

@ -14,24 +14,26 @@ package section
import ( import (
"net/http" "net/http"
"testing" "testing"
"github.com/documize/community/documize/section/provider"
) )
type testsection struct { type testsection provider.TypeMeta
didRefresh bool
}
var ts testsection var ts testsection
func init() { func init() {
sectionsMap["testsection"] = &ts provider.Register("testsection", &ts)
} }
// Command is an end-point... // Command is an end-point...
func (ts *testsection) Command(w http.ResponseWriter, r *http.Request) {} func (ts *testsection) Command(w http.ResponseWriter, r *http.Request) {}
var didRefresh bool
// Refresh existing data, returning data in the format of the target system // Refresh existing data, returning data in the format of the target system
func (ts *testsection) Refresh(meta, data string) string { func (ts *testsection) Refresh(meta, data string) string {
ts.didRefresh = true didRefresh = true
return "" return ""
} }
@ -40,8 +42,8 @@ func (*testsection) Render(meta, data string) string {
return "testsection " + data return "testsection " + data
} }
func (*testsection) Meta() TypeMeta { func (*testsection) Meta() provider.TypeMeta {
section := TypeMeta{} section := provider.TypeMeta{}
section.ID = "TestGUID" section.ID = "TestGUID"
section.Title = "TestSection" section.Title = "TestSection"
@ -52,13 +54,13 @@ func (*testsection) Meta() TypeMeta {
} }
func TestSection(t *testing.T) { func TestSection(t *testing.T) {
if _, ok := Refresh("testsection", "", ""); !ok { if _, ok := provider.Refresh("testsection", "", ""); !ok {
t.Error("did not find 'testsection' smart section (1)") t.Error("did not find 'testsection' smart section (1)")
} }
if !ts.didRefresh { if !didRefresh {
t.Error("did not run the test Refresh method") t.Error("did not run the test Refresh method")
} }
out, ok := Render("testsection", "meta", "dingbat") out, ok := provider.Render("testsection", "meta", "dingbat")
if !ok { if !ok {
t.Error("did not find 'testsection' smart section (2)") t.Error("did not find 'testsection' smart section (2)")
} }
@ -66,7 +68,7 @@ func TestSection(t *testing.T) {
t.Error("wrong output from Render") t.Error("wrong output from Render")
} }
sects := GetSectionMeta() sects := provider.GetSectionMeta()
for _, v := range sects { for _, v := range sects {
if v.Title == "TestSection" { if v.Title == "TestSection" {
return return

View file

@ -14,6 +14,7 @@ package utility
import ( import (
"bytes" "bytes"
"fmt" "fmt"
"io"
"strings" "strings"
"unicode/utf8" "unicode/utf8"
@ -27,7 +28,7 @@ import (
type HTML string type HTML string
// write out the textual element of the html node, if present, then iterate through the child nodes. // write out the textual element of the html node, if present, then iterate through the child nodes.
func writeText(n *html.Node, b *bytes.Buffer, isTest bool) { func writeText(n *html.Node, b io.Writer, isTest bool) {
if !excluded(n) { if !excluded(n) {
switch n.Type { switch n.Type {
case html.TextNode: case html.TextNode: