bizside 2.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (89) hide show
  1. checksums.yaml +7 -0
  2. data/app/assets/images/jquery-treeTable/images/toggle-collapse-dark.png +0 -0
  3. data/app/assets/images/jquery-treeTable/images/toggle-collapse-light.png +0 -0
  4. data/app/assets/images/jquery-treeTable/images/toggle-expand-dark.png +0 -0
  5. data/app/assets/images/jquery-treeTable/images/toggle-expand-light.png +0 -0
  6. data/app/assets/javascripts/bizside.js +1 -0
  7. data/app/assets/javascripts/jquery-treeTable/jquery.treeTable.js +400 -0
  8. data/app/assets/stylesheets/bizside.css +3 -0
  9. data/app/assets/stylesheets/jquery-treeTable/jquery.treeTable.css.erb +55 -0
  10. data/lib/bizside/acl/access_control_utils.rb +36 -0
  11. data/lib/bizside/acl/available_helper.rb +65 -0
  12. data/lib/bizside/acl/controller_helper.rb +15 -0
  13. data/lib/bizside/acl.rb +6 -0
  14. data/lib/bizside/active_record_logger.rb +3 -0
  15. data/lib/bizside/audit/job_logger.rb +14 -0
  16. data/lib/bizside/audit/logger.rb +35 -0
  17. data/lib/bizside/audit_log.rb +158 -0
  18. data/lib/bizside/cache/entry.rb +112 -0
  19. data/lib/bizside/cache/file_store.rb +167 -0
  20. data/lib/bizside/cache/store.rb +237 -0
  21. data/lib/bizside/cache_util.rb +47 -0
  22. data/lib/bizside/cache_utils.rb +10 -0
  23. data/lib/bizside/carrierwave.rb +48 -0
  24. data/lib/bizside/config.rb +63 -0
  25. data/lib/bizside/configurations/mail.rb +37 -0
  26. data/lib/bizside/configurations/prefix.rb +25 -0
  27. data/lib/bizside/configurations/storage.rb +28 -0
  28. data/lib/bizside/coverage/launch.rb +25 -0
  29. data/lib/bizside/coverage/rcov_formatter.rb +13 -0
  30. data/lib/bizside/cron_validator.rb +62 -0
  31. data/lib/bizside/cucumber.rb +1 -0
  32. data/lib/bizside/engine.rb +4 -0
  33. data/lib/bizside/file_converter.rb +56 -0
  34. data/lib/bizside/file_uploader.rb +71 -0
  35. data/lib/bizside/gengou.rb +46 -0
  36. data/lib/bizside/gengou.yml +5 -0
  37. data/lib/bizside/hanaita_conf.rb +88 -0
  38. data/lib/bizside/implicit_ftps.rb +29 -0
  39. data/lib/bizside/itamae_conf.rb +186 -0
  40. data/lib/bizside/job_utils.rb +285 -0
  41. data/lib/bizside/log_analyzer.rb +122 -0
  42. data/lib/bizside/mailer.rb +56 -0
  43. data/lib/bizside/query_builder.rb +78 -0
  44. data/lib/bizside/railtie.rb +80 -0
  45. data/lib/bizside/record_has_warnings.rb +4 -0
  46. data/lib/bizside/resque.rb +141 -0
  47. data/lib/bizside/rsync.rb +40 -0
  48. data/lib/bizside/safe_pty.rb +17 -0
  49. data/lib/bizside/shib_utils.rb +18 -0
  50. data/lib/bizside/show_exceptions.rb +18 -0
  51. data/lib/bizside/sql_utils.rb +45 -0
  52. data/lib/bizside/string_io.rb +39 -0
  53. data/lib/bizside/string_utils.rb +157 -0
  54. data/lib/bizside/task_helper.rb +263 -0
  55. data/lib/bizside/tasks.rb +6 -0
  56. data/lib/bizside/test_help.rb +17 -0
  57. data/lib/bizside/uploader/content_type_validator.rb +39 -0
  58. data/lib/bizside/uploader/default_extensions.yml +15 -0
  59. data/lib/bizside/uploader/exif.rb +43 -0
  60. data/lib/bizside/uploader/extension_whitelist.rb +26 -0
  61. data/lib/bizside/uploader/filename_validator.rb +31 -0
  62. data/lib/bizside/user_agent/action_view/action_view_4.rb +56 -0
  63. data/lib/bizside/user_agent/action_view/use_variant.rb +4 -0
  64. data/lib/bizside/user_agent/action_view.rb +10 -0
  65. data/lib/bizside/user_agent/controller_helper.rb +51 -0
  66. data/lib/bizside/user_agent.rb +108 -0
  67. data/lib/bizside/validations.rb +8 -0
  68. data/lib/bizside/version.rb +3 -0
  69. data/lib/bizside/view_helper.rb +10 -0
  70. data/lib/bizside/warning.rb +24 -0
  71. data/lib/bizside/yes.rb +16 -0
  72. data/lib/bizside.rb +96 -0
  73. data/lib/cron_validator.rb +3 -0
  74. data/lib/gengou.rb +3 -0
  75. data/lib/job_utils.rb +3 -0
  76. data/lib/query_builder.rb +3 -0
  77. data/lib/record_has_warnings.rb +3 -0
  78. data/lib/sql_utils.rb +3 -0
  79. data/lib/string_utils.rb +3 -0
  80. data/lib/user_agent.rb +3 -0
  81. data/lib/yes.rb +3 -0
  82. data/rails/locales/ja.yml +12 -0
  83. data/validations/collection_presence_validator.rb +15 -0
  84. data/validations/email_validator.rb +1 -0
  85. data/validations/ip_address_validator.rb +22 -0
  86. data/validations/tel_validator.rb +28 -0
  87. data/validations/url_validator.rb +30 -0
  88. data/validations/zip_validator.rb +35 -0
  89. metadata +467 -0
@@ -0,0 +1,10 @@
1
+ require 'bizside/cache_util'
2
+
3
+ class Bizside::CacheUtils
4
+ extend Bizside::CacheUtil
5
+
6
+ def self.cache
7
+ Rails.cache
8
+ end
9
+
10
+ end
@@ -0,0 +1,48 @@
1
+ require 'carrierwave'
2
+
3
+ # 日本語ファイル名のまま保存
4
+ CARRIERWAVE_SANITIZE_REGEXP = /[^[:word:]①-⑨【】「」()・&、  \(\)\.\-\+]/
5
+ CarrierWave::SanitizedFile.sanitize_regexp = CARRIERWAVE_SANITIZE_REGEXP
6
+
7
+ module Bizside
8
+ class CarrierwaveStringIO < StringIO
9
+ attr_accessor :original_filename
10
+ attr_accessor :content_type
11
+ attr_accessor :file_size
12
+
13
+ def path
14
+ original_filename
15
+ end
16
+ end
17
+ end
18
+
19
+ unless Bizside.config.within_bizside_namespace?
20
+ # 後方互換性の維持
21
+ CarrierwaveStringIO = Bizside::CarrierwaveStringIO
22
+ end
23
+
24
+ CarrierWave.configure do |config|
25
+ database_yml = ERB.new(File.read(File.join('config', 'database.yml')), 0, '-').result
26
+ database = YAML.load(database_yml)[Bizside.env]['database']
27
+
28
+ config.root = File.join('/data', Bizside.config.add_on_name, database)
29
+
30
+ if Bizside.config.storage.fog?
31
+ require 'carrierwave/storage/fog'
32
+ require 'fog/aws'
33
+
34
+ # fog の場合は、相対パス
35
+ config.root = config.root[1..-1]
36
+
37
+ credentials = Bizside.config.storage.fog.credentials.to_h.symbolize_keys
38
+ if credentials[:use_iam_profile]
39
+ credentials = credentials.merge(role_session_name: Bizside.config.add_on_name)
40
+ end
41
+ config.fog_credentials = credentials
42
+
43
+ config.fog_directory = Bizside.config.storage.fog.container
44
+ config.fog_public = false
45
+ config.storage = :fog
46
+ end
47
+
48
+ end
@@ -0,0 +1,63 @@
1
+ require_relative 'configurations/mail'
2
+ require_relative 'configurations/prefix'
3
+ require_relative 'configurations/storage'
4
+
5
+ module Bizside
6
+ class Config
7
+ include Bizside::Configurations::Mail
8
+ include Bizside::Configurations::Prefix
9
+ include Bizside::Configurations::Storage
10
+
11
+ def initialize(hash = {})
12
+ @hash = hash || {}
13
+ end
14
+
15
+ def [](key)
16
+ key = key.to_s
17
+ return (@hash[key[0..-2]] ? true : false) if key.end_with?('?')
18
+
19
+ ret = @hash[key]
20
+ if ret.nil?
21
+ ret = self.class.new
22
+ elsif ret.is_a?(Hash)
23
+ ret = self.class.new(ret)
24
+ end
25
+
26
+ ret
27
+ end
28
+
29
+ def []=(key, value)
30
+ value = self.class.new(value) if value.is_a?(Hash)
31
+ @hash[key.to_s] = value
32
+ end
33
+
34
+ def to_h
35
+ @hash.dup
36
+ end
37
+
38
+ # Hash継承時代での互換維持のために実装
39
+ def empty?
40
+ @hash.empty?
41
+ end
42
+
43
+ # オブジェクトの Hash への暗黙の変換が必要なときに内部で呼ばれるメソッド
44
+ # Hash継承時代での互換維持のために実装。
45
+ # なお、Hashの継承時代でも @hash を活用していたので、空ハッシュを返す
46
+ # @see https://docs.ruby-lang.org/ja/latest/method/Object/i/to_hash.html
47
+ def to_hash
48
+ warn "DEPRECATION WARNING: #{__method__} is deprecated and will be removed."
49
+ {}
50
+ end
51
+
52
+ def method_missing(name, *args)
53
+ ret = self[name]
54
+
55
+ if ret.is_a?(Hash) and not args[0].nil?
56
+ ret = args[0]
57
+ end
58
+
59
+ ret
60
+ end
61
+
62
+ end
63
+ end
@@ -0,0 +1,37 @@
1
+ module Bizside
2
+ module Configurations
3
+ module Mail
4
+
5
+ def mail
6
+ if @mail.nil?
7
+ configfile = File.join('config', 'mail.yml')
8
+
9
+ if File.exist?(configfile)
10
+ @mail = Bizside::Config.new(YAML.load_file(configfile)[Bizside.env])
11
+ else
12
+ @mail = Bizside::Config.new
13
+ end
14
+ end
15
+
16
+ @mail
17
+ end
18
+
19
+ def default_url_options
20
+ {:protocol => 'https', :host => mail.app_host, :script_name => prefix}
21
+ end
22
+
23
+ def smtp_settings
24
+ ret = {}
25
+ ret[:address] = mail.smtp.host if mail.smtp.host?
26
+ ret[:port] = mail.smtp.port if mail.smtp.port?
27
+ ret[:enable_starttls_auto] = mail.smtp.enable_starttls_auto if mail.smtp.enable_starttls_auto?
28
+ ret[:openssl_verify_mode] = mail.smtp.openssl_verify_mode if mail.smtp.openssl_verify_mode?
29
+ ret[:authentication] = mail.smtp.authentication if mail.smtp.authentication?
30
+ ret[:user_name] = mail.smtp.username if mail.smtp.username?
31
+ ret[:password] = mail.smtp.password if mail.smtp.password?
32
+ ret
33
+ end
34
+
35
+ end
36
+ end
37
+ end
@@ -0,0 +1,25 @@
1
+ module Bizside
2
+ module Configurations
3
+ module Prefix
4
+
5
+ def prefix(ending_slash = false)
6
+ ret = ENV['X-BIZSIDE-PREFIX']
7
+
8
+ if ret.to_s.empty?
9
+ ret = self.prefix? ? self['prefix'] : '/'
10
+ end
11
+
12
+ if ret != '/'
13
+ if ending_slash
14
+ ret = ret + '/' unless ret.end_with?('/')
15
+ else
16
+ ret = ret[0..-2] if ret.end_with?('/')
17
+ end
18
+ end
19
+
20
+ ret
21
+ end
22
+
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,28 @@
1
+ module Bizside
2
+ module Configurations
3
+ module Storage
4
+
5
+ def storage
6
+ if @storage.nil?
7
+ configfile = ENV['STORAGE_CONFIG_FILE'] ? ENV['STORAGE_CONFIG_FILE'] : default_configfile
8
+
9
+ if File.exist?(configfile)
10
+ config = ERB.new(File.read(configfile), 0, '-').result
11
+ @storage = Bizside::Config.new(YAML.load(config)[Bizside.env])
12
+ else
13
+ @storage = Bizside::Config.new
14
+ end
15
+ end
16
+
17
+ @storage
18
+ end
19
+
20
+ private
21
+
22
+ def default_configfile
23
+ File.join('config', 'aws.yml')
24
+ end
25
+
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,25 @@
1
+ module Bizside
2
+ class CoverageLaunch
3
+ def self.setup
4
+ require 'simplecov'
5
+ require 'simplecov-rcov'
6
+ require_relative 'rcov_formatter'
7
+ SimpleCov.formatter = SimpleCov::Formatter::MultiFormatter.new([
8
+ SimpleCov::Formatter::HTMLFormatter,
9
+ Coverage::RcovFormatter
10
+ ])
11
+ end
12
+ end
13
+ end
14
+
15
+ if ENV["COVERAGE"].to_s.downcase == 'true' and ENV['ACCEPTANCE_TEST'].to_s.downcase == 'true'
16
+ Bizside::CoverageLaunch.setup()
17
+
18
+ SimpleCov.start 'rails' do
19
+ SimpleCov.command_name(ENV['COMMAND_NAME']) if ENV['COMMAND_NAME']
20
+ SimpleCov.merge_timeout(7200)
21
+ end
22
+ elsif ENV["COVERAGE"]
23
+ Bizside::CoverageLaunch.setup()
24
+ SimpleCov.start 'rails'
25
+ end
@@ -0,0 +1,13 @@
1
+ module Coverage
2
+ class RcovFormatter < SimpleCov::Formatter::RcovFormatter
3
+
4
+ private
5
+
6
+ def write_file(template, output_filename, binding)
7
+ rcov_result = template.result( binding ).force_encoding('UTF-8')
8
+ File.open( output_filename, "w" ) do |file_result|
9
+ file_result.write rcov_result
10
+ end
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,62 @@
1
+ module Bizside
2
+ class CronValidator
3
+ MIN_MINUTE = 0
4
+ MAX_MINUTE = 59
5
+ MIN_HOUR = 0
6
+ MAX_HOUR = 23
7
+ MIN_DAY = 1
8
+ MAX_DAY = 31
9
+ MIN_MONTH = 1
10
+ MAX_MONTH = 12
11
+ MIN_WEEKDAY = 0
12
+ MAX_WEEKDAY = 7
13
+ CRON_ATTR = %w(minute hour day month weekday)
14
+
15
+ def initialize(cron)
16
+ @minute, @hour, @day, @month, @weekday = cron.split
17
+ end
18
+
19
+ def valid?
20
+ valid_minute? &&
21
+ valid_hour? &&
22
+ valid_day? &&
23
+ valid_month? &&
24
+ valid_weekday?
25
+ end
26
+
27
+ CRON_ATTR.each do |attr|
28
+ class_eval <<-EOS
29
+ private
30
+
31
+ def valid_#{attr}?
32
+ valid_format?(@#{attr}) &&
33
+ valid_range?(MIN_#{attr.upcase}, MAX_#{attr.upcase}, @#{attr})
34
+ end
35
+ EOS
36
+ end
37
+
38
+ private
39
+
40
+ def valid_format?(value)
41
+ value =~ /\A(\*(\/\d+)?|\d+(,\d+)*(-\d+)*(\/\d+)*)\Z/
42
+ end
43
+
44
+ def valid_range?(min, max, value)
45
+ validate_values = remove_to_ignore_value(value).split(",")
46
+ validate_values.reject do |v|
47
+ if v.include?("-")
48
+ range_v = v.split("-")
49
+ (min..max).include?(range_v[0].to_i) &&
50
+ (min..max).include?(range_v[1].to_i) &&
51
+ range_v[0].to_i < range_v[1].to_i
52
+ else
53
+ (min..max).include? v.to_i
54
+ end
55
+ end.empty?
56
+ end
57
+
58
+ def remove_to_ignore_value(value)
59
+ value.gsub(/(\/\d*|\*)/, "")
60
+ end
61
+ end
62
+ end
@@ -0,0 +1 @@
1
+ raise LoadError.new('Cucumber関係は bizside_tools.gem に移行しました。 bizside/cucumber の替わりに bizisde_tools/cucumber を require してください')
@@ -0,0 +1,4 @@
1
+ module Bizside
2
+ class Engine < ::Rails::Engine
3
+ end
4
+ end
@@ -0,0 +1,56 @@
1
+ require 'rmagick'
2
+
3
+ module Bizside
4
+ module FileConverter
5
+ EXT_IMAGE = ['.gif', '.jpg', '.jpeg', '.png']
6
+ EXT_OFFICE = ['.doc', '.docx', '.ppt', '.pptx', '.xls', '.xlsx']
7
+ EXT_PDF = ['.pdf']
8
+
9
+ def self.convert_to_pdf(file)
10
+ dest = file.path + '.pdf'
11
+
12
+ case File.extname(file.path)
13
+ when *EXT_OFFICE
14
+ unless system("java -Xmx512m -jar /opt/jodconverter/lib/jodconverter-core.jar #{file.path} #{dest}")
15
+ raise "オフィス文書からPDFに変換できませんでした。file=#{file.path}"
16
+ end
17
+ when *EXT_PDF
18
+ unless system("cp #{file.path} #{dest}")
19
+ raise "PDFをコピーできませんでした。file=#{file.path}"
20
+ end
21
+ else
22
+ raise "サポートしていない拡張子です。file=#{file.path}"
23
+ end
24
+
25
+ File.new(dest)
26
+ end
27
+
28
+ def self.convert_to_image(file)
29
+
30
+ case File.extname(file.path)
31
+ when *EXT_IMAGE
32
+ dest = file.path + File.extname(file.path)
33
+ unless system("cp #{file.path} #{dest}")
34
+ raise "画像をコピーできませんでした。file=#{file.path}"
35
+ end
36
+ ret = File.new(dest)
37
+ when *EXT_OFFICE
38
+ pdf = convert_to_pdf(file)
39
+ ret = convert_to_image(pdf)
40
+ when *EXT_PDF
41
+ dest = file.path + '.png'
42
+ images = Magick::ImageList.new(file.path) do
43
+ self.quality = 100
44
+ self.density = 96
45
+ end
46
+ images.first.write(dest)
47
+ ret = File.new(dest)
48
+ else
49
+ raise "サポートしていない拡張子です。file=#{file.path}"
50
+ end
51
+
52
+ ret
53
+ end
54
+
55
+ end
56
+ end
@@ -0,0 +1,71 @@
1
+ require 'carrierwave'
2
+ require_relative 'carrierwave'
3
+
4
+ require_relative 'uploader/extension_whitelist'
5
+ require_relative 'uploader/filename_validator'
6
+ require_relative 'uploader/content_type_validator'
7
+
8
+ if defined?(Rails) && Rails.application.class.parent_name.eql?('BizsideTestApp')
9
+ # not require 'uploader/exif'
10
+ else
11
+ require_relative 'uploader/exif'
12
+ end
13
+
14
+ module Bizside
15
+ # === storage.yml
16
+ # storage.yml に fog エントリが定義されている場合、fog 参照先
17
+ # のストレージの fog.container に保存します。
18
+ #
19
+ # storage.yml が存在しない・又は fog エントリがない場合はローカルに保存します。
20
+ class FileUploader < CarrierWave::Uploader::Base
21
+
22
+ include Bizside::Uploader::ExtensionWhitelist
23
+ include Bizside::Uploader::FilenameValidator
24
+ include Bizside::Uploader::ContentTypeValidator
25
+
26
+ begin
27
+ require 'mini_magick'
28
+ include CarrierWave::MiniMagick
29
+ include Bizside::Uploader::Exif
30
+ rescue LoadError
31
+ begin
32
+ require 'rmagick'
33
+ include CarrierWave::RMagick
34
+ include Bizside::Uploader::Exif
35
+ rescue LoadError
36
+ end
37
+ end
38
+
39
+ if CarrierWave::SanitizedFile.sanitize_regexp != CARRIERWAVE_SANITIZE_REGEXP
40
+ raise 'CarrierWave::SanitizedFile.sanitize_regexpの変更は禁止されました。'
41
+ end
42
+ CarrierWave::SanitizedFile.sanitize_regexp = /[\n\r]/ # CarrierWaveに自動でサニタイズさせず、別途 filename_validator でチェックする
43
+
44
+ def downloaded_file
45
+ Bizside.config.storage.fog? ? downloaded_file_from_fog(file.path) : file.path
46
+ end
47
+
48
+ private
49
+
50
+ def downloaded_file_from_fog(path)
51
+ Bizside.config.storage.fog.cache? ? download_file_from_fog_with_cache(path) : download_file_from_fog(path)
52
+ end
53
+
54
+ def download_file_from_fog(path)
55
+ tmp_path = "/tmp/#{Bizside.config.add_on_name}-#{Bizside::StringUtils.current_time_string}-#{File.basename(path)}"
56
+ system("curl '#{file.url}' -o '#{tmp_path}'")
57
+ tmp_path
58
+ end
59
+
60
+ def download_file_from_fog_with_cache(path)
61
+ cache_path = "/" + path
62
+ unless File.exist?(cache_path)
63
+ FileUtils.mkdir_p(File.dirname(cache_path))
64
+ tmp_path = download_file_from_fog(path)
65
+ system("mv '#{tmp_path}' '#{cache_path}'")
66
+ end
67
+ cache_path
68
+ end
69
+
70
+ end
71
+ end
@@ -0,0 +1,46 @@
1
+ require 'yaml'
2
+
3
+ module Bizside
4
+ class Gengou
5
+ @@_gengou = YAML.load_file(File.join(File.dirname(__FILE__), 'gengou.yml'))
6
+
7
+ def self.to_seireki(gengou, year_jp)
8
+ # 引数 year_jpには年度の値が入る
9
+ target_gengou = nil
10
+ @@_gengou.invert.keys.each do |start_gengou|
11
+ if start_gengou == gengou.to_s
12
+ target_gengou = start_gengou
13
+ break
14
+ end
15
+ end
16
+
17
+ return nil unless target_gengou
18
+
19
+ start_year = @@_gengou.invert[target_gengou].to_s
20
+ return (start_year.to_i + year_jp.to_i - 1).to_s
21
+ end
22
+
23
+ def self.to_wareki(date)
24
+ return if date.to_s.empty?
25
+
26
+ match = /^(\d{4})(\d{2})?(\d{2})?$/.match(date.to_s)
27
+ match ||= /^(\d{4})(?:[-\/](\d{1,2}))?(?:[-\/](\d{1,2}))?$/.match(date.to_s)
28
+ match ||= /^(\d{4})年(?:(\d{1,2})月)?(?:(\d{1,2})日)?$/.match(date.to_s)
29
+ if match
30
+ year, month, day = match.to_a[1..3].map { |m| m&.to_i }
31
+ return unless Date.valid_date?(year, month || 1, day || 1)
32
+ date = Date.new(year, month || 1, day || 1)
33
+ date = date.end_of_month if day.nil?
34
+ date = date.end_of_year if month.nil?
35
+
36
+ start_date, gengou = @@_gengou.sort { |a, b| b[0] <=> a[0] }.detect { |k, _| k <= date }
37
+
38
+ return if start_date.nil?
39
+
40
+ year = date.year - start_date.year
41
+ "#{gengou}#{(year.zero? ? "元" : year + 1)}"
42
+ end
43
+ end
44
+
45
+ end
46
+ end
@@ -0,0 +1,5 @@
1
+ 1868-01-25: "明治"
2
+ 1912-07-30: "大正"
3
+ 1926-12-25: "昭和"
4
+ 1989-01-08: "平成"
5
+ 2019-05-01: "令和"
@@ -0,0 +1,88 @@
1
+ require 'singleton'
2
+ require 'yaml'
3
+
4
+ module Bizside
5
+ # hanaita_conf をテストするため、 singleton 以前のクラスを定義
6
+ #
7
+ # TODO: ItamaeConf に移行が済んだ段階でこちらは削除。
8
+ class HanaitaConfSub
9
+ CONF_FILE = '/etc/bizside/hanaita.yml'
10
+
11
+ def initialize
12
+ conf_file = ENV['HANAITA_CONF'] || CONF_FILE
13
+ @_conf = YAML.load_file(conf_file) if File.exist?(conf_file)
14
+ end
15
+
16
+ def conf
17
+ @_conf
18
+ end
19
+ end
20
+
21
+ # /etc/bizside/hanaita.yml の on-memory モデル
22
+ #
23
+ # == SYNOPSIS
24
+ # require 'itamae_plugin_recipe_bizside'
25
+ # hanaita_conf(:a, :b, ...) # Or
26
+ # hanaita_conf('a.b...')
27
+ #
28
+ # == DESCRIPTION
29
+ # /etc/bizside/hanaita.yml の hash に対するキー検索を行います。
30
+ #
31
+ # ファイルが存在しない場合は nil を返します。
32
+ #
33
+ # hanaita_conf(:a, :b) は意味的に hanaita.yml のハッシュに対する
34
+ # アクセスhanaita_conf['a']['b'] と同等です。
35
+ #
36
+ # hanaita_conf(:a) が ハッシュでない場合(未定義または文字列や数値など)、
37
+ # hanaita_conf(:a, :b) は単に nil を返します('undefined method `[]'
38
+ # for nil:NilClass' とはなりません)。
39
+ #
40
+ # I18n#t と同様、'a.b' と言った文字列指定も可能です。
41
+ #
42
+ # == FILES
43
+ # /etc/bizside/hanaita.yml:: 設定ファイル
44
+ class HanaitaConf < HanaitaConfSub
45
+ include Singleton
46
+ end
47
+
48
+ # 各フェーズで hanaita_conf メソッド経由でアクセスできるようにするための
49
+ # ユーティリティ。node メソッドと同様。
50
+ module HanaitaConfAccessorMixin
51
+ # 必要に応じて上書き
52
+ def hanaita_conf_factory
53
+ Bizside::HanaitaConf.instance
54
+ end
55
+
56
+ def hanaita_conf(*args)
57
+ warn("DEPRECATED WARNING: 'hanaita_conf' is deprecated. " +
58
+ "Use 'itamae_conf' instead.")
59
+ if args.nil? || (args.is_a?(Array) && args[0].is_a?(Symbol) || args[0].nil?)
60
+ hanaita_conf_sub(hanaita_conf_factory.conf, args)
61
+ elsif args.is_a?(Array) && args[0].is_a?(String)
62
+ hanaita_conf_sub(hanaita_conf_factory.conf, args[0].split('.').map{|s| s.to_sym})
63
+ else
64
+ raise 'unsupported argument type'
65
+ end
66
+ end
67
+
68
+ private
69
+
70
+ def hanaita_conf_sub(data, args)
71
+ if args.size == 0
72
+ data
73
+ elsif data.is_a?(Hash)
74
+ hanaita_conf_sub(data[args[0].to_s], args.drop(1))
75
+ else
76
+ nil
77
+ end
78
+ end
79
+
80
+ def warn(msg)
81
+ if defined?(Rails) and Rails.logger
82
+ Rails.logger.warn(msg)
83
+ else
84
+ STDERR.print(msg, "\n")
85
+ end
86
+ end
87
+ end
88
+ end
@@ -0,0 +1,29 @@
1
+ # https://github.com/bnix/double-bag-ftps/issues/17
2
+ # implicit に対応するためのパッチ
3
+
4
+ require 'net/ftp'
5
+
6
+ module Bizside
7
+ class ImplicitFTPS < Net::FTP
8
+ FTP_PORT = 990
9
+
10
+ def connect(host, port = FTP_PORT)
11
+ synchronize do
12
+ @host = host
13
+ @bare_sock = open_socket(host, port)
14
+ begin
15
+ ssl_sock = start_tls_session(Socket.tcp(host, port))
16
+ @sock = BufferedSSLSocket.new(ssl_sock, read_timeout: @read_timeout)
17
+ voidresp
18
+ if @private_data_connection
19
+ voidcmd("PBSZ 0")
20
+ voidcmd("PROT P")
21
+ end
22
+ rescue OpenSSL::SSL::SSLError, Net::OpenTimeout
23
+ @sock.close
24
+ raise
25
+ end
26
+ end
27
+ end
28
+ end
29
+ end