centry 0.0.0
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 +7 -0
- data/lib/centry.rb +137 -0
- metadata +44 -0
checksums.yaml
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
---
|
|
2
|
+
SHA256:
|
|
3
|
+
metadata.gz: b0267301f8a6479fa90f79607e460963ff1e2fe856283fa11a874809012cc994
|
|
4
|
+
data.tar.gz: 54bb44a16bb99ce158f4470b7c1bc7f89daebe487158ece1026f03b85f0c7233
|
|
5
|
+
SHA512:
|
|
6
|
+
metadata.gz: 9882bbe48e5ea6ebe7b658af039c3af54afedc379d83113d6537d2bc1d04ae4f6a27914b566a78652baa559cc0f6ebf739f0c67ce5da3c30dc7b34b3785b52fc
|
|
7
|
+
data.tar.gz: e2258d392de69dc201becb6db91b26cf59e2fd37199f6f61b0df9807e22c9dc143ba2fa3276af58d2f7f1ff1a0f24137595916621c206ecbc9cdb92500ce15c2
|
data/lib/centry.rb
ADDED
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
require 'net/http'
|
|
2
|
+
require 'net/https'
|
|
3
|
+
require 'json'
|
|
4
|
+
|
|
5
|
+
class Centry
|
|
6
|
+
PUBLIC_ENDPOINTS = [
|
|
7
|
+
"oauth/token"
|
|
8
|
+
]
|
|
9
|
+
|
|
10
|
+
attr_reader :client_id, :client_secret, :redirect_uri
|
|
11
|
+
attr_accessor :access_token, :refresh_token, :token_type, :scope, :created_at, :expires_in
|
|
12
|
+
|
|
13
|
+
##
|
|
14
|
+
# Constructor de la clase SDK.
|
|
15
|
+
# @var client_id Identificador de la aplicación. Es generado por Centry.
|
|
16
|
+
# @var client_secret Clave secreta de la aplicación. Es generado por Centry, debe ser conocido sólo por la aplicación y
|
|
17
|
+
# Centry. Los usuarios no tienen que tener acceso a este dato.
|
|
18
|
+
# @var redirect_uri URL a la que Centry enviará el código de autorización como parámetro GET cada vez que un usuario
|
|
19
|
+
# autorice a ésta a acceder a sus datos. Si se usa la URI `urn:ietf:wg:oauth:2.0:oob`, entonces el
|
|
20
|
+
# código de autorización se mostrará en pantalla y el usuario deberá copiarlo y pegarlo donde la
|
|
21
|
+
# aplicación pueda leerlo.
|
|
22
|
+
# @var access_token (opcional) Último access_token del que se tiene registro. Si se entrega, entonces no es necesario que el usuario tenga que volver a autorizar la aplicacción.
|
|
23
|
+
# @var refresh_token (opcional) Último refresh_token del que se tiene registro.
|
|
24
|
+
def initialize(client_id, client_secret, redirect_uri, access_token = nil, refresh_token = nil)
|
|
25
|
+
@client_id = client_id
|
|
26
|
+
@client_secret = client_secret
|
|
27
|
+
@redirect_uri = redirect_uri
|
|
28
|
+
@access_token = access_token
|
|
29
|
+
@refresh_token = refresh_token
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
##
|
|
33
|
+
# Genera la URL con la que le pediremos a un usuario que nos entregue los permisos
|
|
34
|
+
# de lecturo y/o escritura a los recursos que se indican en el parámetro <code>scope</code>
|
|
35
|
+
# @var code Es la concatenación con un espacio de separación (" ") de todos los ámbitos a
|
|
36
|
+
# los que se solicita permiso. Estos pueden ser:
|
|
37
|
+
# <ul>
|
|
38
|
+
# <li><b>public</b> Para acceder a la información publica de Centry como marcas, categorías, colores, tallas, etc.</li>
|
|
39
|
+
# <li><b>read_orders</b> Para leer información de pedidos</li>
|
|
40
|
+
# <li><b>write_orders</b> Para manulupar o eliminar pedidos</li>
|
|
41
|
+
# <li><b>read_products</b>Para leer información de productos y variantes</li>
|
|
42
|
+
# <li><b>write_products</b>Para manulupar o eliminar productos y variantes</li>
|
|
43
|
+
# <li><b>read_integration_config</b>Para leer información de configuraciones de integraciones</li>
|
|
44
|
+
# <li><b>write_integration_config</b>Para manulupar o eliminar configuraciones de integraciones</li>
|
|
45
|
+
# <li><b>read_user</b>Para leer información de usuarios de la empresa</li>
|
|
46
|
+
# <li><b>write_user</b>Para manulupar o eliminar usuarios de la empresa</li>
|
|
47
|
+
# <li><b>read_webhook</b>Para leer información de webhooks</li>
|
|
48
|
+
# <li><b>write_webhook</b>Para manulupar o eliminar webhooks</li>
|
|
49
|
+
# </ul>
|
|
50
|
+
def authorization_url(scope)
|
|
51
|
+
params = {
|
|
52
|
+
"client_id" => @client_id,
|
|
53
|
+
"redirect_uri" => @redirect_uri,
|
|
54
|
+
"response_type" => "code",
|
|
55
|
+
"scope" => scope
|
|
56
|
+
}
|
|
57
|
+
return "https://www.centry.cl/oauth/authorize?#{URI.encode_www_form(params)}"
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
##
|
|
61
|
+
# Método encargado de hacer todo tipo de solicitudes a Centry, desde autorizaciones hasta manipulación de inventario.
|
|
62
|
+
# @var endpoint
|
|
63
|
+
# @var method String indicado el método HTTP a usar. Las opciones son "GET", "POST", "PUT", "DELETE". Como es una API REST,
|
|
64
|
+
# estos métodos suelen estar asociados a la lectura, creación, edición y eliminacion de recursos.
|
|
65
|
+
# @var params (opcional) Parámetros
|
|
66
|
+
# @var payload (opcional) Body del request puede ser un objeto PHP o un arreglo (diccionario), internamente es transformado a JSON.
|
|
67
|
+
def request(endpoint, method, params = {}, payload = {})
|
|
68
|
+
query = params ? URI.encode_www_form(params) : ""
|
|
69
|
+
uri = URI("http://localhost:3000/#{endpoint}?#{query}")
|
|
70
|
+
# uri = URI("https://www.centry.cl/#{endpoint}?#{query}")
|
|
71
|
+
header = {
|
|
72
|
+
"Content-Type" => "application/json",
|
|
73
|
+
"Accept" => "application/json"
|
|
74
|
+
}
|
|
75
|
+
# header["Authorization"] = "Bearer #{@access_token}" #if !PUBLIC_ENDPOINTS.include?(endpoint)
|
|
76
|
+
req = case method
|
|
77
|
+
when :get then Net::HTTP::Get.new(uri, header)
|
|
78
|
+
when :post then Net::HTTP::Post.new(uri, header)
|
|
79
|
+
when :put then Net::HTTP::Put.new(uri, header)
|
|
80
|
+
when :delete then Net::HTTP::Delete.new(uri, header)
|
|
81
|
+
end
|
|
82
|
+
req.add_field("Authorization", "Bearer #{@access_token}") #if !PUBLIC_ENDPOINTS.include?(endpoint)
|
|
83
|
+
|
|
84
|
+
req.body = JSON.generate(payload) if payload && payload != {}
|
|
85
|
+
return Net::HTTP.start(uri.hostname, uri.port, use_ssl: false) do |http|
|
|
86
|
+
http.request(req)
|
|
87
|
+
end
|
|
88
|
+
end
|
|
89
|
+
|
|
90
|
+
##
|
|
91
|
+
# Una vez que un usuario ha autorizado nuestra aplicación para que accceda a su información, Centry genera un código
|
|
92
|
+
# de autorización con el cual podremos solicitar el primer access_token y refresh_token. Éste método se encarga de
|
|
93
|
+
# esta tarea por lo que se le debe entrecar el código de autorización como parámetro.
|
|
94
|
+
# Se recomienda registrar estos tokens con algún mecanismo de persistencia como una base de datos.
|
|
95
|
+
# @var code Código de autorización generado por Centry depués de que el usuario autorizó la aplicación.
|
|
96
|
+
# @see https://www.oauth.com/oauth2-servers/access-tokens/authorization-code-request/
|
|
97
|
+
def authorize(code)
|
|
98
|
+
grant("authorization_code", {code: code})
|
|
99
|
+
end
|
|
100
|
+
|
|
101
|
+
##
|
|
102
|
+
# Un access_token tiene una vigencia de 7200 segudos (2 horas) por lo que una vez cumplido ese plazo es necesario
|
|
103
|
+
# solicitar un nuevo token usando como llave el refresh_token que teníamos registrado. Este método se encarga de hacer
|
|
104
|
+
# esta renovacion de tokens.
|
|
105
|
+
# Se recomienda registrar estos nuevos tokens con algún mecanismo de persistencia como una base de datos.
|
|
106
|
+
# @see https://www.oauth.com/oauth2-servers/access-tokens/authorization-code-request/
|
|
107
|
+
def refresh
|
|
108
|
+
grant("refresh_token", {refresh_token: @refresh_token})
|
|
109
|
+
end
|
|
110
|
+
|
|
111
|
+
def client_credentials
|
|
112
|
+
grant("client_credentials")
|
|
113
|
+
end
|
|
114
|
+
|
|
115
|
+
private
|
|
116
|
+
def grant(grant_type, extras = {})
|
|
117
|
+
endpoint = "oauth/token"
|
|
118
|
+
method = :post
|
|
119
|
+
params = nil
|
|
120
|
+
payload = {
|
|
121
|
+
client_id: @client_id,
|
|
122
|
+
client_secret: @client_secret,
|
|
123
|
+
redirect_uri: @redirect_uri,
|
|
124
|
+
grant_type: grant_type
|
|
125
|
+
}.merge(extras)
|
|
126
|
+
|
|
127
|
+
response = JSON.parse request(endpoint, method, params, payload).body
|
|
128
|
+
|
|
129
|
+
@access_token = response["access_token"]
|
|
130
|
+
@refresh_token = response["refresh_token"]
|
|
131
|
+
@tokenType = response["token_type"]
|
|
132
|
+
@scope = response["scope"]
|
|
133
|
+
@createdAt = response["created_at"]
|
|
134
|
+
@expiresIn = response["expires_in"]
|
|
135
|
+
end
|
|
136
|
+
|
|
137
|
+
end
|
metadata
ADDED
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
|
2
|
+
name: centry
|
|
3
|
+
version: !ruby/object:Gem::Version
|
|
4
|
+
version: 0.0.0
|
|
5
|
+
platform: ruby
|
|
6
|
+
authors:
|
|
7
|
+
- Elías Lama L.
|
|
8
|
+
autorequire:
|
|
9
|
+
bindir: bin
|
|
10
|
+
cert_chain: []
|
|
11
|
+
date: 2019-01-25 00:00:00.000000000 Z
|
|
12
|
+
dependencies: []
|
|
13
|
+
description: Centry's Ruby SDK
|
|
14
|
+
email: elias.lama@centry.cl
|
|
15
|
+
executables: []
|
|
16
|
+
extensions: []
|
|
17
|
+
extra_rdoc_files: []
|
|
18
|
+
files:
|
|
19
|
+
- lib/centry.rb
|
|
20
|
+
homepage: http://rubygems.org/gems/centry
|
|
21
|
+
licenses:
|
|
22
|
+
- MIT
|
|
23
|
+
metadata: {}
|
|
24
|
+
post_install_message:
|
|
25
|
+
rdoc_options: []
|
|
26
|
+
require_paths:
|
|
27
|
+
- lib
|
|
28
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
|
29
|
+
requirements:
|
|
30
|
+
- - ">="
|
|
31
|
+
- !ruby/object:Gem::Version
|
|
32
|
+
version: '0'
|
|
33
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
34
|
+
requirements:
|
|
35
|
+
- - ">="
|
|
36
|
+
- !ruby/object:Gem::Version
|
|
37
|
+
version: '0'
|
|
38
|
+
requirements: []
|
|
39
|
+
rubyforge_project:
|
|
40
|
+
rubygems_version: 2.7.8
|
|
41
|
+
signing_key:
|
|
42
|
+
specification_version: 4
|
|
43
|
+
summary: Centry SDK!
|
|
44
|
+
test_files: []
|