Go to file
Rick Carlino ffa14860cb Update reademe 2016-10-05 09:05:00 -05:00
app new line in sync.rb 2016-10-04 15:51:57 -05:00
bin Finished base app 2014-03-12 06:42:11 -07:00
config Sync resource 2016-10-04 10:35:44 -05:00
db Fix malformed migrations 2016-09-20 10:50:28 -05:00
lib Verify expired tokens are invalid; bump token validity to 30 days. 2016-09-29 15:55:53 -05:00
public RM more cached stuff 2016-09-26 15:27:07 -05:00
spec Sync resource 2016-10-04 10:35:44 -05:00
vendor/assets Added foundation and high voltage. Readme updates, too. 2014-03-31 06:31:38 -07:00
.buildpacks use heroku-postbuild 2016-09-22 11:17:12 -05:00
.gitignore Add logging file 2016-09-27 15:43:51 -05:00
.hound.yml WIP, browserify 2015-09-22 12:17:06 -05:00
.ruby-gemset rename application from `dss` to `farmbot` 2015-03-09 05:31:05 -05:00
.ruby-version Actually helpful registration errors 2016-05-09 15:01:12 -05:00
.travis.yml Typo in Travis.yml 2015-09-28 10:43:21 -05:00
CONTRIBUTING.md Create CONTRIBUTING.md 2015-09-18 22:48:44 -07:00
DEPLOYMENT.md Update reademe 2016-10-05 09:05:00 -05:00
Gemfile Update deployment information. 2016-09-12 15:42:18 -05:00
Gemfile.lock ftfy 2016-09-26 08:16:26 -07:00
LICENSE Spruce up the README 2015-08-19 10:37:13 -05:00
README.md Update README. 2016-09-26 16:27:56 -05:00
Rakefile Cruft removal, part I 2015-10-20 13:03:42 -05:00
api_docs.md.erb API examples 2015-06-10 07:13:41 -05:00
config.ru Added foundation and high voltage. Readme updates, too. 2014-03-31 06:31:38 -07:00
deploy.sh -g flag for webpack 2016-09-23 14:36:11 -05:00
deploy_errors.txt -g flag for webpack 2016-09-23 14:36:11 -05:00
frontend_build.yml Re-deploy 2016-09-21 15:41:33 -05:00
index.js Add `rake frontend:install`. 2016-09-22 09:15:57 -05:00
install_frontend.sh Done. 2016-09-27 16:33:06 -05:00
package.json Cleanup install_frontend.sh 2016-09-26 15:30:00 -05:00

README.md

Code Climate Test Coverage

Do I need this?

This repository is intended for software developers who wish to modify the Farmbot Web App. If you are not a developer, you are highly encouraged to use the publicly available web app.

If you are a developer interested in contributing or would like to provision your own server, you are in the right place.

Farmbot Web API

LATEST STABLE VERSION IS HERE

This Repo is RESTful JSON API for Farmbot. This includes things like storage of user data, plant data, authorization tokens and a variety of other resources.

The key responsibility of the API is information and permissions management. This should not be confused with device control, which is done via MQTT.

Developer Setup

Prerequisites

Your machine will need the following:

  1. Ruby 2.3.1
  2. A running MySQL server

Setup

  1. git clone https://github.com/FarmBot/Farmbot-Web-API farmbot-web-app
  2. cd farmbot-web-app
  3. bundle install
  4. Copy config/database.example.yml to config/database.yml. In GNU/Linux or Mac: mv config/database.example.yml config/database.yml.
  5. rake db:create:all db:migrate db:seed
  6. (optional) Verify installation with RAILS_ENV=test rake db:create db:migrate && rspec spec.
  7. MQTT_HOST=your_mqtt_server_domain rails s
  8. (optional) Run ./install_frontend.sh to install the latest frontend app. You may also run the frontend on a seperate server. See frontend repository for details.
  9. Open localhost:3000.
  10. Raise an issue if you hit problems with any of these steps.

Provisioning Your Own with Dokku

Please see deployment.md.

Config Settings (important)

Here are some of the configuration options you must set when provisioning a new server:

  • Encryption keys: Encryption keys will be autogenerated if not present. They can be reset using rake keys:generate. If ENV['RSA_KEY'] is set, it will be used in place of the *.pem files. Useful for environments like Heroku, where file system access is not allowed.
  • ENV['DEVISE_SECRET']: Used for devise. Use rake secret to generate a new value.
  • ENV['MQTT_HOST']: Host (no port or slashes or anything) of running MQTT gateway. This is required so that Farmbot can know where to connect when given an authorization token.
  • ENV['JS_FILE_URL']: URL pointing to the Farmbot Frontend bundle.js file. This is what gets injected into the <script> tag when the user visits /app.
  • ENV['API_HOST']: Domain of the server. Default is localhost.
  • ENV['API_PORT']: Port the server is on. Default is 3000.

We can't fix issues we don't know about. Please submit an issue if you are having trouble installing on your local machine.

Running Specs

Please run them before submitting pull requests.

  • bundle exec rspec spec

Generating an API token

You must pass a token string into most HTTP requests under the Authorization: request header.

Here's what a response looks like when you request a token:

{
    "token": {
        "unencoded": {
            "sub": "test123@test.com",
            "iat": 1459109728,
            "jti": "922a5a0d-0b3a-4767-9318-1e41ae600352",
            "iss": "http://localhost:3000/",
            "exp": 1459455328,
            "mqtt": "localhost",
            "bot": "aa7bb37f-5ba3-4654-b2e4-58ed5746508c"
        },
        "encoded":
        // THE IMPORTANT PART IS HERE!!:
         "eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJzdWIiOiJ0ZXN0MTIzQHRlc3QuY29tIiwiaWF0IjoxNDU5MTA5NzI4LCJqdGkiOiI5MjJhNWEwZC0wYjNhLTQ3NjctOTMxOC0xZTQxYWU2MDAzNTIiLCJpc3MiOiJodHRwOi8vbG9jYWxob3N0OjMwMDAvIiwiZXhwIjoxNDU5NDU1MzI4LCJtcXR0IjoibG9jYWxob3N0IiwiYm90IjoiYWE3YmIzN2YtNWJhMy00NjU0LWIyZTQtNThlZDU3NDY1MDhjIn0.KpkNGR9YH68AF3iHP48GormqXzspBJrDGm23aMFGyL_eRIN8iKzy4gw733SaJgFjmebJOqZkz3cly9P5ZpCKwlaxAyn9RvfjQgFcUK0mywWAAvKp5lHfOFLhBBGICTW1r4HcZBgY1zTzVBw4BqS4zM7Y0BAAsflYRdl4dDRG_236p9ETCj0MSYxFagfLLLq0W63943jSJtNwv_nzfqi3TTi0xASB14k5vYMzUDXrC-Z2iBdgmwAYUZUVTi2HsfzkIkRcTZGE7l-rF6lvYKIiKpYx23x_d7xGjnQb8hqbDmLDRXZJnSBY3zGY7oEURxncGBMUp4F_Yaf3ftg4Ry7CiA"
    }
}

Important: The response is provided as JSON for human readability. For your Authorization header, you will only be using data.token.encoded. In this example, it's the string starting with eyJ0eXAiOiJ...

Via CURL

curl -H "Content-Type: application/json" \
     -X POST \
     -d '{"user":{"email":"test123@test.com","password":"password123"}}' \
     https://my.farmbot.io/api/tokens

Via JQuery

Since the API supports CORS, you can generate your token right in the browser.

Here's an example:

$.ajax({
    url: "https://my.farmbot.io/api/tokens",
    type: "POST",
    data: JSON.stringify({user: {email: 'admin@admin.com', password: 'password123'}}),
    contentType: "application/json"
})
.then(function(data){
  // You can now use your token:
  var MY_SHINY_TOKEN = data.token.encoded;
});

How to Contribute

  • Pull requests are always appreciated, but please
    • Write tests.
    • Follow the Ruby Community Style Guide.
    • Raise issues. We love to know about issues. Even the issues you think are only relevant to your setup. Just submit issues if you have issues.