rest-ftp-daemon 0.400.0 → 0.410.0.pre.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (80) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile.lock +26 -6
  3. data/Rakefile +5 -3
  4. data/bin/rest-ftp-daemon +2 -1
  5. data/config.ru +8 -2
  6. data/lib/rest-ftp-daemon.rb +10 -2
  7. data/lib/rest-ftp-daemon/api/debug.rb +17 -5
  8. data/lib/rest-ftp-daemon/api/{job_presenter.rb → entities/job.rb} +25 -2
  9. data/lib/rest-ftp-daemon/api/entities/options.rb +15 -0
  10. data/lib/rest-ftp-daemon/api/jobs.rb +46 -13
  11. data/lib/rest-ftp-daemon/api/root-real.rb +80 -0
  12. data/lib/rest-ftp-daemon/api/root-test.rb +69 -0
  13. data/lib/rest-ftp-daemon/api/root.rb +21 -5
  14. data/lib/rest-ftp-daemon/constants.rb +18 -1
  15. data/lib/rest-ftp-daemon/counters.rb +0 -3
  16. data/lib/rest-ftp-daemon/exceptions.rb +16 -12
  17. data/lib/rest-ftp-daemon/helpers/api.rb +3 -3
  18. data/lib/rest-ftp-daemon/helpers/common.rb +12 -5
  19. data/lib/rest-ftp-daemon/helpers/views.rb +41 -11
  20. data/lib/rest-ftp-daemon/job.rb +118 -420
  21. data/lib/rest-ftp-daemon/job_queue.rb +34 -5
  22. data/lib/rest-ftp-daemon/jobs/dummy.rb +20 -0
  23. data/lib/rest-ftp-daemon/jobs/transfer.rb +319 -0
  24. data/lib/rest-ftp-daemon/jobs/video.rb +107 -0
  25. data/lib/rest-ftp-daemon/location.rb +125 -0
  26. data/lib/rest-ftp-daemon/path.rb +3 -0
  27. data/lib/rest-ftp-daemon/remote_ftp.rb +2 -2
  28. data/lib/rest-ftp-daemon/remote_sftp.rb +2 -2
  29. data/lib/rest-ftp-daemon/static/config.json +411 -0
  30. data/lib/rest-ftp-daemon/static/css/bootstrap.min.css +14 -0
  31. data/lib/rest-ftp-daemon/static/css/{bootstrap.css → bootstrap.old.css} +0 -0
  32. data/lib/rest-ftp-daemon/static/fonts/glyphicons-halflings-regular.eot +0 -0
  33. data/lib/rest-ftp-daemon/static/fonts/glyphicons-halflings-regular.svg +288 -0
  34. data/lib/rest-ftp-daemon/static/fonts/glyphicons-halflings-regular.ttf +0 -0
  35. data/lib/rest-ftp-daemon/static/fonts/glyphicons-halflings-regular.woff +0 -0
  36. data/lib/rest-ftp-daemon/static/fonts/glyphicons-halflings-regular.woff2 +0 -0
  37. data/lib/rest-ftp-daemon/static/swagger.html +83 -0
  38. data/lib/rest-ftp-daemon/static/swagger/css/print.css +1362 -0
  39. data/lib/rest-ftp-daemon/static/swagger/css/reset.css +125 -0
  40. data/lib/rest-ftp-daemon/static/swagger/css/screen.css +1489 -0
  41. data/lib/rest-ftp-daemon/static/swagger/css/style.css +250 -0
  42. data/lib/rest-ftp-daemon/static/swagger/css/typography.css +14 -0
  43. data/lib/rest-ftp-daemon/static/swagger/fonts/DroidSans-Bold.ttf +0 -0
  44. data/lib/rest-ftp-daemon/static/swagger/fonts/DroidSans.ttf +0 -0
  45. data/lib/rest-ftp-daemon/static/swagger/images/collapse.gif +0 -0
  46. data/lib/rest-ftp-daemon/static/swagger/images/expand.gif +0 -0
  47. data/lib/rest-ftp-daemon/static/swagger/images/explorer_icons.png +0 -0
  48. data/lib/rest-ftp-daemon/static/swagger/images/favicon-16x16.png +0 -0
  49. data/lib/rest-ftp-daemon/static/swagger/images/favicon-32x32.png +0 -0
  50. data/lib/rest-ftp-daemon/static/swagger/images/favicon.ico +0 -0
  51. data/lib/rest-ftp-daemon/static/swagger/images/logo_small.png +0 -0
  52. data/lib/rest-ftp-daemon/static/swagger/images/pet_store_api.png +0 -0
  53. data/lib/rest-ftp-daemon/static/swagger/images/throbber.gif +0 -0
  54. data/lib/rest-ftp-daemon/static/swagger/images/wordnik_api.png +0 -0
  55. data/lib/rest-ftp-daemon/static/swagger/lib/backbone-min.js +15 -0
  56. data/lib/rest-ftp-daemon/static/swagger/lib/es5-shim.js +2065 -0
  57. data/lib/rest-ftp-daemon/static/swagger/lib/handlebars-4.0.5.js +4608 -0
  58. data/lib/rest-ftp-daemon/static/swagger/lib/highlight.9.1.0.pack.js +2 -0
  59. data/lib/rest-ftp-daemon/static/swagger/lib/highlight.9.1.0.pack_extended.js +34 -0
  60. data/lib/rest-ftp-daemon/static/swagger/lib/jquery-1.8.0.min.js +2 -0
  61. data/lib/rest-ftp-daemon/static/swagger/lib/jquery.ba-bbq.min.js +18 -0
  62. data/lib/rest-ftp-daemon/static/swagger/lib/jquery.slideto.min.js +1 -0
  63. data/lib/rest-ftp-daemon/static/swagger/lib/jquery.wiggle.min.js +8 -0
  64. data/lib/rest-ftp-daemon/static/swagger/lib/js-yaml.min.js +3 -0
  65. data/lib/rest-ftp-daemon/static/swagger/lib/jsoneditor.min.js +11 -0
  66. data/lib/rest-ftp-daemon/static/swagger/lib/lodash.min.js +102 -0
  67. data/lib/rest-ftp-daemon/static/swagger/lib/marked.js +1272 -0
  68. data/lib/rest-ftp-daemon/static/swagger/lib/object-assign-pollyfill.js +23 -0
  69. data/lib/rest-ftp-daemon/static/swagger/lib/swagger-oauth.js +347 -0
  70. data/lib/rest-ftp-daemon/static/swagger/lib/swagger-ui.min.js +10 -0
  71. data/lib/rest-ftp-daemon/uri.rb +9 -1
  72. data/lib/rest-ftp-daemon/views/dashboard.haml +1 -1
  73. data/lib/rest-ftp-daemon/views/dashboard_footer.haml +6 -3
  74. data/lib/rest-ftp-daemon/views/dashboard_jobs.haml +3 -3
  75. data/lib/rest-ftp-daemon/views/dashboard_table.haml +25 -20
  76. data/lib/rest-ftp-daemon/workers/transfer.rb +14 -0
  77. data/rest-ftp-daemon.gemspec +14 -4
  78. data/spec/rest-ftp-daemon/features/swagger_spec.rb +24 -0
  79. data/spec/spec_helper.rb +4 -4
  80. metadata +119 -14
@@ -0,0 +1,125 @@
1
+ require 'active_support/core_ext/module/delegation'
2
+ #require 'forwardable'
3
+
4
+ module RestFtpDaemon
5
+ class Location
6
+ # Accessors
7
+ attr_reader :uri
8
+ attr_reader :scheme
9
+ attr_reader :dir
10
+ attr_accessor :name
11
+
12
+ # Logging
13
+ #attr_reader :logger
14
+ #include BmcDaemonLib::LoggerHelper
15
+
16
+ # def_delegators :@uri,
17
+ delegate :scheme, :host, :user, :password, :to_s, to: :uri
18
+
19
+ def initialize path
20
+ #@logger = BmcDaemonLib::LoggerPool.instance.get :transfer
21
+ #log_debug "Location.initialize path[#{path}]"
22
+ location_uri = path.dup
23
+
24
+ # Replace tokens, fix scheme for local paths
25
+ resolve_tokens! location_uri
26
+ fix_scheme! location_uri
27
+
28
+ # Parse URL
29
+ #log_debug "Location.initialize uri[#{location_uri}]"
30
+ parse_url location_uri
31
+
32
+ # Ensure result does not contain tokens after replacement
33
+ detected_tokens = detect_tokens(location_uri)
34
+ #log_debug "Location.initialize detected_tokens: #{detected_tokens.inspect}"
35
+ unless detected_tokens.empty?
36
+ raise RestFtpDaemon::UnresolvedTokens, detected_tokens.join(' ')
37
+ end
38
+
39
+ # Check that scheme is supported
40
+ unless @uri.scheme
41
+ raise RestFtpDaemon::UnsupportedScheme, url
42
+ end
43
+
44
+ # All done
45
+ #log_debug "Location.initialize class[#{@uri.class}] scheme[#{@uri.scheme}] dir[#{@dir}] name[#{@name}]"
46
+ end
47
+
48
+ def is? klass
49
+ @uri.is_a? klass
50
+ end
51
+
52
+ def path
53
+ File.join @dir.to_s, @name.to_s
54
+ end
55
+
56
+ private
57
+
58
+ def tokenize item
59
+ return unless item.is_a? String
60
+ "[#{item}]"
61
+ end
62
+
63
+ def resolve_tokens! path
64
+ # Gther endpoints, and copy path string to alter it later
65
+ endpoints = BmcDaemonLib::Conf[:endpoints]
66
+ vectors = {}
67
+ vectors = endpoints.clone if endpoints.is_a? Hash
68
+
69
+ # Stack RANDOM into tokens
70
+ vectors["RANDOM"] = SecureRandom.hex(JOB_RANDOM_LEN)
71
+
72
+ # Replace endpoints defined in config
73
+ vectors.each do |from, to|
74
+ next if to.to_s.blank?
75
+ path.gsub! tokenize(from), to
76
+ end
77
+ end
78
+
79
+ def fix_scheme! path
80
+ # path.gsub!(/^\/(.*)/, 'file:///\1')
81
+ path.gsub! /^\/(.*)/, 'file:/\1'
82
+ end
83
+
84
+ def remove_multiple_slashes path
85
+ path.gsub! /([^:])\/\//, '\1/'
86
+ end
87
+
88
+ def parse_url path
89
+ # Parse that URL
90
+ @uri = URI.parse path # rescue nil
91
+ raise RestFtpDaemon::LocationParseError, location_path unless uri
92
+
93
+ # Store URL parts
94
+ # remove_multiple_slashes
95
+ @ori_path = path
96
+ @uri_path = uri.path
97
+ @dir = extract_dirname uri.path
98
+ @name = extract_filename uri.path
99
+
100
+ rescue StandardError => exception
101
+ raise RestFtpDaemon::LocationParseError, exception.message unless uri
102
+ end
103
+
104
+ def extract_filename path
105
+ # match everything that's after a slash at the end of the string
106
+ m = path.match(/\/?([^\/]+)$/)
107
+ return m[1].to_s unless m.nil?
108
+ end
109
+
110
+ def extract_dirname path
111
+ # match all the beginning of the string up to the last slash
112
+ m = path.match(/^(.*)\/[^\/]*$/)
113
+ return m[1].to_s unless m.nil?
114
+ end
115
+
116
+ def strip_leading_slash_from_dir!
117
+ @dir.to_s.gsub!(/^\//, '')
118
+ end
119
+
120
+ def detect_tokens item
121
+ item.scan /\[[^\[\]]*\]/
122
+ end
123
+
124
+ end
125
+ end
@@ -8,7 +8,10 @@ module RestFtpDaemon
8
8
  def initialize full, strip_leading_slash = false
9
9
  # Extract path parts
10
10
  @name = extract_filename full.to_s
11
+
11
12
  @dir = extract_dirname full.to_s
13
+ # puts "Path full.to_s: #{full.to_s}"
14
+ # puts "Path extract_dirname: #{@dir}"
12
15
 
13
16
  # Remove leading slash if needed
14
17
  strip_leading_slash_from_dir! if strip_leading_slash
@@ -59,7 +59,7 @@ module RestFtpDaemon
59
59
  @ftp.mkdir directory
60
60
 
61
61
  rescue
62
- raise JobTargetPermissionError
62
+ raise TargetPermissionError
63
63
  end
64
64
 
65
65
  def chdir_or_create directory, mkdir = false
@@ -88,7 +88,7 @@ module RestFtpDaemon
88
88
 
89
89
  def push source, target, tempname = nil, &callback
90
90
  # Push init
91
- raise RestFtpDaemon::JobAssertionFailed, "push/1" if @ftp.nil?
91
+ raise RestFtpDaemon::AssertionFailed, "push/1" if @ftp.nil?
92
92
 
93
93
  # Temp file if provided
94
94
  destination = target.clone
@@ -58,7 +58,7 @@ module RestFtpDaemon
58
58
  @sftp.mkdir! directory
59
59
 
60
60
  rescue
61
- raise JobTargetPermissionError
61
+ raise TargetPermissionError
62
62
  end
63
63
 
64
64
  def chdir_or_create directory, mkdir = false
@@ -93,7 +93,7 @@ module RestFtpDaemon
93
93
 
94
94
  def push source, target, tempname = nil, &callback
95
95
  # Push init
96
- raise RestFtpDaemon::JobAssertionFailed, "push/1" if @sftp.nil?
96
+ raise RestFtpDaemon::AssertionFailed, "push/1" if @sftp.nil?
97
97
 
98
98
  # Temp file if provided
99
99
  destination = target.clone
@@ -0,0 +1,411 @@
1
+ {
2
+ "vars": {
3
+ "@gray-base": "#000",
4
+ "@gray-darker": "lighten(@gray-base, 13.5%)",
5
+ "@gray-dark": "lighten(@gray-base, 20%)",
6
+ "@gray": "lighten(@gray-base, 33.5%)",
7
+ "@gray-light": "lighten(@gray-base, 46.7%)",
8
+ "@gray-lighter": "lighten(@gray-base, 93.5%)",
9
+ "@brand-primary": "darken(#428bca, 6.5%)",
10
+ "@brand-success": "#5cb85c",
11
+ "@brand-info": "#5bc0de",
12
+ "@brand-warning": "#f0ad4e",
13
+ "@brand-danger": "#d9534f",
14
+ "@body-bg": "#fff",
15
+ "@text-color": "@gray-dark",
16
+ "@link-color": "@brand-primary",
17
+ "@link-hover-color": "darken(@link-color, 15%)",
18
+ "@link-hover-decoration": "underline",
19
+ "@font-family-sans-serif": "\"Helvetica Neue\", Helvetica, Arial, sans-serif",
20
+ "@font-family-serif": "Georgia, \"Times New Roman\", Times, serif",
21
+ "@font-family-monospace": "Menlo, Monaco, Consolas, \"Courier New\", monospace",
22
+ "@font-family-base": "@font-family-sans-serif",
23
+ "@font-size-base": "12px",
24
+ "@font-size-large": "ceil((@font-size-base * 1.25))",
25
+ "@font-size-small": "ceil((@font-size-base * 0.85))",
26
+ "@font-size-h1": "floor((@font-size-base * 2.6))",
27
+ "@font-size-h2": "floor((@font-size-base * 2.15))",
28
+ "@font-size-h3": "ceil((@font-size-base * 1.7))",
29
+ "@font-size-h4": "ceil((@font-size-base * 1.25))",
30
+ "@font-size-h5": "@font-size-base",
31
+ "@font-size-h6": "ceil((@font-size-base * 0.85))",
32
+ "@line-height-base": "1.428571429",
33
+ "@line-height-computed": "floor((@font-size-base * @line-height-base))",
34
+ "@headings-font-family": "inherit",
35
+ "@headings-font-weight": "500",
36
+ "@headings-line-height": "1.1",
37
+ "@headings-color": "inherit",
38
+ "@icon-font-path": "\"../fonts/\"",
39
+ "@icon-font-name": "\"glyphicons-halflings-regular\"",
40
+ "@icon-font-svg-id": "\"glyphicons_halflingsregular\"",
41
+ "@padding-base-vertical": "6px",
42
+ "@padding-base-horizontal": "12px",
43
+ "@padding-large-vertical": "10px",
44
+ "@padding-large-horizontal": "16px",
45
+ "@padding-small-vertical": "5px",
46
+ "@padding-small-horizontal": "10px",
47
+ "@padding-xs-vertical": "1px",
48
+ "@padding-xs-horizontal": "5px",
49
+ "@line-height-large": "1.3333333",
50
+ "@line-height-small": "1.5",
51
+ "@border-radius-base": "4px",
52
+ "@border-radius-large": "6px",
53
+ "@border-radius-small": "3px",
54
+ "@component-active-color": "#fff",
55
+ "@component-active-bg": "@brand-primary",
56
+ "@caret-width-base": "4px",
57
+ "@caret-width-large": "5px",
58
+ "@table-cell-padding": "8px",
59
+ "@table-condensed-cell-padding": "5px",
60
+ "@table-bg": "transparent",
61
+ "@table-bg-accent": "#f9f9f9",
62
+ "@table-bg-hover": "#f5f5f5",
63
+ "@table-bg-active": "@table-bg-hover",
64
+ "@table-border-color": "#ddd",
65
+ "@btn-font-weight": "normal",
66
+ "@btn-default-color": "#333",
67
+ "@btn-default-bg": "#fff",
68
+ "@btn-default-border": "#ccc",
69
+ "@btn-primary-color": "#fff",
70
+ "@btn-primary-bg": "@brand-primary",
71
+ "@btn-primary-border": "darken(@btn-primary-bg, 5%)",
72
+ "@btn-success-color": "#fff",
73
+ "@btn-success-bg": "@brand-success",
74
+ "@btn-success-border": "darken(@btn-success-bg, 5%)",
75
+ "@btn-info-color": "#fff",
76
+ "@btn-info-bg": "@brand-info",
77
+ "@btn-info-border": "darken(@btn-info-bg, 5%)",
78
+ "@btn-warning-color": "#fff",
79
+ "@btn-warning-bg": "@brand-warning",
80
+ "@btn-warning-border": "darken(@btn-warning-bg, 5%)",
81
+ "@btn-danger-color": "#fff",
82
+ "@btn-danger-bg": "@brand-danger",
83
+ "@btn-danger-border": "darken(@btn-danger-bg, 5%)",
84
+ "@btn-link-disabled-color": "@gray-light",
85
+ "@btn-border-radius-base": "@border-radius-base",
86
+ "@btn-border-radius-large": "@border-radius-large",
87
+ "@btn-border-radius-small": "@border-radius-small",
88
+ "@input-bg": "#fff",
89
+ "@input-bg-disabled": "@gray-lighter",
90
+ "@input-color": "@gray",
91
+ "@input-border": "#ccc",
92
+ "@input-border-radius": "@border-radius-base",
93
+ "@input-border-radius-large": "@border-radius-large",
94
+ "@input-border-radius-small": "@border-radius-small",
95
+ "@input-border-focus": "#66afe9",
96
+ "@input-color-placeholder": "#999",
97
+ "@input-height-base": "(@line-height-computed + (@padding-base-vertical * 2) + 2)",
98
+ "@input-height-large": "(ceil(@font-size-large * @line-height-large) + (@padding-large-vertical * 2) + 2)",
99
+ "@input-height-small": "(floor(@font-size-small * @line-height-small) + (@padding-small-vertical * 2) + 2)",
100
+ "@form-group-margin-bottom": "15px",
101
+ "@legend-color": "@gray-dark",
102
+ "@legend-border-color": "#e5e5e5",
103
+ "@input-group-addon-bg": "@gray-lighter",
104
+ "@input-group-addon-border-color": "@input-border",
105
+ "@cursor-disabled": "not-allowed",
106
+ "@dropdown-bg": "#fff",
107
+ "@dropdown-border": "rgba(0,0,0,.15)",
108
+ "@dropdown-fallback-border": "#ccc",
109
+ "@dropdown-divider-bg": "#e5e5e5",
110
+ "@dropdown-link-color": "@gray-dark",
111
+ "@dropdown-link-hover-color": "darken(@gray-dark, 5%)",
112
+ "@dropdown-link-hover-bg": "#f5f5f5",
113
+ "@dropdown-link-active-color": "@component-active-color",
114
+ "@dropdown-link-active-bg": "@component-active-bg",
115
+ "@dropdown-link-disabled-color": "@gray-light",
116
+ "@dropdown-header-color": "@gray-light",
117
+ "@dropdown-caret-color": "#000",
118
+ "@screen-xs": "480px",
119
+ "@screen-xs-min": "@screen-xs",
120
+ "@screen-phone": "@screen-xs-min",
121
+ "@screen-sm": "768px",
122
+ "@screen-sm-min": "@screen-sm",
123
+ "@screen-tablet": "@screen-sm-min",
124
+ "@screen-md": "992px",
125
+ "@screen-md-min": "@screen-md",
126
+ "@screen-desktop": "@screen-md-min",
127
+ "@screen-lg": "1200px",
128
+ "@screen-lg-min": "@screen-lg",
129
+ "@screen-lg-desktop": "@screen-lg-min",
130
+ "@screen-xs-max": "(@screen-sm-min - 1)",
131
+ "@screen-sm-max": "(@screen-md-min - 1)",
132
+ "@screen-md-max": "(@screen-lg-min - 1)",
133
+ "@grid-columns": "12",
134
+ "@grid-gutter-width": "30px",
135
+ "@grid-float-breakpoint": "@screen-sm-min",
136
+ "@grid-float-breakpoint-max": "(@grid-float-breakpoint - 1)",
137
+ "@container-tablet": "(720px + @grid-gutter-width)",
138
+ "@container-sm": "@container-tablet",
139
+ "@container-desktop": "(940px + @grid-gutter-width)",
140
+ "@container-md": "@container-desktop",
141
+ "@container-large-desktop": "(1140px + @grid-gutter-width)",
142
+ "@container-lg": "@container-large-desktop",
143
+ "@navbar-height": "50px",
144
+ "@navbar-margin-bottom": "@line-height-computed",
145
+ "@navbar-border-radius": "@border-radius-base",
146
+ "@navbar-padding-horizontal": "floor((@grid-gutter-width / 2))",
147
+ "@navbar-padding-vertical": "((@navbar-height - @line-height-computed) / 2)",
148
+ "@navbar-collapse-max-height": "340px",
149
+ "@navbar-default-color": "#777",
150
+ "@navbar-default-bg": "#f8f8f8",
151
+ "@navbar-default-border": "darken(@navbar-default-bg, 6.5%)",
152
+ "@navbar-default-link-color": "#777",
153
+ "@navbar-default-link-hover-color": "#333",
154
+ "@navbar-default-link-hover-bg": "transparent",
155
+ "@navbar-default-link-active-color": "#555",
156
+ "@navbar-default-link-active-bg": "darken(@navbar-default-bg, 6.5%)",
157
+ "@navbar-default-link-disabled-color": "#ccc",
158
+ "@navbar-default-link-disabled-bg": "transparent",
159
+ "@navbar-default-brand-color": "@navbar-default-link-color",
160
+ "@navbar-default-brand-hover-color": "darken(@navbar-default-brand-color, 10%)",
161
+ "@navbar-default-brand-hover-bg": "transparent",
162
+ "@navbar-default-toggle-hover-bg": "#ddd",
163
+ "@navbar-default-toggle-icon-bar-bg": "#888",
164
+ "@navbar-default-toggle-border-color": "#ddd",
165
+ "@navbar-inverse-color": "lighten(@gray-light, 15%)",
166
+ "@navbar-inverse-bg": "#222",
167
+ "@navbar-inverse-border": "darken(@navbar-inverse-bg, 10%)",
168
+ "@navbar-inverse-link-color": "lighten(@gray-light, 15%)",
169
+ "@navbar-inverse-link-hover-color": "#fff",
170
+ "@navbar-inverse-link-hover-bg": "transparent",
171
+ "@navbar-inverse-link-active-color": "@navbar-inverse-link-hover-color",
172
+ "@navbar-inverse-link-active-bg": "darken(@navbar-inverse-bg, 10%)",
173
+ "@navbar-inverse-link-disabled-color": "#444",
174
+ "@navbar-inverse-link-disabled-bg": "transparent",
175
+ "@navbar-inverse-brand-color": "@navbar-inverse-link-color",
176
+ "@navbar-inverse-brand-hover-color": "#fff",
177
+ "@navbar-inverse-brand-hover-bg": "transparent",
178
+ "@navbar-inverse-toggle-hover-bg": "#333",
179
+ "@navbar-inverse-toggle-icon-bar-bg": "#fff",
180
+ "@navbar-inverse-toggle-border-color": "#333",
181
+ "@nav-link-padding": "10px 15px",
182
+ "@nav-link-hover-bg": "@gray-lighter",
183
+ "@nav-disabled-link-color": "@gray-light",
184
+ "@nav-disabled-link-hover-color": "@gray-light",
185
+ "@nav-tabs-border-color": "#ddd",
186
+ "@nav-tabs-link-hover-border-color": "@gray-lighter",
187
+ "@nav-tabs-active-link-hover-bg": "@body-bg",
188
+ "@nav-tabs-active-link-hover-color": "@gray",
189
+ "@nav-tabs-active-link-hover-border-color": "#ddd",
190
+ "@nav-tabs-justified-link-border-color": "#ddd",
191
+ "@nav-tabs-justified-active-link-border-color": "@body-bg",
192
+ "@nav-pills-border-radius": "@border-radius-base",
193
+ "@nav-pills-active-link-hover-bg": "@component-active-bg",
194
+ "@nav-pills-active-link-hover-color": "@component-active-color",
195
+ "@pagination-color": "@link-color",
196
+ "@pagination-bg": "#fff",
197
+ "@pagination-border": "#ddd",
198
+ "@pagination-hover-color": "@link-hover-color",
199
+ "@pagination-hover-bg": "@gray-lighter",
200
+ "@pagination-hover-border": "#ddd",
201
+ "@pagination-active-color": "#fff",
202
+ "@pagination-active-bg": "@brand-primary",
203
+ "@pagination-active-border": "@brand-primary",
204
+ "@pagination-disabled-color": "@gray-light",
205
+ "@pagination-disabled-bg": "#fff",
206
+ "@pagination-disabled-border": "#ddd",
207
+ "@pager-bg": "@pagination-bg",
208
+ "@pager-border": "@pagination-border",
209
+ "@pager-border-radius": "15px",
210
+ "@pager-hover-bg": "@pagination-hover-bg",
211
+ "@pager-active-bg": "@pagination-active-bg",
212
+ "@pager-active-color": "@pagination-active-color",
213
+ "@pager-disabled-color": "@pagination-disabled-color",
214
+ "@jumbotron-padding": "30px",
215
+ "@jumbotron-color": "inherit",
216
+ "@jumbotron-bg": "@gray-lighter",
217
+ "@jumbotron-heading-color": "inherit",
218
+ "@jumbotron-font-size": "ceil((@font-size-base * 1.5))",
219
+ "@jumbotron-heading-font-size": "ceil((@font-size-base * 4.5))",
220
+ "@state-success-text": "#3c763d",
221
+ "@state-success-bg": "#dff0d8",
222
+ "@state-success-border": "darken(spin(@state-success-bg, -10), 5%)",
223
+ "@state-info-text": "#31708f",
224
+ "@state-info-bg": "#d9edf7",
225
+ "@state-info-border": "darken(spin(@state-info-bg, -10), 7%)",
226
+ "@state-warning-text": "#8a6d3b",
227
+ "@state-warning-bg": "#fcf8e3",
228
+ "@state-warning-border": "darken(spin(@state-warning-bg, -10), 5%)",
229
+ "@state-danger-text": "#a94442",
230
+ "@state-danger-bg": "#f2dede",
231
+ "@state-danger-border": "darken(spin(@state-danger-bg, -10), 5%)",
232
+ "@tooltip-max-width": "200px",
233
+ "@tooltip-color": "#fff",
234
+ "@tooltip-bg": "#000",
235
+ "@tooltip-opacity": ".9",
236
+ "@tooltip-arrow-width": "5px",
237
+ "@tooltip-arrow-color": "@tooltip-bg",
238
+ "@popover-bg": "#fff",
239
+ "@popover-max-width": "276px",
240
+ "@popover-border-color": "rgba(0,0,0,.2)",
241
+ "@popover-fallback-border-color": "#ccc",
242
+ "@popover-title-bg": "darken(@popover-bg, 3%)",
243
+ "@popover-arrow-width": "10px",
244
+ "@popover-arrow-color": "@popover-bg",
245
+ "@popover-arrow-outer-width": "(@popover-arrow-width + 1)",
246
+ "@popover-arrow-outer-color": "fadein(@popover-border-color, 5%)",
247
+ "@popover-arrow-outer-fallback-color": "darken(@popover-fallback-border-color, 20%)",
248
+ "@label-default-bg": "@gray-light",
249
+ "@label-primary-bg": "@brand-primary",
250
+ "@label-success-bg": "@brand-success",
251
+ "@label-info-bg": "@brand-info",
252
+ "@label-warning-bg": "@brand-warning",
253
+ "@label-danger-bg": "@brand-danger",
254
+ "@label-color": "#fff",
255
+ "@label-link-hover-color": "#fff",
256
+ "@modal-inner-padding": "15px",
257
+ "@modal-title-padding": "15px",
258
+ "@modal-title-line-height": "@line-height-base",
259
+ "@modal-content-bg": "#fff",
260
+ "@modal-content-border-color": "rgba(0,0,0,.2)",
261
+ "@modal-content-fallback-border-color": "#999",
262
+ "@modal-backdrop-bg": "#000",
263
+ "@modal-backdrop-opacity": ".5",
264
+ "@modal-header-border-color": "#e5e5e5",
265
+ "@modal-footer-border-color": "@modal-header-border-color",
266
+ "@modal-lg": "900px",
267
+ "@modal-md": "600px",
268
+ "@modal-sm": "300px",
269
+ "@alert-padding": "15px",
270
+ "@alert-border-radius": "@border-radius-base",
271
+ "@alert-link-font-weight": "bold",
272
+ "@alert-success-bg": "@state-success-bg",
273
+ "@alert-success-text": "@state-success-text",
274
+ "@alert-success-border": "@state-success-border",
275
+ "@alert-info-bg": "@state-info-bg",
276
+ "@alert-info-text": "@state-info-text",
277
+ "@alert-info-border": "@state-info-border",
278
+ "@alert-warning-bg": "@state-warning-bg",
279
+ "@alert-warning-text": "@state-warning-text",
280
+ "@alert-warning-border": "@state-warning-border",
281
+ "@alert-danger-bg": "@state-danger-bg",
282
+ "@alert-danger-text": "@state-danger-text",
283
+ "@alert-danger-border": "@state-danger-border",
284
+ "@progress-bg": "#f5f5f5",
285
+ "@progress-bar-color": "#fff",
286
+ "@progress-border-radius": "@border-radius-base",
287
+ "@progress-bar-bg": "@brand-primary",
288
+ "@progress-bar-success-bg": "@brand-success",
289
+ "@progress-bar-warning-bg": "@brand-warning",
290
+ "@progress-bar-danger-bg": "@brand-danger",
291
+ "@progress-bar-info-bg": "@brand-info",
292
+ "@list-group-bg": "#fff",
293
+ "@list-group-border": "#ddd",
294
+ "@list-group-border-radius": "@border-radius-base",
295
+ "@list-group-hover-bg": "#f5f5f5",
296
+ "@list-group-active-color": "@component-active-color",
297
+ "@list-group-active-bg": "@component-active-bg",
298
+ "@list-group-active-border": "@list-group-active-bg",
299
+ "@list-group-active-text-color": "lighten(@list-group-active-bg, 40%)",
300
+ "@list-group-disabled-color": "@gray-light",
301
+ "@list-group-disabled-bg": "@gray-lighter",
302
+ "@list-group-disabled-text-color": "@list-group-disabled-color",
303
+ "@list-group-link-color": "#555",
304
+ "@list-group-link-hover-color": "@list-group-link-color",
305
+ "@list-group-link-heading-color": "#333",
306
+ "@panel-bg": "#fff",
307
+ "@panel-body-padding": "15px",
308
+ "@panel-heading-padding": "10px 15px",
309
+ "@panel-footer-padding": "@panel-heading-padding",
310
+ "@panel-border-radius": "@border-radius-base",
311
+ "@panel-inner-border": "#ddd",
312
+ "@panel-footer-bg": "#f5f5f5",
313
+ "@panel-default-text": "@gray-dark",
314
+ "@panel-default-border": "#ddd",
315
+ "@panel-default-heading-bg": "#f5f5f5",
316
+ "@panel-primary-text": "#fff",
317
+ "@panel-primary-border": "@brand-primary",
318
+ "@panel-primary-heading-bg": "@brand-primary",
319
+ "@panel-success-text": "@state-success-text",
320
+ "@panel-success-border": "@state-success-border",
321
+ "@panel-success-heading-bg": "@state-success-bg",
322
+ "@panel-info-text": "@state-info-text",
323
+ "@panel-info-border": "@state-info-border",
324
+ "@panel-info-heading-bg": "@state-info-bg",
325
+ "@panel-warning-text": "@state-warning-text",
326
+ "@panel-warning-border": "@state-warning-border",
327
+ "@panel-warning-heading-bg": "@state-warning-bg",
328
+ "@panel-danger-text": "@state-danger-text",
329
+ "@panel-danger-border": "@state-danger-border",
330
+ "@panel-danger-heading-bg": "@state-danger-bg",
331
+ "@thumbnail-padding": "4px",
332
+ "@thumbnail-bg": "@body-bg",
333
+ "@thumbnail-border": "#ddd",
334
+ "@thumbnail-border-radius": "@border-radius-base",
335
+ "@thumbnail-caption-color": "@text-color",
336
+ "@thumbnail-caption-padding": "9px",
337
+ "@well-bg": "#f5f5f5",
338
+ "@well-border": "darken(@well-bg, 7%)",
339
+ "@badge-color": "#fff",
340
+ "@badge-link-hover-color": "#fff",
341
+ "@badge-bg": "@gray-light",
342
+ "@badge-active-color": "@link-color",
343
+ "@badge-active-bg": "#fff",
344
+ "@badge-font-weight": "bold",
345
+ "@badge-line-height": "1",
346
+ "@badge-border-radius": "10px",
347
+ "@breadcrumb-padding-vertical": "8px",
348
+ "@breadcrumb-padding-horizontal": "15px",
349
+ "@breadcrumb-bg": "#f5f5f5",
350
+ "@breadcrumb-color": "#ccc",
351
+ "@breadcrumb-active-color": "@gray-light",
352
+ "@breadcrumb-separator": "\"/\"",
353
+ "@carousel-text-shadow": "0 1px 2px rgba(0,0,0,.6)",
354
+ "@carousel-control-color": "#fff",
355
+ "@carousel-control-width": "15%",
356
+ "@carousel-control-opacity": ".5",
357
+ "@carousel-control-font-size": "20px",
358
+ "@carousel-indicator-active-bg": "#fff",
359
+ "@carousel-indicator-border-color": "#fff",
360
+ "@carousel-caption-color": "#fff",
361
+ "@close-font-weight": "bold",
362
+ "@close-color": "#000",
363
+ "@close-text-shadow": "0 1px 0 #fff",
364
+ "@code-color": "#c7254e",
365
+ "@code-bg": "#f9f2f4",
366
+ "@kbd-color": "#fff",
367
+ "@kbd-bg": "#333",
368
+ "@pre-bg": "#f5f5f5",
369
+ "@pre-color": "@gray-dark",
370
+ "@pre-border-color": "#ccc",
371
+ "@pre-scrollable-max-height": "340px",
372
+ "@component-offset-horizontal": "180px",
373
+ "@text-muted": "@gray-light",
374
+ "@abbr-border-color": "@gray-light",
375
+ "@headings-small-color": "@gray-light",
376
+ "@blockquote-small-color": "@gray-light",
377
+ "@blockquote-font-size": "(@font-size-base * 1.25)",
378
+ "@blockquote-border-color": "@gray-lighter",
379
+ "@page-header-border-color": "@gray-lighter",
380
+ "@dl-horizontal-offset": "@component-offset-horizontal",
381
+ "@dl-horizontal-breakpoint": "@grid-float-breakpoint",
382
+ "@hr-border": "@gray-lighter"
383
+ },
384
+ "css": [
385
+ "type.less",
386
+ "code.less",
387
+ "grid.less",
388
+ "tables.less",
389
+ "forms.less",
390
+ "buttons.less",
391
+ "responsive-utilities.less",
392
+ "glyphicons.less",
393
+ "button-groups.less",
394
+ "input-groups.less",
395
+ "navs.less",
396
+ "navbar.less",
397
+ "pagination.less",
398
+ "pager.less",
399
+ "labels.less",
400
+ "badges.less",
401
+ "alerts.less",
402
+ "progress-bars.less",
403
+ "media.less",
404
+ "list-group.less",
405
+ "panels.less",
406
+ "wells.less",
407
+ "close.less"
408
+ ],
409
+ "js": [],
410
+ "customizerUrl": "http://getbootstrap.com/customize/?id=5f025e41de9e0cc8ec79557bfbbdac39"
411
+ }