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.
Files changed (3) hide show
  1. checksums.yaml +7 -0
  2. data/lib/centry.rb +137 -0
  3. 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: []