farmbot-resource 0.3.0 → 0.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/README.md +4 -1
- data/example.rb +15 -0
- data/example_credentials.txt +6 -0
- data/lib/client.rb +35 -8
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 4811aa1f4ed868f628643ed48f776a9ff9211ebe
|
4
|
+
data.tar.gz: b05169269961b8f17ccd290ba5c7adff7b6d2f44
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 18b5028d03d05edd060254b7ed4355a9ac0daeab2c65107fef790df4862867e00ddde9e84831a772d4a07e981bd84f386f4ff93632a1891773a76686ebab9dd2
|
7
|
+
data.tar.gz: 63e0a8e50269ee87a8f52034ce3871e5014e2a9a3671c4d6147afa3c4e0bc2cfa6f50924a72db7a8fbb7f621039f7a08d0e50f1dd85375fc880e7a76b0146d2c
|
data/README.md
CHANGED
@@ -42,7 +42,10 @@ schedules = client.schedules.all
|
|
42
42
|
# Another use case: cache busting with fetch()
|
43
43
|
# Results are always cached until fetch() is called
|
44
44
|
sequences = client.sequences.fetch.all
|
45
|
-
|
46
45
|
```
|
47
46
|
|
47
|
+
# Encryption
|
48
|
+
|
49
|
+
The Farmbot web app issues an RSA public key. If you need to sign stuff, the key is accessible via `client.public_key`
|
50
|
+
|
48
51
|
**See example.rb for a runnable sample**.
|
data/example.rb
CHANGED
@@ -21,3 +21,18 @@ puts("Grabbing devices")
|
|
21
21
|
puts client.device.current.to_s
|
22
22
|
puts "Grabbing public key"
|
23
23
|
puts client.public_key.to_pem
|
24
|
+
puts "Done using email/password. Attempting with credentials file now."
|
25
|
+
# Just a fake credentials file, as generated by Farmbot.
|
26
|
+
example = File.read("example_credentials.txt")
|
27
|
+
# An alternative means of generating a token without a password.
|
28
|
+
alt_token = FbResource::Client.get_token(credentials: example,
|
29
|
+
url: "http://localhost:3000")
|
30
|
+
alt_client = FbResource::Client.new do |config|
|
31
|
+
# Note for users that self host a Farmbot API:
|
32
|
+
# FbResource will grab the URL from the token's "ISS" claim.
|
33
|
+
config.token = token
|
34
|
+
end
|
35
|
+
puts("Grabbing devices with credentials")
|
36
|
+
puts client.device.current.to_s
|
37
|
+
puts "Grabbing public key with credentials"
|
38
|
+
puts client.public_key.to_pem
|
@@ -0,0 +1,6 @@
|
|
1
|
+
v5UA4zaAfXcZqXfIFVoWxewGELVhx5cTsQkK5hnj/JY9pGAy4PrmKHL07dqb
|
2
|
+
J8h+QNmeKvb0QxX0yZDCZEB2d6rP0ya15CU6qEzY8PRHMoZtvxD1OWN9Lwc4
|
3
|
+
O+Mo9sMKGVTSUrUWRhNA1qPA41vQ9iWXcUua48rfMvhN4dvcOwz6IkC9DaSu
|
4
|
+
5CmbrtUfaVV+92qN318Qr+WAq/wCb/lX/bxHKU95n9WV4pgUKQKlUN5Cgf86
|
5
|
+
ptdq5YrDYhMwFz6F9FBRJ/tQ0gOynMyb2obSa/zJFim8NgxHMpbTPLZd7ZY5
|
6
|
+
uQp/DPjRjNEP4/tKNEQtwiPcG2U1i+28hG7MmEWsqw==
|
data/lib/client.rb
CHANGED
@@ -12,15 +12,18 @@ module FbResource
|
|
12
12
|
post_config
|
13
13
|
end
|
14
14
|
|
15
|
-
def self.get_token(url: "http://my.farmbot.io",
|
15
|
+
def self.get_token(url: "http://my.farmbot.io",
|
16
|
+
email: "EMAIL NOT SET",
|
17
|
+
password: "PASSWORD NOT SET",
|
18
|
+
credentials: nil)
|
16
19
|
# TODO handle auth errors in a more civilized manner.
|
17
20
|
resource_url = url + "/api/tokens"
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
21
|
+
if(credentials)
|
22
|
+
result = from_credentials(resource_url, credentials)
|
23
|
+
else
|
24
|
+
result = from_email_and_password(resource_url, email, password)
|
25
|
+
end
|
26
|
+
parse_token(result)
|
24
27
|
end
|
25
28
|
|
26
29
|
# Useful when you need to sign arbitrary secrets and give them to the server
|
@@ -51,7 +54,14 @@ module FbResource
|
|
51
54
|
end
|
52
55
|
|
53
56
|
def api_url
|
54
|
-
|
57
|
+
raw = config.token.split(".")[1]
|
58
|
+
token_string = Base64.decode64(raw)
|
59
|
+
hash = JSON.parse(token_string)
|
60
|
+
hash["iss"]
|
61
|
+
rescue JSON::ParserError
|
62
|
+
msg = "Farmbot Resource couldn't parse the auth token provided:\n\n"
|
63
|
+
msg += token_string + "\n\n"
|
64
|
+
raise InvalidConfig, msg
|
55
65
|
end
|
56
66
|
|
57
67
|
private
|
@@ -64,5 +74,22 @@ module FbResource
|
|
64
74
|
invalidate("config needs `token` attribute") unless @config.token
|
65
75
|
@config.url = api_url
|
66
76
|
end
|
77
|
+
|
78
|
+
def self.from_credentials(resource_url, credentials)
|
79
|
+
payload = {user: {credentials: credentials}}
|
80
|
+
RestClient.post(resource_url, payload)
|
81
|
+
end
|
82
|
+
|
83
|
+
def self.from_email_and_password(resource_url, email, password)
|
84
|
+
payload = {user: {email: email, password: password}}
|
85
|
+
RestClient.post(resource_url, payload)
|
86
|
+
end
|
87
|
+
|
88
|
+
def self.parse_token(result)
|
89
|
+
json = JSON.parse(result)
|
90
|
+
token = json["token"]
|
91
|
+
string = token["encoded"]
|
92
|
+
string
|
93
|
+
end
|
67
94
|
end
|
68
95
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: farmbot-resource
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.4.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Rick Carlino
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-03-
|
11
|
+
date: 2016-03-27 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -108,6 +108,7 @@ files:
|
|
108
108
|
- README.md
|
109
109
|
- Rakefile
|
110
110
|
- example.rb
|
111
|
+
- example_credentials.txt
|
111
112
|
- lib/client.rb
|
112
113
|
- lib/config.rb
|
113
114
|
- lib/farmbot-resource.rb
|