Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
20 changes: 13 additions & 7 deletions _vagrant/Vagrantfile
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|

#rethinkdb.vm.provider "virtualbox" do |v|
#v.memory = 2048
#v.cpus = 4
#v.cpus = 4y
#end

# load ansible playbook
Expand All @@ -29,12 +29,14 @@ Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
config.vm.define "docker" do |docker|
docker.vm.box = "ubuntu/trusty64"

docker.vm.network "forwarded_port", guest: 4222, host: 4222
docker.vm.network "forwarded_port", guest: 8333, host: 8333
docker.vm.network "forwarded_port", guest: 6379, host: 6379
docker.vm.network "forwarded_port", guest: 8080, host: 8080
docker.vm.network "forwarded_port", guest: 28015, host: 28015
docker.vm.network "forwarded_port", guest: 29015, host: 29015
docker.vm.network "forwarded_port", guest: 4001, host: 4001 # etcd client
docker.vm.network "forwarded_port", guest: 4222, host: 4222 # nats #1
docker.vm.network "forwarded_port", guest: 8333, host: 8333 # nats #2
docker.vm.network "forwarded_port", guest: 6379, host: 6379 # redis
docker.vm.network "forwarded_port", guest: 7001, host: 7001 # etcd peer
docker.vm.network "forwarded_port", guest: 8080, host: 8080 # rethinkdb ui
docker.vm.network "forwarded_port", guest: 28015, host: 28015 # rethinkdb #1
docker.vm.network "forwarded_port", guest: 29015, host: 29015 # rethinkdb #2

docker.vm.provider "virtualbox" do |v|
v.customize ["modifyvm", :id, "--natdnshostresolver1", "on"]
Expand All @@ -54,6 +56,10 @@ Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
d.pull_images "dockerfile/redis"
d.run "dockerfile/redis",
args: "--name redis -p 6379:6379"

d.pull_images "quay.io/coreos/etcd:v0.4.6"
d.run "quay.io/coreos/etcd:v0.4.6",
args: "--name etcd -p 4001:4001 -p 7001:7001"
end
end
end
10 changes: 8 additions & 2 deletions main.go
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ import (

"github.com/Sirupsen/logrus"

"github.com/namsral/flag"
"github.com/lavab/flag"
"github.com/zenazn/goji/graceful"

"github.com/lavab/api/env"
Expand Down Expand Up @@ -49,7 +49,7 @@ var (
}(), "Address of the RethinkDB database")
rethinkdbKey = flag.String("rethinkdb_key", os.Getenv("RETHINKDB_AUTHKEY"), "Authentication key of the RethinkDB database")
rethinkdbDatabase = flag.String("rethinkdb_db", func() string {
database := os.Getenv("RETHINKDB_NAME")
database := os.Getenv("RETHINKDB_DB")
if database == "" {
database = "dev"
}
Expand All @@ -68,6 +68,12 @@ var (
yubiCloudKey = flag.String("yubicloud_key", "", "YubiCloud API key")
// Loggly URL
logglyToken = flag.String("loggly_token", "", "Loggly token")
// etcd
etcdAddress = flag.String("etcd-address", "", "etcd peer addresses split by commas")
etcdCAFile = flag.String("etcd-ca-file", "", "etcd path to server cert's ca")
etcdCertFile = flag.String("etcd-cert-file", "", "etcd path to client cert file")
etcdKeyFile = flag.String("etcd-key-file", "", "etcd path to client key file")
etcdPath = flag.String("etcd-path", "settings/", "Path of the keys")
)

func main() {
Expand Down
3 changes: 3 additions & 0 deletions models/account.go
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,9 @@ type Account struct {
FactorValue []string `json:"-" gorethink:"factor_value"`

Status string `json:"status" gorethink:"status"`

// AppData is used for clientside settings storage
AppData interface{} `json:"app_data" gorethink:"app_data"`
}

// SetPassword changes the account's password
Expand Down
12 changes: 12 additions & 0 deletions routes/accounts.go
Original file line number Diff line number Diff line change
Expand Up @@ -85,6 +85,12 @@ func AccountsCreate(w http.ResponseWriter, r *http.Request) {

if input.Username != "" {
if used, err := env.Reservations.IsUsernameUsed(input.Username); err != nil || used {
if err != nil {
env.Log.WithFields(logrus.Fields{
"error": err.Error(),
}).Error("Unable to lookup reservations for usernames")
}

utils.JSONResponse(w, 400, &AccountsCreateResponse{
Success: false,
Message: "Username already reserved",
Expand All @@ -93,6 +99,12 @@ func AccountsCreate(w http.ResponseWriter, r *http.Request) {
}

if used, err := env.Accounts.IsUsernameUsed(input.Username); err != nil || used {
if err != nil {
env.Log.WithFields(logrus.Fields{
"error": err.Error(),
}).Error("Unable to lookup registered accounts for usernames")
}

utils.JSONResponse(w, 400, &AccountsCreateResponse{
Success: false,
Message: "Username already used",
Expand Down
2 changes: 1 addition & 1 deletion routes/hello.go
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ type HelloResponse struct {
func Hello(w http.ResponseWriter, r *http.Request) {
utils.JSONResponse(w, 200, &HelloResponse{
Message: "Lavaboom API",
DocsURL: "http://lavaboom.readme.io/",
DocsURL: "https://docs.lavaboom.io/",
Version: env.Config.APIVersion,
})
}
45 changes: 0 additions & 45 deletions setup/setup.go
Original file line number Diff line number Diff line change
@@ -1,9 +1,7 @@
package setup

import (
"bufio"
"encoding/json"
"io/ioutil"
"net/http"
"net/http/httptest"
"strings"
Expand All @@ -13,7 +11,6 @@ import (
"github.com/Sirupsen/logrus"
"github.com/apcera/nats"
"github.com/dancannon/gorethink"
"github.com/googollee/go-socket.io"
"github.com/segmentio/go-loggly"
"github.com/zenazn/goji/web"
"github.com/zenazn/goji/web/middleware"
Expand Down Expand Up @@ -369,48 +366,6 @@ func PrepareMux(flags *env.Flags) *web.Mux {
mux.Get("/keys/:id", routes.KeysGet)
auth.Post("/keys/:id/vote", routes.KeysVote)

// WebSockets handler
ws, err := socketio.NewServer(nil)
if err != nil {
env.Log.WithFields(logrus.Fields{
"error": err,
}).Fatal("Unable to create a socket.io server")
}
ws.On("connection", func(so socketio.Socket) {
env.Log.WithFields(logrus.Fields{
"id": so.Id(),
}).Info("New WebSockets connection")

so.On("request", func(id string, method string, path string, data string, headers map[string]string) {
w := httptest.NewRecorder()
r, err := http.NewRequest(method, "http://api.lavaboom.io"+path, strings.NewReader(data))
if err != nil {
so.Emit("error", err.Error())
return
}

for key, value := range headers {
r.Header.Set(key, value)
}

mux.ServeHTTP(w, r)

resp, err := http.ReadResponse(bufio.NewReader(w.Body), r)
if err != nil {
so.Emit("error", err.Error())
return
}

body, err := ioutil.ReadAll(resp.Body)
if err != nil {
so.Emit("error", err.Error())
return
}

so.Emit("response", id, resp.StatusCode, resp.Header, body)
})
})

mux.Handle("/ws/*", sockjs.NewHandler("/ws", sockjs.DefaultOptions, func(session sockjs.Session) {
var subscribed string

Expand Down