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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 8330a94a826de63e8b485e79b0ee6e43dfc0cbe2
4
- data.tar.gz: d8145df00cfb45f265fe8fc2e3af9e1d0e35e230
3
+ metadata.gz: 55956e7fcbb398abf377f1f648453fb5cecda82a
4
+ data.tar.gz: cbaf89c085414d8a6db32a4c9ac782cfaa4dde7b
5
5
  SHA512:
6
- metadata.gz: f9ea65210238643e2233e73f28ea1945a877472c4581794c93cf208a99232b135669fa476a400f69ac43c39b6fdf47a0dd33189c67009da65a8137b23bfbdca6
7
- data.tar.gz: f0753dc07dc1c480e2ee6e78a8565b96cf5605ea40bee94a5c3eed2022fb10b6c848cf9ff58f1eafb306e2a319ca0b181f9b3517f3e0a5424285de90985432bf
6
+ metadata.gz: df81f31669c828560956873d6d2059f2914fcd8a88319538c3e47aa9d5ce9c049f6adfc1ce1cdfe66cafe70a2657bede0c64ddad7254311cf614645d47c47d4f
7
+ data.tar.gz: 7b300c7418237936b66c1c504e176025506bc8c01de018ab76f5fe79165d7da3e1f318a37f107ce929b51880e3cec7301939491aeddce36c5ea5b3d2a5627468
@@ -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
@@ -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
- invite_tokens_array.each do |value|
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.json', options.merge(term: term))
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
@@ -0,0 +1,10 @@
1
+ module DiscourseApi
2
+ module API
3
+ module Tags
4
+ def show_tag(tag)
5
+ response = get("/tags/#{tag}")
6
+ response[:body]
7
+ end
8
+ end
9
+ end
10
+ end
@@ -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
- raise RuntimeError, "Bad signature for payload"
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
@@ -1,3 +1,3 @@
1
1
  module DiscourseApi
2
- VERSION = "0.4.1"
2
+ VERSION = "0.4.2"
3
3
  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.json?api_key=test_d7fd0429940&api_username=test_user").with(query: { term: "test"} ).to_return(body: fixture("search.json"), headers: { content_type: "application/json" })
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.json?api_key=test_d7fd0429940&api_username=test_user").with(query: { term: "test"} )).to have_been_made
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.1
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-04-14 00:00:00.000000000 Z
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.2.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