discourse_api 0.4.1 → 0.4.2
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/discourse_api.gemspec +2 -2
- data/examples/backups.rb +18 -0
- data/examples/disposable_invite_tokens.rb +1 -2
- data/lib/discourse_api/api/backups.rb +14 -0
- data/lib/discourse_api/api/search.rb +1 -1
- data/lib/discourse_api/api/sso.rb +3 -0
- data/lib/discourse_api/api/tags.rb +10 -0
- data/lib/discourse_api/client.rb +2 -0
- data/lib/discourse_api/single_sign_on.rb +11 -3
- data/lib/discourse_api/version.rb +1 -1
- data/spec/discourse_api/api/search_spec.rb +2 -2
- metadata +27 -19
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA1:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 55956e7fcbb398abf377f1f648453fb5cecda82a
|
|
4
|
+
data.tar.gz: cbaf89c085414d8a6db32a4c9ac782cfaa4dde7b
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: df81f31669c828560956873d6d2059f2914fcd8a88319538c3e47aa9d5ce9c049f6adfc1ce1cdfe66cafe70a2657bede0c64ddad7254311cf614645d47c47d4f
|
|
7
|
+
data.tar.gz: 7b300c7418237936b66c1c504e176025506bc8c01de018ab76f5fe79165d7da3e1f318a37f107ce929b51880e3cec7301939491aeddce36c5ea5b3d2a5627468
|
data/discourse_api.gemspec
CHANGED
|
@@ -18,10 +18,9 @@ Gem::Specification.new do |spec|
|
|
|
18
18
|
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
|
19
19
|
spec.require_paths = ["lib"]
|
|
20
20
|
|
|
21
|
-
spec.add_dependency "faraday", "0.9.0"
|
|
21
|
+
spec.add_dependency "faraday", "~>0.9.0"
|
|
22
22
|
spec.add_dependency "faraday_middleware", "~> 0.9"
|
|
23
23
|
spec.add_dependency "rack", "~> 1.5"
|
|
24
|
-
spec.add_dependency "dotenv", "~> 1.0"
|
|
25
24
|
|
|
26
25
|
spec.add_development_dependency "bundler", "~> 1.3"
|
|
27
26
|
spec.add_development_dependency "rake", "10.3.2"
|
|
@@ -31,4 +30,5 @@ Gem::Specification.new do |spec|
|
|
|
31
30
|
spec.add_development_dependency "guard", "~> 2.6"
|
|
32
31
|
spec.add_development_dependency "rb-inotify", "~> 0.9"
|
|
33
32
|
spec.add_development_dependency "simplecov", "~> 0.9"
|
|
33
|
+
spec.add_development_dependency "dotenv", ">= 1.0", "< 3.0"
|
|
34
34
|
end
|
data/examples/backups.rb
ADDED
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
$LOAD_PATH.unshift File.expand_path('../../lib', __FILE__)
|
|
2
|
+
require File.expand_path('../../lib/discourse_api', __FILE__)
|
|
3
|
+
|
|
4
|
+
client = DiscourseApi::Client.new("http://localhost:3000")
|
|
5
|
+
client.api_key = "YOUR_API_KEY"
|
|
6
|
+
client.api_username = "YOUR_USERNAME"
|
|
7
|
+
|
|
8
|
+
# get list of backup files
|
|
9
|
+
puts client.backups()
|
|
10
|
+
|
|
11
|
+
# create backup
|
|
12
|
+
puts client.create_backup()
|
|
13
|
+
|
|
14
|
+
# restore backup
|
|
15
|
+
puts client.restore_backup("backup_file_name.tar.gz")
|
|
16
|
+
|
|
17
|
+
# download backup
|
|
18
|
+
puts client.download_backup("backup_file_name.tar.gz")
|
|
@@ -9,11 +9,10 @@ client.api_username = "YOUR_USERNAME"
|
|
|
9
9
|
|
|
10
10
|
# fetch email-less invite tokens
|
|
11
11
|
invite_tokens = client.disposable_tokens(username: "eviltrout", quantity: 5, group_names: "security,support")
|
|
12
|
-
invite_tokens_array = invite_tokens.body
|
|
13
12
|
|
|
14
13
|
# write to CSV file
|
|
15
14
|
CSV.open(File.expand_path("../invite_tokens.csv", __FILE__), "w") do |csv|
|
|
16
|
-
|
|
15
|
+
invite_tokens.each do |value|
|
|
17
16
|
csv << [value]
|
|
18
17
|
end
|
|
19
18
|
end
|
|
@@ -5,6 +5,20 @@ module DiscourseApi
|
|
|
5
5
|
response = get("/admin/backups.json")
|
|
6
6
|
response.body
|
|
7
7
|
end
|
|
8
|
+
|
|
9
|
+
def create_backup
|
|
10
|
+
post("/admin/backups", with_uploads: true)
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
def restore_backup(file_name)
|
|
14
|
+
post("/admin/backups/#{file_name}/restore")
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def download_backup(file_name)
|
|
18
|
+
response = get("/admin/backups/#{file_name}")
|
|
19
|
+
# write file
|
|
20
|
+
File.open('examples/backup.tar.gz', 'wb') { |fp| fp.write(response.body) }
|
|
21
|
+
end
|
|
8
22
|
end
|
|
9
23
|
end
|
|
10
24
|
end
|
|
@@ -8,7 +8,7 @@ module DiscourseApi
|
|
|
8
8
|
# @option options [String] :type_filter Returns results of the specified type.
|
|
9
9
|
# @return [Array] Return results as an array of Hashes.
|
|
10
10
|
def search(term, options={})
|
|
11
|
-
response = get('/search
|
|
11
|
+
response = get('/search/query', options.merge(term: term))
|
|
12
12
|
response[:body]
|
|
13
13
|
end
|
|
14
14
|
end
|
|
@@ -8,6 +8,9 @@ module DiscourseApi
|
|
|
8
8
|
sso.username = params[:username]
|
|
9
9
|
sso.email = params[:email]
|
|
10
10
|
sso.external_id = params[:external_id]
|
|
11
|
+
sso.suppress_welcome_message = params[:suppress_welcome_message] === true
|
|
12
|
+
sso.avatar_url = params[:avatar_url]
|
|
13
|
+
sso.avatar_force_update = params[:avatar_force_update] === true
|
|
11
14
|
post("/admin/users/sync_sso/", sso.payload)
|
|
12
15
|
end
|
|
13
16
|
end
|
data/lib/discourse_api/client.rb
CHANGED
|
@@ -6,6 +6,7 @@ require 'discourse_api/version'
|
|
|
6
6
|
require 'discourse_api/api/categories'
|
|
7
7
|
require 'discourse_api/api/search'
|
|
8
8
|
require 'discourse_api/api/sso'
|
|
9
|
+
require 'discourse_api/api/tags'
|
|
9
10
|
require 'discourse_api/api/topics'
|
|
10
11
|
require 'discourse_api/api/posts'
|
|
11
12
|
require 'discourse_api/api/users'
|
|
@@ -26,6 +27,7 @@ module DiscourseApi
|
|
|
26
27
|
include DiscourseApi::API::Categories
|
|
27
28
|
include DiscourseApi::API::Search
|
|
28
29
|
include DiscourseApi::API::SSO
|
|
30
|
+
include DiscourseApi::API::Tags
|
|
29
31
|
include DiscourseApi::API::Topics
|
|
30
32
|
include DiscourseApi::API::Posts
|
|
31
33
|
include DiscourseApi::API::Users
|
|
@@ -5,9 +5,10 @@ require 'openssl'
|
|
|
5
5
|
module DiscourseApi
|
|
6
6
|
class SingleSignOn
|
|
7
7
|
ACCESSORS = [:nonce, :name, :username, :email, :avatar_url, :avatar_force_update,
|
|
8
|
-
:about_me, :external_id, :return_sso_url, :admin, :moderator]
|
|
8
|
+
:about_me, :external_id, :return_sso_url, :admin, :moderator, :suppress_welcome_message]
|
|
9
9
|
FIXNUMS = []
|
|
10
|
-
BOOLS = [:avatar_force_update, :admin, :moderator]
|
|
10
|
+
BOOLS = [:avatar_force_update, :admin, :moderator, :suppress_welcome_message]
|
|
11
|
+
#NONCE_EXPIRY_TIME = 10.minutes # minutes is a rails method and is causing an error. Is this needed in the api?
|
|
11
12
|
|
|
12
13
|
attr_accessor(*ACCESSORS)
|
|
13
14
|
attr_accessor :sso_secret, :sso_url
|
|
@@ -26,7 +27,12 @@ module DiscourseApi
|
|
|
26
27
|
|
|
27
28
|
parsed = Rack::Utils.parse_query(payload)
|
|
28
29
|
if sso.sign(parsed["sso"]) != parsed["sig"]
|
|
29
|
-
|
|
30
|
+
diags = "\n\nsso: #{parsed["sso"]}\n\nsig: #{parsed["sig"]}\n\nexpected sig: #{sso.sign(parsed["sso"])}"
|
|
31
|
+
if parsed["sso"] =~ /[^a-zA-Z0-9=\r\n\/+]/m
|
|
32
|
+
raise RuntimeError, "The SSO field should be Base64 encoded, using only A-Z, a-z, 0-9, +, /, and = characters. Your input contains characters we don't understand as Base64, see http://en.wikipedia.org/wiki/Base64 #{diags}"
|
|
33
|
+
else
|
|
34
|
+
raise RuntimeError, "Bad signature for payload #{diags}"
|
|
35
|
+
end
|
|
30
36
|
end
|
|
31
37
|
|
|
32
38
|
decoded = Base64.decode64(parsed["sso"])
|
|
@@ -98,5 +104,7 @@ module DiscourseApi
|
|
|
98
104
|
|
|
99
105
|
Rack::Utils.build_query(payload)
|
|
100
106
|
end
|
|
107
|
+
|
|
101
108
|
end
|
|
109
|
+
|
|
102
110
|
end
|
|
@@ -5,12 +5,12 @@ describe DiscourseApi::API::Search do
|
|
|
5
5
|
|
|
6
6
|
describe "#search" do
|
|
7
7
|
before do
|
|
8
|
-
stub_get("http://localhost:3000/search
|
|
8
|
+
stub_get("http://localhost:3000/search/query?api_key=test_d7fd0429940&api_username=test_user").with(query: { term: "test"} ).to_return(body: fixture("search.json"), headers: { content_type: "application/json" })
|
|
9
9
|
end
|
|
10
10
|
|
|
11
11
|
it "requests the correct resource" do
|
|
12
12
|
subject.search("test")
|
|
13
|
-
expect(a_get("http://localhost:3000/search
|
|
13
|
+
expect(a_get("http://localhost:3000/search/query?api_key=test_d7fd0429940&api_username=test_user").with(query: { term: "test"} )).to have_been_made
|
|
14
14
|
end
|
|
15
15
|
|
|
16
16
|
it "returns the requested search" do
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: discourse_api
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.4.
|
|
4
|
+
version: 0.4.2
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Sam Saffron
|
|
@@ -10,20 +10,20 @@ authors:
|
|
|
10
10
|
autorequire:
|
|
11
11
|
bindir: bin
|
|
12
12
|
cert_chain: []
|
|
13
|
-
date: 2015-
|
|
13
|
+
date: 2015-05-09 00:00:00.000000000 Z
|
|
14
14
|
dependencies:
|
|
15
15
|
- !ruby/object:Gem::Dependency
|
|
16
16
|
name: faraday
|
|
17
17
|
requirement: !ruby/object:Gem::Requirement
|
|
18
18
|
requirements:
|
|
19
|
-
- -
|
|
19
|
+
- - "~>"
|
|
20
20
|
- !ruby/object:Gem::Version
|
|
21
21
|
version: 0.9.0
|
|
22
22
|
type: :runtime
|
|
23
23
|
prerelease: false
|
|
24
24
|
version_requirements: !ruby/object:Gem::Requirement
|
|
25
25
|
requirements:
|
|
26
|
-
- -
|
|
26
|
+
- - "~>"
|
|
27
27
|
- !ruby/object:Gem::Version
|
|
28
28
|
version: 0.9.0
|
|
29
29
|
- !ruby/object:Gem::Dependency
|
|
@@ -54,20 +54,6 @@ dependencies:
|
|
|
54
54
|
- - "~>"
|
|
55
55
|
- !ruby/object:Gem::Version
|
|
56
56
|
version: '1.5'
|
|
57
|
-
- !ruby/object:Gem::Dependency
|
|
58
|
-
name: dotenv
|
|
59
|
-
requirement: !ruby/object:Gem::Requirement
|
|
60
|
-
requirements:
|
|
61
|
-
- - "~>"
|
|
62
|
-
- !ruby/object:Gem::Version
|
|
63
|
-
version: '1.0'
|
|
64
|
-
type: :runtime
|
|
65
|
-
prerelease: false
|
|
66
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
67
|
-
requirements:
|
|
68
|
-
- - "~>"
|
|
69
|
-
- !ruby/object:Gem::Version
|
|
70
|
-
version: '1.0'
|
|
71
57
|
- !ruby/object:Gem::Dependency
|
|
72
58
|
name: bundler
|
|
73
59
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -180,6 +166,26 @@ dependencies:
|
|
|
180
166
|
- - "~>"
|
|
181
167
|
- !ruby/object:Gem::Version
|
|
182
168
|
version: '0.9'
|
|
169
|
+
- !ruby/object:Gem::Dependency
|
|
170
|
+
name: dotenv
|
|
171
|
+
requirement: !ruby/object:Gem::Requirement
|
|
172
|
+
requirements:
|
|
173
|
+
- - ">="
|
|
174
|
+
- !ruby/object:Gem::Version
|
|
175
|
+
version: '1.0'
|
|
176
|
+
- - "<"
|
|
177
|
+
- !ruby/object:Gem::Version
|
|
178
|
+
version: '3.0'
|
|
179
|
+
type: :development
|
|
180
|
+
prerelease: false
|
|
181
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
182
|
+
requirements:
|
|
183
|
+
- - ">="
|
|
184
|
+
- !ruby/object:Gem::Version
|
|
185
|
+
version: '1.0'
|
|
186
|
+
- - "<"
|
|
187
|
+
- !ruby/object:Gem::Version
|
|
188
|
+
version: '3.0'
|
|
183
189
|
description: Discourse API
|
|
184
190
|
email:
|
|
185
191
|
- sam.saffron@gmail.com
|
|
@@ -198,6 +204,7 @@ files:
|
|
|
198
204
|
- README.md
|
|
199
205
|
- Rakefile
|
|
200
206
|
- discourse_api.gemspec
|
|
207
|
+
- examples/backups.rb
|
|
201
208
|
- examples/category.rb
|
|
202
209
|
- examples/create_topic.rb
|
|
203
210
|
- examples/disposable_invite_tokens.rb
|
|
@@ -221,6 +228,7 @@ files:
|
|
|
221
228
|
- lib/discourse_api/api/private_messages.rb
|
|
222
229
|
- lib/discourse_api/api/search.rb
|
|
223
230
|
- lib/discourse_api/api/sso.rb
|
|
231
|
+
- lib/discourse_api/api/tags.rb
|
|
224
232
|
- lib/discourse_api/api/topics.rb
|
|
225
233
|
- lib/discourse_api/api/users.rb
|
|
226
234
|
- lib/discourse_api/client.rb
|
|
@@ -296,7 +304,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
296
304
|
version: '0'
|
|
297
305
|
requirements: []
|
|
298
306
|
rubyforge_project:
|
|
299
|
-
rubygems_version: 2.
|
|
307
|
+
rubygems_version: 2.4.6
|
|
300
308
|
signing_key:
|
|
301
309
|
specification_version: 4
|
|
302
310
|
summary: Allows access to the Discourse API
|