Skip to content

Commit

Permalink
Merge cd41fe0 into c3b22c8
Browse files Browse the repository at this point in the history
  • Loading branch information
morgant committed May 24, 2019
2 parents c3b22c8 + cd41fe0 commit 994a9a0
Show file tree
Hide file tree
Showing 5 changed files with 252 additions and 5 deletions.
3 changes: 3 additions & 0 deletions README.md
Expand Up @@ -26,6 +26,9 @@ gem install mapbox-sdk
* Profiles for driving, driving-traffic, walking, and cycling
* [Optimization](https://docs.mapbox.com/api/navigation/#optimization): [[docs](https://github.com/mapbox/mapbox-sdk-rb/blob/master/docs/optimization.md)]
* Profiles for driving, driving-traffic, walking, and cycling
* [Tokens](https://docs.mapbox.com/api/accounts/#tokens) [[docs](https://github.com/mapbox/mapbox-sdk-rb/blob/master/docs/tokens.md)]
* Get, create, update, and delete
* Get scopes

## Testing

Expand Down
45 changes: 45 additions & 0 deletions docs/tokens.md
@@ -0,0 +1,45 @@
# Tokens

```rb
require "mapbox-sdk"
Mapbox.access_token = "YOUR_ACCESS_TOKEN"

# Get token
token = Mapbox::Tokens.get_token

# List token's scopes
scopes = Mapbox::Tokens.list_scopes("YOUR_USERNAME")

# List all tokens (your token must have the 'tokens:read' scope)
tokens = Mapbox::Tokens.list_tokens("YOUR_USERNAME")

# List only default public token
default_token = Mapbox::Tokens.list_tokens("YOUR_USERNAME", {:default => true})

# List tokens except default public token
tokens = Mapbox::Tokens.list_tokens("YOUR_USERNAME", {:default => false})

# List public tokens
public_tokens = Mapbox::Tokens.list_tokens("YOUR_USERNAME", {:usage => 'pk'})

# List secret tokens
secret_tokens = Mapbox::Tokens.list_tokens("YOUR_USERNAME", {:usage => 'sk'})

# Create a public token (your existing token must have the 'tokens:read' & 'tokens:write' scopes in addition to any scopes you intend to set on your new token)
public_token = Mapbox::Tokens.create_token("YOUR_USERNAME", "auto-generated public token", ["styles:tiles", "styles:read", "fonts:read", "datasets:read", "vision:read"])

# Create a public token with use restricted to a particular domain name
public_token = Mapbox::Tokens.create_token("YOUR_USERNAME", "auto-generated public token", ["styles:tiles", "styles:read", "fonts:read", "datasets:read", "vision:read"], ["example.com"])

# Create a secret token (your existing token must have the 'tokens:read' & 'tokens:write' scopes in addition to any scopes you intend to set on your new token)
public_token = Mapbox::Tokens.create_token("YOUR_USERNAME", "auto-generated secret token", ["scopes:list", "tokens:read", "tokens:write"])

# Delete a token
Mapbox::Tokens.delete_token("YOUR_USERNAME", "TOKEN_ID")

# Update a public token's name/note & scopes (no "vision:read" scope)
updated_token = Mapbox::Tokens.update_token("YOUR_USERNAME", "TOKEN_ID", "updated token", ["styles:tiles", "styles:read", "fonts:read", "datasets:read"])

# Update a public token's name/note, scopes, and allowed URLs
updated_token = Mapbox::Tokens.update_token("YOUR_USERNAME", "TOKEN_ID", "updated token", ["styles:tiles", "styles:read", "fonts:read", "datasets:read"], ["example.com"])
```
19 changes: 14 additions & 5 deletions lib/mapbox.rb
Expand Up @@ -17,6 +17,7 @@ class << self
def self.request(method, url, api_key, params={}, headers={}, api_base_url=nil)
api_base_url = api_base_url || @api_base
params = params || {}
headers = headers || {}

unless access_token ||= @access_token
raise AuthenticationError.new('No API key provided. ' \
Expand All @@ -28,13 +29,19 @@ def self.request(method, url, api_key, params={}, headers={}, api_base_url=nil)

url = api_base_url + url

params['access_token'] = access_token

case method.to_s.downcase.to_sym
when :get, :head, :delete
params['access_token'] = access_token

# Make params into GET parameters
url += "#{URI.parse(url).query ? '&' : '?'}#{uri_encode(params)}" if params && params.any?
payload = nil
else
url += "#{URI.parse(url).query ? '&' : '?'}#{uri_encode({'access_token' => access_token})}"
payload = params.to_json
headers.update(
:content_type => :json,
:accept => :json)
end

@request_opts = {:verify_ssl => OpenSSL::SSL::VERIFY_PEER,
Expand All @@ -45,7 +52,8 @@ def self.request(method, url, api_key, params={}, headers={}, api_base_url=nil)
:open_timeout => 30,
:payload => payload,
:url => url,
:timeout => 80)
:timeout => 80,
:headers => headers)

begin
response = execute_request(@request_opts)
Expand Down Expand Up @@ -91,7 +99,7 @@ def self.parse(response)
# some library out there that makes symbolize_names not work.
response = JSON.parse(response.body)
rescue JSON::ParserError
raise general_api_error(response.code, response.body)
raise general_api_error(response.code, response.body) unless response.body.empty? && (response.code >= 200) && (response.code < 300)
end

response
Expand Down Expand Up @@ -184,4 +192,5 @@ def xy_from_hash h = {}
require 'mapbox/isochrone'
require 'mapbox/matrix'
require 'mapbox/map_matching'
require 'mapbox/optimization'
require 'mapbox/optimization'
require 'mapbox/tokens'
72 changes: 72 additions & 0 deletions lib/mapbox/tokens.rb
@@ -0,0 +1,72 @@
require 'rest-client'
require 'json'
require 'uri'

module Mapbox
class Tokens
include Mapbox::APIOperations::Request
extend Mapbox::HashUtils

def self.assemble_params(options={})
params = ''
if options.length > 0
params += "#{params.length > 0 ? '&' : '?'}#{URI.encode_www_form(options)}"
end

return params
end

def self.list_tokens(username, options={})
params = self.assemble_params(options)

return request(
:get,
"/tokens/v2/#{URI.escape(username)}#{params}",
nil)
end

def self.get_token()
return request(
:get,
"/tokens/v2/",
nil)
end

def self.create_token(username, note, scopes, allowedUrls=[])
scopes = scopes || []

params = {'note' => note, 'scopes' => scopes}
params.update('allowedUrls' => allowedUrls) if allowedUrls && allowedUrls.any?

return request(
:post,
"/tokens/v2/#{URI.escape(username)}",
params)
end

def self.delete_token(username, token_id)
return request(
:delete,
"/tokens/v2/#{URI.escape(username)}/#{URI.escape(token_id)}")
end

def self.update_token(username, token_id, note, scopes, allowedUrls=[])
scopes = scopes || []

params = {'note' => note, 'scopes' => scopes}
params.update('allowedUrls' => allowedUrls) if allowedUrls && allowedUrls.any?

return request(
:patch,
"/tokens/v2/#{URI.escape(username)}/#{URI.escape(token_id)}",
params)
end

def self.list_scopes(username)
return request(
:get,
"/scopes/v1/#{URI.escape(username)}",
nil)
end
end
end
118 changes: 118 additions & 0 deletions test/tokens_test.rb
@@ -0,0 +1,118 @@
require 'mapbox'
require 'test/unit'
require 'mocha/setup'
require 'shoulda'

module Mapbox
class TokensTest < Test::Unit::TestCase
should "#tokens_list" do
Mapbox.access_token = ENV["MapboxAccessToken"]
result = Mapbox::Tokens.list_tokens(ENV["MapboxUsername"])
assert result
end

should "#tokens_list (include true default param)" do
Mapbox.access_token = ENV["MapboxAccessToken"]
result = Mapbox::Tokens.list_tokens(ENV["MapboxUsername"], {:default => true})
assert result
assert Mapbox.request_opts[:url].include? '?default=true'
end

should "#tokens_list (include false default param)" do
Mapbox.access_token = ENV["MapboxAccessToken"]
result = Mapbox::Tokens.list_tokens(ENV["MapboxUsername"], {:default => false})
assert result
assert Mapbox.request_opts[:url].include? '?default=false'
end

should "#tokens_list (include public key usage param)" do
Mapbox.access_token = ENV["MapboxAccessToken"]
result = Mapbox::Tokens.list_tokens(ENV["MapboxUsername"], {:usage => "pk"})
assert result
assert Mapbox.request_opts[:url].include? '?usage=pk'
end

should "#tokens_list (include private key usage param)" do
Mapbox.access_token = ENV["MapboxAccessToken"]
result = Mapbox::Tokens.list_tokens(ENV["MapboxUsername"], {:usage => "sk"})
assert result
assert Mapbox.request_opts[:url].include? '?usage=sk'
end

should "#token_get" do
Mapbox.access_token = ENV["MapboxAccessToken"]
result = Mapbox::Tokens.get_token
assert result
end

should "#token_create" do
Mapbox.access_token = ENV["MapboxAccessToken"]
result = Mapbox::Tokens.create_token(ENV["MapboxUsername"], "mapbox-sdk-rb test", [])
assert result
Mapbox::Tokens.delete_token(ENV["MapboxUsername"], result.first["id"]) if result
end

should "#token_create (include note param)" do
Mapbox.access_token = ENV["MapboxAccessToken"]
result = Mapbox::Tokens.create_token(ENV["MapboxUsername"], "mapbox-sdk-rb test", [])
assert result
assert Mapbox.request_opts[:payload].include? '"note":"mapbox-sdk-rb test"'
Mapbox::Tokens.delete_token(ENV["MapboxUsername"], result.first["id"]) if result
end

should "#token_create (include scopes param)" do
Mapbox.access_token = ENV["MapboxAccessToken"]
result = Mapbox::Tokens.create_token(ENV["MapboxUsername"], "mapbox-sdk-rb test", ["tokens:read"])
assert result
assert Mapbox.request_opts[:payload].include? '"scopes":["tokens:read"'
Mapbox::Tokens.delete_token(ENV["MapboxUsername"], result.first["id"]) if result
end

should "#token_create (include allowed URLs param)" do
Mapbox.access_token = ENV["MapboxAccessToken"]
result = Mapbox::Tokens.create_token(ENV["MapboxUsername"], "mapbox-sdk-rb test", [], ["example.com"])
assert result
assert Mapbox.request_opts[:payload].include? '"allowedUrls":["example.com"'
Mapbox::Tokens.delete_token(ENV["MapboxUsername"], result.first["id"]) if result
end

should "#token_delete" do
Mapbox.access_token = ENV["MapboxAccessToken"]
new_token = Mapbox::Tokens.create_token(ENV["MapboxUsername"], "mapbox-sdk-rb test", [])
result = Mapbox::Tokens.delete_token(ENV["MapboxUsername"], new_token.first["id"])
assert result
end

should "#token_update" do
Mapbox.access_token = ENV["MapboxAccessToken"]
new_token = Mapbox::Tokens.create_token(ENV["MapboxUsername"], "mapbox-sdk-rb test", [])
result = Mapbox::Tokens.update_token(ENV["MapboxUsername"], new_token.first["id"],"mapbox-sdk-rb test (updated)",[])
assert result
Mapbox::Tokens.delete_token(ENV["MapboxUsername"], result.first["id"]) if result
end

should "#token_update (include scopes param)" do
Mapbox.access_token = ENV["MapboxAccessToken"]
new_token = Mapbox::Tokens.create_token(ENV["MapboxUsername"], "mapbox-sdk-rb test", ["tokens:read"])
result = Mapbox::Tokens.update_token(ENV["MapboxUsername"], new_token.first["id"],"mapbox-sdk-rb test (updated)",["tokens:write"])
assert result
assert Mapbox.request_opts[:payload].include? '"scopes":["tokens:write"'
Mapbox::Tokens.delete_token(ENV["MapboxUsername"], result.first["id"]) if result
end

should "#token_update (include allowed URLs param)" do
Mapbox.access_token = ENV["MapboxAccessToken"]
new_token = Mapbox::Tokens.create_token(ENV["MapboxUsername"], "mapbox-sdk-rb test", [])
result = Mapbox::Tokens.update_token(ENV["MapboxUsername"], new_token.first["id"],"mapbox-sdk-rb test (updated)",[], ["example.com"])
assert result
assert Mapbox.request_opts[:payload].include? '"allowedUrls":["example.com"'
Mapbox::Tokens.delete_token(ENV["MapboxUsername"], result.first["id"]) if result
end

should "#scopes_list" do
Mapbox.access_token = ENV["MapboxAccessToken"]
result = Mapbox::Tokens.list_scopes(ENV["MapboxUsername"])
assert result
end
end
end

0 comments on commit 994a9a0

Please sign in to comment.