Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
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
Original file line number Diff line number Diff line change
@@ -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
Original file line number Diff line number Diff line change
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
Original file line number Diff line number Diff line change
@@ -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
Original file line number Diff line number Diff line change
@@ -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