amocrm-rails 0.0.4 → 0.0.8
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.markdown +2040 -38
- data/lib/amocrm-rails.rb +30 -8
- data/lib/amocrm-rails/api_request.rb +10 -10
- data/lib/concern.rb +30 -0
- data/lib/generators/amocrm_rails/install/install_generator.rb +23 -2
- data/lib/generators/amocrm_rails/install/templates/amocrm.rb +1 -1
- data/lib/generators/amocrm_rails/install/templates/amocrm.yml +2 -5
- data/lib/generators/amocrm_rails/install/templates/amocrm_token.yml +1 -1
- data/lib/generators/amocrm_rails/install/templates/devise/app/controllers/amocrm_controller.rb +37 -0
- data/lib/generators/amocrm_rails/install/templates/devise/app/views/amocrm/code.html.erb +11 -0
- data/lib/generators/amocrm_rails/install/templates/devise/app/views/amocrm/link.html.erb +6 -0
- data/lib/generators/amocrm_rails/install/templates/devise/config/amocrm.rb +16 -0
- data/lib/generators/amocrm_rails/install/templates/devise/config/initializers/amocrm.rb +8 -0
- data/lib/helper.rb +5 -0
- metadata +8 -1
data/lib/amocrm-rails.rb
CHANGED
@@ -2,32 +2,54 @@ require 'amocrm-rails/amocrm_error'
|
|
2
2
|
require 'amocrm-rails/request'
|
3
3
|
require 'amocrm-rails/api_request'
|
4
4
|
require 'amocrm-rails/response'
|
5
|
+
require 'concern'
|
6
|
+
require 'helper'
|
5
7
|
|
6
8
|
module AmocrmRails
|
7
9
|
class << self
|
8
|
-
def generate_access_token(
|
10
|
+
def generate_access_token(**options)
|
11
|
+
user_id = AmocrmRails.try(:user_id)
|
12
|
+
client_id = options[:client_id] || AmocrmRails.client_id
|
13
|
+
client_secret = options[:client_secret] || AmocrmRails.client_secret
|
14
|
+
refresh_token = options[:refresh_token] || AmocrmRails.try(:refresh_token)
|
15
|
+
count = options[:count].to_i
|
9
16
|
params = {
|
10
17
|
client_id: client_id,
|
11
18
|
client_secret: client_secret,
|
12
|
-
grant_type: 'authorization_code',
|
13
|
-
redirect_uri: AmocrmRails.redirect_uri
|
14
19
|
}
|
15
20
|
if refresh_token.present?
|
21
|
+
params[:grant_type] = 'refresh_token'
|
16
22
|
params[:refresh_token] = refresh_token
|
17
23
|
else
|
24
|
+
params[:grant_type] = 'authorization_code'
|
18
25
|
params[:code] = AmocrmRails.code
|
19
26
|
end
|
27
|
+
params[:redirect_uri] = AmocrmRails.redirect_uri
|
20
28
|
response = Faraday.post(AmocrmRails.url_token, params.to_json, "Content-Type" => "application/json")
|
21
|
-
if
|
29
|
+
if AmocrmRails::Request.debug
|
30
|
+
logger = AmocrmRails::Request.logger || ::Logger.new(STDOUT)
|
31
|
+
logger.info "---generate_access_token---"
|
32
|
+
logger.info "params: #{params}"
|
33
|
+
logger.info "Responding with #{response.status.inspect} => #{response.body.inspect}"
|
34
|
+
end
|
35
|
+
if response.status >= 200 && response.status <= 204
|
22
36
|
response_token = JSON.parse(response.body)
|
23
37
|
data = YAML.load_file("config/amocrm_token.yml")
|
24
38
|
response_token.each do |k, v|
|
25
|
-
|
26
|
-
|
39
|
+
if user_id.present?
|
40
|
+
data[user_id] = {} if data[user_id].nil?
|
41
|
+
data[user_id][k] = v
|
42
|
+
else
|
43
|
+
data[k] = v
|
44
|
+
end
|
45
|
+
AmocrmRails::register(k.underscore.to_sym, v)
|
27
46
|
end
|
28
47
|
File.open("config/amocrm_token.yml", 'w') { |f| YAML.dump(data, f) }
|
29
|
-
elsif count < 3
|
30
|
-
AmocrmRails.generate_access_token(client_id
|
48
|
+
elsif count < 3 && AmocrmRails.refresh_token.present?
|
49
|
+
AmocrmRails.generate_access_token(client_id: client_id,
|
50
|
+
client_secret: client_secret,
|
51
|
+
refresh_token:AmocrmRails.refresh_token,
|
52
|
+
count: count+1)
|
31
53
|
end
|
32
54
|
end
|
33
55
|
|
@@ -14,10 +14,10 @@ module AmocrmRails
|
|
14
14
|
end
|
15
15
|
parse_response(response)
|
16
16
|
rescue => e
|
17
|
-
if e.response.
|
17
|
+
if [401, 402].include?(e.response.dig(:status)) && first_time
|
18
18
|
AmocrmRails.generate_access_token
|
19
19
|
self.post(params: params, headers: headers, body: body, first_time: false)
|
20
|
-
elsif e.response.
|
20
|
+
elsif e.response.dig(:status) == 429
|
21
21
|
sleep(1.second)
|
22
22
|
self.post(params: params, headers: headers, body: body, first_time: false)
|
23
23
|
else
|
@@ -35,10 +35,10 @@ module AmocrmRails
|
|
35
35
|
end
|
36
36
|
parse_response(response)
|
37
37
|
rescue => e
|
38
|
-
if e.response.
|
38
|
+
if [401, 402].include?(e.response.dig(:status)) && first_time
|
39
39
|
AmocrmRails.generate_access_token
|
40
40
|
self.patch(params: params, headers: headers, body: body, first_time: false)
|
41
|
-
elsif e.response.try(:
|
41
|
+
elsif e.response.try(:status) == 429
|
42
42
|
sleep(1.second)
|
43
43
|
self.patch(params: params, headers: headers, body: body, first_time: false)
|
44
44
|
else
|
@@ -56,10 +56,10 @@ module AmocrmRails
|
|
56
56
|
end
|
57
57
|
parse_response(response)
|
58
58
|
rescue => e
|
59
|
-
if e.response.
|
59
|
+
if [401, 402].include?(e.response.dig(:status)) && first_time
|
60
60
|
AmocrmRails.generate_access_token
|
61
61
|
self.put(params: params, headers: headers, body: body, first_time: false)
|
62
|
-
elsif e.response.
|
62
|
+
elsif e.response.dig(:status) == 429
|
63
63
|
sleep(1.second)
|
64
64
|
self.put(params: params, headers: headers, body: body, first_time: false)
|
65
65
|
else
|
@@ -77,10 +77,10 @@ module AmocrmRails
|
|
77
77
|
end
|
78
78
|
parse_response(response)
|
79
79
|
rescue => e
|
80
|
-
if e.response.
|
80
|
+
if [401, 402].include?(e.response.dig(:status)) && first_time
|
81
81
|
AmocrmRails.generate_access_token
|
82
82
|
self.get(params: params, headers: headers, first_time: false)
|
83
|
-
elsif e.response.try(:
|
83
|
+
elsif e.response.try(:status) == 429
|
84
84
|
sleep(1.second)
|
85
85
|
self.get(params: params, headers: headers, body: body, first_time: false)
|
86
86
|
else
|
@@ -98,10 +98,10 @@ module AmocrmRails
|
|
98
98
|
end
|
99
99
|
parse_response(response)
|
100
100
|
rescue => e
|
101
|
-
if e.response.
|
101
|
+
if [401, 402].include?(e.response.dig(:status)) && first_time
|
102
102
|
AmocrmRails.generate_access_token
|
103
103
|
self.delete(params: params, headers: headers, first_time: false)
|
104
|
-
elsif e.response.try(:
|
104
|
+
elsif e.response.try(:stattus) == 429
|
105
105
|
sleep(1.second)
|
106
106
|
self.delete(params: params, headers: headers, body: body, first_time: false)
|
107
107
|
else
|
data/lib/concern.rb
ADDED
@@ -0,0 +1,30 @@
|
|
1
|
+
module AmocrmRails
|
2
|
+
module Concern
|
3
|
+
extend ActiveSupport::Concern
|
4
|
+
|
5
|
+
private
|
6
|
+
|
7
|
+
def update_auth_code
|
8
|
+
if user_signed_in?
|
9
|
+
AmocrmRails::register :user_id, current_user.id
|
10
|
+
if File.exist?('config/amocrm.yml')
|
11
|
+
data = YAML.load_file('config/amocrm.yml')
|
12
|
+
return nil if data.dig(Rails.env, current_user.id).nil?
|
13
|
+
data[Rails.env][current_user.id].each do |k, v|
|
14
|
+
AmocrmRails::register k.underscore.to_sym, v
|
15
|
+
end
|
16
|
+
|
17
|
+
if File.exist?('config/amocrm_token.yml')
|
18
|
+
token_data = YAML.load_file("config/amocrm_token.yml")
|
19
|
+
token_data[current_user.id] = {} if data.dig(current_user.id).nil?
|
20
|
+
token_data[current_user.id].each do |k, v|
|
21
|
+
config::register k.underscore.to_sym, v
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
AmocrmRails.generate_access_token if AmocrmRails.access_token.nil? && AmocrmRails.code.present?
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
@@ -4,10 +4,31 @@ module AmocrmRails
|
|
4
4
|
class InstallGenerator < Rails::Generators::Base
|
5
5
|
source_root File.expand_path('templates', __dir__)
|
6
6
|
|
7
|
+
class_option :with, type: :string, default: ''
|
8
|
+
|
7
9
|
def generate_install
|
8
|
-
|
10
|
+
with = options['with']
|
9
11
|
copy_file 'amocrm_token.yml', 'config/amocrm_token.yml'
|
10
|
-
|
12
|
+
|
13
|
+
if with.to_s.downcase == 'devise'
|
14
|
+
copy_file 'devise/app/controllers/amocrm_controller.rb', 'app/controllers/amocrm_controller.rb'
|
15
|
+
copy_file 'devise/app/views/amocrm/code.html.erb', 'app/views/amocrm/code.html.erb'
|
16
|
+
copy_file 'devise/app/views/amocrm/link.html.erb', 'app/views/amocrm/link.html.erb'
|
17
|
+
copy_file 'devise/config/amocrm.yml', 'config/amocrm.yml'
|
18
|
+
copy_file 'devise/config/initializers/amocrm.rb', 'config/initializers/amocrm.rb'
|
19
|
+
route "get '/amocrm' => 'amocrm#code'"
|
20
|
+
route "get '/amocrm/link' => 'amocrm#link'"
|
21
|
+
route "post '/amocrm/webhook/:name' => 'amocrm#webhook'"
|
22
|
+
|
23
|
+
inject_into_file 'app/controllers/application_controller.rb', after: "class ApplicationController < ActionController::Base\n" do <<-'RUBY'
|
24
|
+
include AmocrmRails::Concern
|
25
|
+
before_action :update_auth_code
|
26
|
+
RUBY
|
27
|
+
end
|
28
|
+
else
|
29
|
+
copy_file 'amocrm.rb', 'config/initializers/amocrm.rb'
|
30
|
+
copy_file 'amocrm.yml', 'config/amocrm.yml'
|
31
|
+
end
|
11
32
|
end
|
12
33
|
end
|
13
34
|
end
|
@@ -2,14 +2,11 @@ defaults: &defaults
|
|
2
2
|
CLIENT_ID: '***'
|
3
3
|
CLIENT_SECRET: '***'
|
4
4
|
CODE: '***'
|
5
|
-
redirect_uri: https://yourdomain.ru
|
5
|
+
redirect_uri: https://yourdomain.ru/amocrm
|
6
6
|
api_endpoint: https://yourdomain.amocrm.ru
|
7
|
-
URL_TOKEN:
|
8
|
-
REDIRECT_URI: 'https://yourdomain.com'
|
7
|
+
URL_TOKEN: https://yourdomain.amocrm.ru/oauth2/access_token
|
9
8
|
production:
|
10
9
|
<<: *defaults
|
11
|
-
URL_TOKEN: 'https://yourdomain.amocrm.ru/oauth2/access_token'
|
12
|
-
REDIRECT_URI: 'https://yourdomain.ru'
|
13
10
|
development:
|
14
11
|
<<: *defaults
|
15
12
|
test:
|
data/lib/generators/amocrm_rails/install/templates/devise/app/controllers/amocrm_controller.rb
ADDED
@@ -0,0 +1,37 @@
|
|
1
|
+
class AmocrmController < ApplicationController
|
2
|
+
before_action :authenticate_user!, except: [:webhook]
|
3
|
+
|
4
|
+
def link
|
5
|
+
end
|
6
|
+
|
7
|
+
def code
|
8
|
+
if current_user.id == params[:state].to_i
|
9
|
+
if File.exist?('config/amocrm.yml')
|
10
|
+
data = YAML.load_file('config/amocrm.yml')
|
11
|
+
data[Rails.env][current_user.id] = {} if data[Rails.env][current_user.id].nil?
|
12
|
+
params.each do |k, v|
|
13
|
+
data[Rails.env][current_user.id][k] = v
|
14
|
+
AmocrmRails::register k.underscore.to_sym, v
|
15
|
+
end
|
16
|
+
File.open("config/amocrm.yml", 'w') { |f| YAML.dump(data, f) }
|
17
|
+
end
|
18
|
+
end
|
19
|
+
@code = params[:code]
|
20
|
+
response = AmocrmRails::Request.account.retrieve(params: {
|
21
|
+
with: 'amojo_id,amojo_rights,users_groups,task_types,version,entity_names,datetime_settings'
|
22
|
+
})
|
23
|
+
@account = response.body
|
24
|
+
end
|
25
|
+
|
26
|
+
def webhook
|
27
|
+
webhook_name = params[:name]
|
28
|
+
end
|
29
|
+
|
30
|
+
private
|
31
|
+
|
32
|
+
def authenticate_user!
|
33
|
+
unless user_signed_in?
|
34
|
+
redirect_to new_user_session_path
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
require 'amocrm-rails'
|
2
|
+
|
3
|
+
AmocrmRails.setup do |config|
|
4
|
+
if File.exist?('config/amocrm.yml')
|
5
|
+
processed = YAML.load_file('config/amocrm.yml')[Rails.env]
|
6
|
+
|
7
|
+
processed.each do |k, v|
|
8
|
+
config::register k.underscore.to_sym, v
|
9
|
+
end
|
10
|
+
|
11
|
+
config::Request.timeout = 60
|
12
|
+
config::Request.open_timeout = 60
|
13
|
+
config::Request.symbolize_keys = true
|
14
|
+
config::Request.debug = false
|
15
|
+
end
|
16
|
+
end
|
data/lib/helper.rb
ADDED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: amocrm-rails
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.8
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Pavel Osetrov
|
@@ -52,11 +52,18 @@ files:
|
|
52
52
|
- lib/amocrm-rails/request.rb
|
53
53
|
- lib/amocrm-rails/response.rb
|
54
54
|
- lib/amocrm-rails/version.rb
|
55
|
+
- lib/concern.rb
|
55
56
|
- lib/generators/amocrm_rails/install/USAGE
|
56
57
|
- lib/generators/amocrm_rails/install/install_generator.rb
|
57
58
|
- lib/generators/amocrm_rails/install/templates/amocrm.rb
|
58
59
|
- lib/generators/amocrm_rails/install/templates/amocrm.yml
|
59
60
|
- lib/generators/amocrm_rails/install/templates/amocrm_token.yml
|
61
|
+
- lib/generators/amocrm_rails/install/templates/devise/app/controllers/amocrm_controller.rb
|
62
|
+
- lib/generators/amocrm_rails/install/templates/devise/app/views/amocrm/code.html.erb
|
63
|
+
- lib/generators/amocrm_rails/install/templates/devise/app/views/amocrm/link.html.erb
|
64
|
+
- lib/generators/amocrm_rails/install/templates/devise/config/amocrm.rb
|
65
|
+
- lib/generators/amocrm_rails/install/templates/devise/config/initializers/amocrm.rb
|
66
|
+
- lib/helper.rb
|
60
67
|
homepage: https://github.com/osetrov/amocrm
|
61
68
|
licenses:
|
62
69
|
- MIT
|