discourse_api 0.4.1 → 0.4.2

Sign up to get free protection for your applications and to get access to all the features.
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