centry 0.0.3 → 0.0.4
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 +4 -4
- data/lib/centry.rb +179 -77
- metadata +3 -3
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 771b07f137fb1ca37be0c33cb2c7ea76a730e57cf0c8c6686343119b202d2066
|
|
4
|
+
data.tar.gz: '02428f4930c3beee56e063413d2169a302129da22479e25817706732f3f53eb1'
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: f1fd2efe967b3b80378f08fdd822c66140389c66adecc23f03a4fddf8a8b2f36f94e84a13377c154d0e8b0701b0b436e14eef2f194a66178d0b32e4bbd696b1e
|
|
7
|
+
data.tar.gz: 9e0c95f3a5f7866167a0664a1e2df350409bb67f7dcf08d0fcbbf1876e347113b41592c590a6b431798b4d96b1b433c2aa63ad78b8e1eff92bf6e19747d46bbd
|
data/lib/centry.rb
CHANGED
|
@@ -1,27 +1,44 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
require 'net/http'
|
|
2
4
|
require 'net/https'
|
|
3
5
|
require 'json'
|
|
4
6
|
|
|
7
|
+
# Centry es un sencillo SDK sin dependencias con el cual se pueden hacer todo
|
|
8
|
+
# tipo de request a la API de Centry.
|
|
9
|
+
#
|
|
10
|
+
# https://centrycl.github.io/centry-rest-api-docs/
|
|
11
|
+
# https://github.com/CentryCL/ruby-sdk
|
|
5
12
|
class Centry
|
|
6
|
-
PUBLIC_ENDPOINTS = [
|
|
7
|
-
"oauth/token"
|
|
8
|
-
]
|
|
9
13
|
|
|
10
14
|
attr_reader :client_id, :client_secret, :redirect_uri
|
|
11
15
|
attr_accessor :access_token, :refresh_token, :token_type, :scope, :created_at, :expires_in
|
|
12
16
|
|
|
13
|
-
##
|
|
14
17
|
# Constructor de la clase SDK.
|
|
15
|
-
#
|
|
16
|
-
# @
|
|
17
|
-
#
|
|
18
|
-
# @
|
|
19
|
-
#
|
|
20
|
-
#
|
|
21
|
-
#
|
|
22
|
-
#
|
|
23
|
-
#
|
|
24
|
-
|
|
18
|
+
#
|
|
19
|
+
# @param [String] client_id Identificador de la aplicación. Es generado por
|
|
20
|
+
# Centry.
|
|
21
|
+
# @param [String] client_secret Clave secreta de la aplicación. Es generado
|
|
22
|
+
# por Centry, debe ser conocido sólo por la aplicación y Centry. Los usuarios
|
|
23
|
+
# no tienen que tener acceso a este dato.
|
|
24
|
+
# @param [String] redirect_uri URL a la que Centry enviará el código de
|
|
25
|
+
# autorización como parámetro GET cada vez que un usuario autorice a ésta a
|
|
26
|
+
# acceder a sus datos. Si se usa la URI `urn:ietf:wg:oauth:2.0:oob`, entonces
|
|
27
|
+
# el código de autorización se mostrará en pantalla y el usuario deberá
|
|
28
|
+
# copiarlo y pegarlo donde la aplicación pueda leerlo.
|
|
29
|
+
# @param [String] access_token (opcional) Último access_token del que se tiene
|
|
30
|
+
# registro. Si se entrega, entonces no es necesario que el usuario tenga que
|
|
31
|
+
# volver a autorizar la aplicacción.
|
|
32
|
+
# @param [String] refresh_token (opcional) Último refresh_token del que se
|
|
33
|
+
# tiene registro.
|
|
34
|
+
# @return [Centry] una nueva instancia del SDK.
|
|
35
|
+
def initialize(
|
|
36
|
+
client_id,
|
|
37
|
+
client_secret,
|
|
38
|
+
redirect_uri,
|
|
39
|
+
access_token = nil,
|
|
40
|
+
refresh_token = nil
|
|
41
|
+
)
|
|
25
42
|
@client_id = client_id
|
|
26
43
|
@client_secret = client_secret
|
|
27
44
|
@redirect_uri = redirect_uri
|
|
@@ -30,91 +47,176 @@ class Centry
|
|
|
30
47
|
end
|
|
31
48
|
|
|
32
49
|
##
|
|
33
|
-
# Genera la URL con la que le pediremos a un usuario que nos entregue los
|
|
34
|
-
# de
|
|
35
|
-
#
|
|
36
|
-
#
|
|
37
|
-
#
|
|
38
|
-
#
|
|
39
|
-
#
|
|
40
|
-
#
|
|
41
|
-
#
|
|
42
|
-
#
|
|
43
|
-
#
|
|
44
|
-
#
|
|
45
|
-
#
|
|
46
|
-
#
|
|
47
|
-
#
|
|
48
|
-
#
|
|
49
|
-
#
|
|
50
|
+
# Genera la URL con la que le pediremos a un usuario que nos entregue los
|
|
51
|
+
# permisos de lectura y/o escritura a los recursos que se indican en el
|
|
52
|
+
# parámetro <code>scope</code>.
|
|
53
|
+
#
|
|
54
|
+
# @param [String] scope Es la concatenación con un espacio de separación (" ")
|
|
55
|
+
# de todos los ámbitos a los que se solicita permiso. Estos pueden ser:
|
|
56
|
+
# * *public* Para acceder a la información publica de Centry como marcas, categorías, colores, tallas, etc.
|
|
57
|
+
# * *read_orders* Para leer información de pedidos
|
|
58
|
+
# * *write_orders* Para manipular o eliminar pedidos
|
|
59
|
+
# * *read_products* Para leer información de productos y variantes
|
|
60
|
+
# * *write_products* Para manipular o eliminar productos y variantes
|
|
61
|
+
# * *read_integration_config* Para leer información de configuraciones de integraciones
|
|
62
|
+
# * *write_integration_config* Para manipular o eliminar configuraciones de integraciones
|
|
63
|
+
# * *read_user* Para leer información de usuarios de la empresa
|
|
64
|
+
# * *write_user* Para manilupar o eliminar usuarios de la empresa
|
|
65
|
+
# * *read_webhook* Para leer información de webhooks
|
|
66
|
+
# * *write_webhook* Para manilupar o eliminar webhooks
|
|
67
|
+
# @return [String] URL para redirigir a los usuarios y solicitarles la
|
|
68
|
+
# autorización de acceso.
|
|
50
69
|
def authorization_url(scope)
|
|
51
70
|
params = {
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
71
|
+
client_id: @client_id,
|
|
72
|
+
redirect_uri: @redirect_uri,
|
|
73
|
+
response_type: 'code',
|
|
74
|
+
scope: scope
|
|
56
75
|
}
|
|
57
|
-
|
|
76
|
+
"https://www.centry.cl/oauth/authorize?#{URI.encode_www_form(params)}"
|
|
58
77
|
end
|
|
59
78
|
|
|
60
79
|
##
|
|
61
|
-
# Método encargado de hacer todo tipo de solicitudes a Centry, desde
|
|
62
|
-
#
|
|
63
|
-
#
|
|
64
|
-
#
|
|
65
|
-
# @
|
|
66
|
-
#
|
|
80
|
+
# Método encargado de hacer todo tipo de solicitudes a Centry, desde
|
|
81
|
+
# autorizaciones hasta manipulación de inventario.
|
|
82
|
+
#
|
|
83
|
+
# @param [String] endpoint Ruta o recurso de la API.
|
|
84
|
+
# @param [symbol] method Indica el método HTTP a usar. Las opciones son:
|
|
85
|
+
# * +:get+
|
|
86
|
+
# * +:post+
|
|
87
|
+
# * +:put+
|
|
88
|
+
# * +:delete+
|
|
89
|
+
# Como es una API REST, estos métodos suelen estar asociados a la lectura,
|
|
90
|
+
# creación, edición y eliminacion de recursos.
|
|
91
|
+
# @param [Hash] params (opcional) Llaves y valores que irán en la URL como
|
|
92
|
+
# parámetros GET
|
|
93
|
+
# @param [Hash] payload (opcional) Body del request. El SDK se
|
|
94
|
+
# encargará de transformarlo en un JSON.
|
|
95
|
+
# @return [Net::HTTPResponse] resultado del request.
|
|
67
96
|
def request(endpoint, method, params = {}, payload = {})
|
|
68
|
-
query = params ? URI.encode_www_form(params) :
|
|
97
|
+
query = params ? URI.encode_www_form(params) : ''
|
|
69
98
|
uri = URI("https://www.centry.cl/#{endpoint}?#{query}")
|
|
70
99
|
header = {
|
|
71
|
-
|
|
72
|
-
|
|
100
|
+
'Content-Type': 'application/json',
|
|
101
|
+
'Accept': 'application/json'
|
|
73
102
|
}
|
|
74
103
|
req = case method
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
104
|
+
when :get then Net::HTTP::Get.new(uri, header)
|
|
105
|
+
when :post then Net::HTTP::Post.new(uri, header)
|
|
106
|
+
when :put then Net::HTTP::Put.new(uri, header)
|
|
107
|
+
when :delete then Net::HTTP::Delete.new(uri, header)
|
|
79
108
|
end
|
|
80
|
-
req.add_field(
|
|
109
|
+
req.add_field('Authorization', "Bearer #{@access_token}") unless PUBLIC_ENDPOINTS.include?(endpoint)
|
|
81
110
|
|
|
82
111
|
req.body = JSON.generate(payload) if payload && payload != {}
|
|
83
|
-
|
|
84
|
-
http.request(req)
|
|
85
|
-
end
|
|
112
|
+
Net::HTTP.start(uri.hostname, uri.port, use_ssl: true) { |http| return http.request(req) }
|
|
86
113
|
end
|
|
87
114
|
|
|
88
|
-
|
|
89
|
-
#
|
|
90
|
-
#
|
|
91
|
-
#
|
|
92
|
-
#
|
|
93
|
-
# @
|
|
115
|
+
# Atajo para generar requests GET
|
|
116
|
+
#
|
|
117
|
+
# @param [String] endpoint Ruta o recurso de la API.
|
|
118
|
+
# @param [Hash] params (opcional) Llaves y valores que irán en la URL como
|
|
119
|
+
# parámetros GET
|
|
120
|
+
# @return [Hash]
|
|
121
|
+
def get(endpoint, params = {})
|
|
122
|
+
request(endpoint, :get, params)
|
|
123
|
+
end
|
|
124
|
+
|
|
125
|
+
# Atajo para generar requests POST
|
|
126
|
+
#
|
|
127
|
+
# @param [String] endpoint Ruta o recurso de la API.
|
|
128
|
+
# @param [Hash] params (opcional) Llaves y valores que irán en la URL como
|
|
129
|
+
# parámetros GET
|
|
130
|
+
# @param [Hash] payload (opcional) Body del request. El SDK se
|
|
131
|
+
# encargará de transformarlo en un JSON.
|
|
132
|
+
def post(endpoint, params = {}, payload = {})
|
|
133
|
+
request(endpoint, :post, params, payload)
|
|
134
|
+
end
|
|
135
|
+
|
|
136
|
+
# Atajo para generar requests PUT
|
|
137
|
+
#
|
|
138
|
+
# @param [String] endpoint Ruta o recurso de la API.
|
|
139
|
+
# @param [Hash] params (opcional) Llaves y valores que irán en la URL como
|
|
140
|
+
# parámetros GET
|
|
141
|
+
# @param [Hash] payload (opcional) Body del request. El SDK se
|
|
142
|
+
# encargará de transformarlo en un JSON.
|
|
143
|
+
def put(endpoint, params = {}, payload = {})
|
|
144
|
+
request(endpoint, :put, params, payload)
|
|
145
|
+
end
|
|
146
|
+
|
|
147
|
+
# Atajo para generar requests DELETE
|
|
148
|
+
#
|
|
149
|
+
# @param [String] endpoint Ruta o recurso de la API.
|
|
150
|
+
# @param [Hash] params (opcional) Llaves y valores que irán en la URL como
|
|
151
|
+
# parámetros GET
|
|
152
|
+
def delete(endpoint, params = {})
|
|
153
|
+
request(endpoint, :delete, params, payload)
|
|
154
|
+
end
|
|
155
|
+
|
|
156
|
+
# Una vez que un usuario ha autorizado nuestra aplicación para que accceda a
|
|
157
|
+
# su información, Centry genera un código de autorización con el cual podremos
|
|
158
|
+
# solicitar el primer access_token y refresh_token. Éste método se encarga de
|
|
159
|
+
# esta tarea por lo que se le debe entrecar el código de autorización como
|
|
160
|
+
# parámetro.
|
|
161
|
+
#
|
|
162
|
+
# Se recomienda registrar estos tokens con algún mecanismo de persistencia
|
|
163
|
+
# como una base de datos.
|
|
164
|
+
#
|
|
165
|
+
# @param [String] code Código de autorización generado por Centry depués de
|
|
166
|
+
# que el usuario autorizó la aplicación.
|
|
167
|
+
#
|
|
94
168
|
# @see https://www.oauth.com/oauth2-servers/access-tokens/authorization-code-request/
|
|
95
169
|
def authorize(code)
|
|
96
|
-
grant(
|
|
170
|
+
grant('authorization_code', code: code)
|
|
97
171
|
end
|
|
98
172
|
|
|
99
|
-
|
|
100
|
-
#
|
|
101
|
-
#
|
|
102
|
-
# esta renovacion de tokens.
|
|
103
|
-
#
|
|
173
|
+
# Un access_token tiene una vigencia de 7200 segudos (2 horas) por lo que una
|
|
174
|
+
# vez cumplido ese plazo es necesario solicitar un nuevo token usando como
|
|
175
|
+
# llave el refresh_token que teníamos registrado. Este método se encarga de
|
|
176
|
+
# hacer esta renovacion de tokens.
|
|
177
|
+
#
|
|
178
|
+
# Se recomienda registrar estos nuevos tokens con algún mecanismo de
|
|
179
|
+
# persistencia como una base de datos.
|
|
180
|
+
#
|
|
104
181
|
# @see https://www.oauth.com/oauth2-servers/access-tokens/authorization-code-request/
|
|
105
182
|
def refresh
|
|
106
|
-
grant(
|
|
183
|
+
grant('refresh_token', refresh_token: @refresh_token)
|
|
107
184
|
end
|
|
108
185
|
|
|
186
|
+
|
|
187
|
+
# Este mecanismo de autorización es utilizado en aplicaciones que requieren
|
|
188
|
+
# acceso a sus propios recursos.
|
|
189
|
+
#
|
|
190
|
+
# @param [String] scope Es la concatenación con un espacio de separación (" ") de todos los ámbitos a
|
|
191
|
+
# los que se solicita permiso. Estos pueden ser:
|
|
192
|
+
# * *public* Para acceder a la información publica de Centry como marcas, categorías, colores, tallas, etc.
|
|
193
|
+
# * *read_orders* Para leer información de pedidos
|
|
194
|
+
# * *write_orders* Para manipular o eliminar pedidos
|
|
195
|
+
# * *read_products* Para leer información de productos y variantes
|
|
196
|
+
# * *write_products* Para manipular o eliminar productos y variantes
|
|
197
|
+
# * *read_integration_config* Para leer información de configuraciones de integraciones
|
|
198
|
+
# * *write_integration_config* Para manipular o eliminar configuraciones de integraciones
|
|
199
|
+
# * *read_user* Para leer información de usuarios de la empresa
|
|
200
|
+
# * *write_user* Para manilupar o eliminar usuarios de la empresa
|
|
201
|
+
# * *read_webhook* Para leer información de webhooks
|
|
202
|
+
# * *write_webhook* Para manilupar o eliminar webhooks
|
|
203
|
+
#
|
|
204
|
+
# @see https://www.oauth.com/oauth2-servers/access-tokens/client-credentials/
|
|
109
205
|
def client_credentials(scope = nil)
|
|
110
|
-
grant(
|
|
206
|
+
grant(
|
|
207
|
+
'client_credentials',
|
|
208
|
+
scope.nil? || scope.strip == '' ? {} : { scope: scope }
|
|
209
|
+
)
|
|
111
210
|
end
|
|
112
211
|
|
|
113
212
|
private
|
|
213
|
+
|
|
214
|
+
# Endpoints de la API de Centry que no requieren de un access_token.
|
|
215
|
+
PUBLIC_ENDPOINTS = [
|
|
216
|
+
'oauth/token'
|
|
217
|
+
].freeze
|
|
218
|
+
|
|
114
219
|
def grant(grant_type, extras)
|
|
115
|
-
endpoint = "oauth/token"
|
|
116
|
-
method = :post
|
|
117
|
-
params = nil
|
|
118
220
|
payload = {
|
|
119
221
|
client_id: @client_id,
|
|
120
222
|
client_secret: @client_secret,
|
|
@@ -122,14 +224,14 @@ class Centry
|
|
|
122
224
|
grant_type: grant_type
|
|
123
225
|
}.merge(extras)
|
|
124
226
|
|
|
125
|
-
response = JSON.parse
|
|
227
|
+
response = JSON.parse post('oauth/token', nil, payload).body
|
|
126
228
|
|
|
127
|
-
@access_token = response[
|
|
128
|
-
@refresh_token = response[
|
|
129
|
-
@
|
|
130
|
-
@scope = response[
|
|
131
|
-
@
|
|
132
|
-
@
|
|
229
|
+
@access_token = response['access_token']
|
|
230
|
+
@refresh_token = response['refresh_token']
|
|
231
|
+
@token_type = response['token_type']
|
|
232
|
+
@scope = response['scope']
|
|
233
|
+
@created_at = response['created_at']
|
|
234
|
+
@expires_in = response['expires_in']
|
|
133
235
|
end
|
|
134
236
|
|
|
135
237
|
end
|
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: centry
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.0.
|
|
4
|
+
version: 0.0.4
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Elías Lama L.
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2019-
|
|
11
|
+
date: 2019-06-14 00:00:00.000000000 Z
|
|
12
12
|
dependencies: []
|
|
13
13
|
description: Centry's Ruby SDK
|
|
14
14
|
email: elias.lama@centry.cl
|
|
@@ -37,7 +37,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
37
37
|
version: '0'
|
|
38
38
|
requirements: []
|
|
39
39
|
rubyforge_project:
|
|
40
|
-
rubygems_version: 2.7.
|
|
40
|
+
rubygems_version: 2.7.9
|
|
41
41
|
signing_key:
|
|
42
42
|
specification_version: 4
|
|
43
43
|
summary: Centry SDK
|