bizside 2.0.1

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 (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