shopify-cli 1.3.0 → 1.6.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.
- checksums.yaml +4 -4
- data/.github/CODEOWNERS +2 -2
- data/.github/CONTRIBUTING.md +9 -1
- data/.github/PULL_REQUEST_TEMPLATE.md +10 -1
- data/.github/workflows/release.yml +61 -0
- data/.github/workflows/triage.yml +22 -0
- data/.gitignore +0 -1
- data/.rubocop.yml +61 -8
- data/.rubocop_todo.yml +11 -0
- data/.travis.yml +1 -0
- data/CHANGELOG.md +30 -0
- data/Gemfile +3 -2
- data/Gemfile.lock +39 -37
- data/README.md +39 -7
- data/RELEASING.md +19 -29
- data/Rakefile +2 -0
- data/dev.yml +2 -2
- data/docs/_config.yml +1 -18
- data/docs/app/node/commands/index.md +2 -80
- data/docs/app/node/index.md +2 -33
- data/docs/app/rails/commands/index.md +2 -78
- data/docs/app/rails/index.md +2 -34
- data/docs/core/index.md +2 -84
- data/docs/getting-started/index.md +2 -25
- data/docs/getting-started/install/index.md +1 -118
- data/docs/getting-started/migrate/index.md +2 -94
- data/docs/getting-started/uninstall/index.md +2 -35
- data/docs/getting-started/upgrade/index.md +2 -39
- data/docs/help/start-app/index.md +2 -4
- data/docs/index.md +2 -24
- data/install.sh +1 -1
- data/lib/project_types/extension/cli.rb +21 -11
- data/lib/project_types/extension/commands/extension_command.rb +2 -2
- data/lib/project_types/extension/features/argo.rb +117 -0
- data/lib/project_types/extension/forms/create.rb +2 -2
- data/lib/project_types/extension/models/specification.rb +35 -0
- data/lib/project_types/extension/models/specification_handlers/checkout_post_purchase.rb +19 -0
- data/lib/project_types/extension/models/specification_handlers/default.rb +67 -0
- data/lib/project_types/extension/models/specifications.rb +77 -0
- data/lib/project_types/extension/tasks/configure_features.rb +52 -0
- data/lib/project_types/extension/tasks/fetch_specifications.rb +38 -0
- data/lib/project_types/node/cli.rb +4 -1
- data/lib/project_types/node/commands/connect.rb +15 -0
- data/lib/project_types/node/commands/create.rb +10 -4
- data/lib/project_types/node/commands/generate.rb +2 -11
- data/lib/project_types/node/messages/messages.rb +16 -50
- data/lib/project_types/rails/cli.rb +4 -1
- data/lib/project_types/rails/commands/connect.rb +15 -0
- data/lib/project_types/rails/commands/create.rb +15 -12
- data/lib/project_types/rails/forms/create.rb +1 -1
- data/lib/project_types/rails/gem.rb +1 -1
- data/lib/project_types/rails/messages/messages.rb +8 -5
- data/lib/project_types/script/cli.rb +9 -5
- data/lib/project_types/script/commands/create.rb +6 -4
- data/lib/project_types/script/commands/enable.rb +12 -4
- data/lib/project_types/script/commands/push.rb +5 -13
- data/lib/project_types/script/config/extension_points.yml +17 -12
- data/lib/project_types/script/errors.rb +21 -0
- data/lib/project_types/script/forms/create.rb +26 -2
- data/lib/project_types/script/graphql/app_script_update_or_create.graphql +10 -1
- data/lib/project_types/script/layers/application/build_script.rb +18 -17
- data/lib/project_types/script/layers/application/create_script.rb +12 -10
- data/lib/project_types/script/layers/application/extension_points.rb +24 -0
- data/lib/project_types/script/layers/application/push_script.rb +18 -16
- data/lib/project_types/script/layers/domain/errors.rb +7 -0
- data/lib/project_types/script/layers/domain/extension_point.rb +62 -7
- data/lib/project_types/script/layers/domain/metadata.rb +55 -0
- data/lib/project_types/script/layers/domain/push_package.rb +25 -6
- data/lib/project_types/script/layers/infrastructure/assemblyscript_project_creator.rb +17 -52
- data/lib/project_types/script/layers/infrastructure/assemblyscript_task_runner.rb +42 -11
- data/lib/project_types/script/layers/infrastructure/errors.rb +16 -0
- data/lib/project_types/script/layers/infrastructure/extension_point_repository.rb +10 -4
- data/lib/project_types/script/layers/infrastructure/project_creator.rb +2 -1
- data/lib/project_types/script/layers/infrastructure/push_package_repository.rb +25 -13
- data/lib/project_types/script/layers/infrastructure/rust_project_creator.rb +72 -0
- data/lib/project_types/script/layers/infrastructure/rust_task_runner.rb +59 -0
- data/lib/project_types/script/layers/infrastructure/script_service.rb +9 -1
- data/lib/project_types/script/layers/infrastructure/task_runner.rb +4 -3
- data/lib/project_types/script/messages/messages.rb +55 -4
- data/lib/project_types/script/script_project.rb +25 -16
- data/lib/project_types/script/ui/error_handler.rb +59 -1
- data/lib/project_types/theme/cli.rb +40 -0
- data/lib/project_types/theme/commands/connect.rb +54 -0
- data/lib/project_types/theme/commands/create.rb +48 -0
- data/lib/project_types/theme/commands/deploy.rb +38 -0
- data/lib/project_types/theme/commands/generate.rb +20 -0
- data/lib/project_types/theme/commands/generate/env.rb +79 -0
- data/lib/project_types/theme/commands/push.rb +55 -0
- data/lib/project_types/theme/commands/serve.rb +31 -0
- data/lib/project_types/theme/forms/connect.rb +34 -0
- data/lib/project_types/theme/forms/create.rb +22 -0
- data/lib/project_types/theme/messages/messages.rb +147 -0
- data/lib/project_types/theme/tasks/ensure_themekit_installed.rb +78 -0
- data/lib/project_types/theme/themekit.rb +113 -0
- data/lib/shopify-cli/admin_api.rb +42 -2
- data/lib/shopify-cli/api.rb +34 -33
- data/lib/shopify-cli/commands/config.rb +24 -0
- data/lib/shopify-cli/commands/connect.rb +32 -15
- data/lib/shopify-cli/commands/system.rb +10 -1
- data/lib/shopify-cli/context.rb +23 -2
- data/lib/shopify-cli/core/entry_point.rb +1 -1
- data/lib/shopify-cli/core/monorail.rb +6 -4
- data/lib/shopify-cli/feature.rb +0 -2
- data/lib/shopify-cli/http_request.rb +27 -0
- data/lib/shopify-cli/js_deps.rb +1 -1
- data/lib/shopify-cli/messages/messages.rb +31 -7
- data/lib/shopify-cli/method_object.rb +104 -0
- data/lib/shopify-cli/partners_api.rb +25 -3
- data/lib/shopify-cli/process_supervision.rb +1 -1
- data/lib/shopify-cli/project.rb +12 -8
- data/lib/shopify-cli/project_type.rb +18 -2
- data/lib/shopify-cli/resolve_constant.rb +25 -0
- data/lib/shopify-cli/result.rb +432 -0
- data/lib/shopify-cli/shopifolk.rb +87 -0
- data/lib/shopify-cli/task.rb +8 -0
- data/lib/shopify-cli/tasks/create_api_client.rb +13 -2
- data/lib/shopify-cli/tasks/ensure_env.rb +3 -0
- data/lib/shopify-cli/tasks/select_org_and_shop.rb +10 -5
- data/lib/shopify-cli/tunnel.rb +8 -2
- data/lib/shopify-cli/version.rb +1 -1
- data/lib/shopify_cli.rb +5 -1
- data/shopify.fish +1 -1
- data/shopify.sh +1 -1
- data/vendor/deps/cli-kit/REVISION +1 -1
- data/vendor/deps/cli-kit/lib/cli/kit/logger.rb +2 -2
- data/vendor/deps/cli-kit/lib/cli/kit/system.rb +3 -3
- data/vendor/deps/cli-ui/REVISION +1 -1
- data/vendor/deps/cli-ui/lib/cli/ui.rb +26 -22
- data/vendor/deps/cli-ui/lib/cli/ui/ansi.rb +4 -6
- data/vendor/deps/cli-ui/lib/cli/ui/frame.rb +3 -3
- data/vendor/deps/cli-ui/lib/cli/ui/frame/frame_stack.rb +8 -9
- data/vendor/deps/cli-ui/lib/cli/ui/frame/frame_style.rb +1 -1
- data/vendor/deps/cli-ui/lib/cli/ui/glyph.rb +1 -0
- data/vendor/deps/cli-ui/lib/cli/ui/printer.rb +15 -3
- data/vendor/deps/cli-ui/lib/cli/ui/prompt/interactive_options.rb +4 -11
- data/vendor/deps/cli-ui/lib/cli/ui/spinner.rb +3 -5
- data/vendor/deps/cli-ui/lib/cli/ui/terminal.rb +10 -10
- data/vendor/deps/cli-ui/lib/cli/ui/version.rb +1 -1
- data/vendor/deps/cli-ui/lib/cli/ui/wrap.rb +56 -0
- data/vendor/deps/webrick/.gitignore +9 -0
- data/vendor/deps/webrick/Gemfile +3 -0
- data/vendor/deps/webrick/LICENSE.txt +22 -0
- data/vendor/deps/webrick/README.md +61 -0
- data/vendor/deps/webrick/Rakefile +10 -0
- data/vendor/deps/webrick/lib/webrick.rb +232 -0
- data/vendor/deps/webrick/lib/webrick/accesslog.rb +157 -0
- data/vendor/deps/webrick/lib/webrick/cgi.rb +313 -0
- data/vendor/deps/webrick/lib/webrick/compat.rb +36 -0
- data/vendor/deps/webrick/lib/webrick/config.rb +158 -0
- data/vendor/deps/webrick/lib/webrick/cookie.rb +172 -0
- data/vendor/deps/webrick/lib/webrick/htmlutils.rb +30 -0
- data/vendor/deps/webrick/lib/webrick/httpauth.rb +96 -0
- data/vendor/deps/webrick/lib/webrick/httpauth/authenticator.rb +117 -0
- data/vendor/deps/webrick/lib/webrick/httpauth/basicauth.rb +116 -0
- data/vendor/deps/webrick/lib/webrick/httpauth/digestauth.rb +395 -0
- data/vendor/deps/webrick/lib/webrick/httpauth/htdigest.rb +132 -0
- data/vendor/deps/webrick/lib/webrick/httpauth/htgroup.rb +97 -0
- data/vendor/deps/webrick/lib/webrick/httpauth/htpasswd.rb +158 -0
- data/vendor/deps/webrick/lib/webrick/httpauth/userdb.rb +53 -0
- data/vendor/deps/webrick/lib/webrick/httpproxy.rb +354 -0
- data/vendor/deps/webrick/lib/webrick/httprequest.rb +636 -0
- data/vendor/deps/webrick/lib/webrick/httpresponse.rb +564 -0
- data/vendor/deps/webrick/lib/webrick/https.rb +152 -0
- data/vendor/deps/webrick/lib/webrick/httpserver.rb +294 -0
- data/vendor/deps/webrick/lib/webrick/httpservlet.rb +23 -0
- data/vendor/deps/webrick/lib/webrick/httpservlet/abstract.rb +152 -0
- data/vendor/deps/webrick/lib/webrick/httpservlet/cgi_runner.rb +47 -0
- data/vendor/deps/webrick/lib/webrick/httpservlet/cgihandler.rb +126 -0
- data/vendor/deps/webrick/lib/webrick/httpservlet/erbhandler.rb +88 -0
- data/vendor/deps/webrick/lib/webrick/httpservlet/filehandler.rb +552 -0
- data/vendor/deps/webrick/lib/webrick/httpservlet/prochandler.rb +47 -0
- data/vendor/deps/webrick/lib/webrick/httpstatus.rb +194 -0
- data/vendor/deps/webrick/lib/webrick/httputils.rb +512 -0
- data/vendor/deps/webrick/lib/webrick/httpversion.rb +76 -0
- data/vendor/deps/webrick/lib/webrick/log.rb +156 -0
- data/vendor/deps/webrick/lib/webrick/server.rb +381 -0
- data/vendor/deps/webrick/lib/webrick/ssl.rb +215 -0
- data/vendor/deps/webrick/lib/webrick/utils.rb +265 -0
- data/vendor/deps/webrick/lib/webrick/version.rb +18 -0
- data/vendor/deps/webrick/webrick.gemspec +74 -0
- metadata +77 -27
- data/docs/Gemfile +0 -5
- data/docs/Gemfile.lock +0 -258
- data/docs/_data/nav.yml +0 -35
- data/docs/_includes/footer.html +0 -15
- data/docs/_includes/head.html +0 -19
- data/docs/_includes/sidebar_nav.html +0 -22
- data/docs/_includes/toc.html +0 -112
- data/docs/_layouts/default.html +0 -79
- data/docs/css/docs.css +0 -157
- data/docs/images/header.png +0 -0
- data/docs/installing-ruby.md +0 -28
- data/lib/project_types/extension/features/argo/admin.rb +0 -20
- data/lib/project_types/extension/features/argo/base.rb +0 -129
- data/lib/project_types/extension/features/argo/checkout.rb +0 -20
- data/lib/project_types/extension/models/type.rb +0 -81
- data/lib/project_types/extension/models/types/checkout_post_purchase.rb +0 -23
- data/lib/project_types/extension/models/types/product_subscription.rb +0 -24
- data/lib/project_types/node/commands/generate/billing.rb +0 -39
- data/lib/project_types/node/commands/generate/page.rb +0 -59
- data/lib/project_types/node/commands/generate/webhook.rb +0 -37
- data/lib/project_types/script/layers/domain/script.rb +0 -18
- data/lib/project_types/script/layers/infrastructure/assemblyscript_tsconfig.rb +0 -38
- data/lib/project_types/script/layers/infrastructure/script_repository.rb +0 -59
- data/lib/project_types/script/templates/ts/as-pect.config.js +0 -27
- data/lib/project_types/script/templates/ts/as-pect.d.ts +0 -1
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
#
|
|
3
|
+
# compat.rb -- cross platform compatibility
|
|
4
|
+
#
|
|
5
|
+
# Author: IPR -- Internet Programming with Ruby -- writers
|
|
6
|
+
# Copyright (c) 2002 GOTOU Yuuzou
|
|
7
|
+
# Copyright (c) 2002 Internet Programming with Ruby writers. All rights
|
|
8
|
+
# reserved.
|
|
9
|
+
#
|
|
10
|
+
# $IPR: compat.rb,v 1.6 2002/10/01 17:16:32 gotoyuzo Exp $
|
|
11
|
+
|
|
12
|
+
##
|
|
13
|
+
# System call error module used by webrick for cross platform compatibility.
|
|
14
|
+
#
|
|
15
|
+
# EPROTO:: protocol error
|
|
16
|
+
# ECONNRESET:: remote host reset the connection request
|
|
17
|
+
# ECONNABORTED:: Client sent TCP reset (RST) before server has accepted the
|
|
18
|
+
# connection requested by client.
|
|
19
|
+
#
|
|
20
|
+
module Errno
|
|
21
|
+
##
|
|
22
|
+
# Protocol error.
|
|
23
|
+
|
|
24
|
+
class EPROTO < SystemCallError; end
|
|
25
|
+
|
|
26
|
+
##
|
|
27
|
+
# Remote host reset the connection request.
|
|
28
|
+
|
|
29
|
+
class ECONNRESET < SystemCallError; end
|
|
30
|
+
|
|
31
|
+
##
|
|
32
|
+
# Client sent TCP reset (RST) before server has accepted the connection
|
|
33
|
+
# requested by client.
|
|
34
|
+
|
|
35
|
+
class ECONNABORTED < SystemCallError; end
|
|
36
|
+
end
|
|
@@ -0,0 +1,158 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
#
|
|
3
|
+
# config.rb -- Default configurations.
|
|
4
|
+
#
|
|
5
|
+
# Author: IPR -- Internet Programming with Ruby -- writers
|
|
6
|
+
# Copyright (c) 2000, 2001 TAKAHASHI Masayoshi, GOTOU Yuuzou
|
|
7
|
+
# Copyright (c) 2003 Internet Programming with Ruby writers. All rights
|
|
8
|
+
# reserved.
|
|
9
|
+
#
|
|
10
|
+
# $IPR: config.rb,v 1.52 2003/07/22 19:20:42 gotoyuzo Exp $
|
|
11
|
+
|
|
12
|
+
require_relative 'version'
|
|
13
|
+
require_relative 'httpversion'
|
|
14
|
+
require_relative 'httputils'
|
|
15
|
+
require_relative 'utils'
|
|
16
|
+
require_relative 'log'
|
|
17
|
+
|
|
18
|
+
module WEBrick
|
|
19
|
+
module Config
|
|
20
|
+
LIBDIR = File::dirname(__FILE__) # :nodoc:
|
|
21
|
+
|
|
22
|
+
# for GenericServer
|
|
23
|
+
General = Hash.new { |hash, key|
|
|
24
|
+
case key
|
|
25
|
+
when :ServerName
|
|
26
|
+
hash[key] = Utils.getservername
|
|
27
|
+
else
|
|
28
|
+
nil
|
|
29
|
+
end
|
|
30
|
+
}.update(
|
|
31
|
+
:BindAddress => nil, # "0.0.0.0" or "::" or nil
|
|
32
|
+
:Port => nil, # users MUST specify this!!
|
|
33
|
+
:MaxClients => 100, # maximum number of the concurrent connections
|
|
34
|
+
:ServerType => nil, # default: WEBrick::SimpleServer
|
|
35
|
+
:Logger => nil, # default: WEBrick::Log.new
|
|
36
|
+
:ServerSoftware => "WEBrick/#{WEBrick::VERSION} " +
|
|
37
|
+
"(Ruby/#{RUBY_VERSION}/#{RUBY_RELEASE_DATE})",
|
|
38
|
+
:TempDir => ENV['TMPDIR']||ENV['TMP']||ENV['TEMP']||'/tmp',
|
|
39
|
+
:DoNotListen => false,
|
|
40
|
+
:StartCallback => nil,
|
|
41
|
+
:StopCallback => nil,
|
|
42
|
+
:AcceptCallback => nil,
|
|
43
|
+
:DoNotReverseLookup => true,
|
|
44
|
+
:ShutdownSocketWithoutClose => false,
|
|
45
|
+
)
|
|
46
|
+
|
|
47
|
+
# for HTTPServer, HTTPRequest, HTTPResponse ...
|
|
48
|
+
HTTP = General.dup.update(
|
|
49
|
+
:Port => 80,
|
|
50
|
+
:RequestTimeout => 30,
|
|
51
|
+
:HTTPVersion => HTTPVersion.new("1.1"),
|
|
52
|
+
:AccessLog => nil,
|
|
53
|
+
:MimeTypes => HTTPUtils::DefaultMimeTypes,
|
|
54
|
+
:DirectoryIndex => ["index.html","index.htm","index.cgi","index.rhtml"],
|
|
55
|
+
:DocumentRoot => nil,
|
|
56
|
+
:DocumentRootOptions => { :FancyIndexing => true },
|
|
57
|
+
:RequestCallback => nil,
|
|
58
|
+
:ServerAlias => nil,
|
|
59
|
+
:InputBufferSize => 65536, # input buffer size in reading request body
|
|
60
|
+
:OutputBufferSize => 65536, # output buffer size in sending File or IO
|
|
61
|
+
|
|
62
|
+
# for HTTPProxyServer
|
|
63
|
+
:ProxyAuthProc => nil,
|
|
64
|
+
:ProxyContentHandler => nil,
|
|
65
|
+
:ProxyVia => true,
|
|
66
|
+
:ProxyTimeout => true,
|
|
67
|
+
:ProxyURI => nil,
|
|
68
|
+
|
|
69
|
+
:CGIInterpreter => nil,
|
|
70
|
+
:CGIPathEnv => nil,
|
|
71
|
+
|
|
72
|
+
# workaround: if Request-URIs contain 8bit chars,
|
|
73
|
+
# they should be escaped before calling of URI::parse().
|
|
74
|
+
:Escape8bitURI => false
|
|
75
|
+
)
|
|
76
|
+
|
|
77
|
+
##
|
|
78
|
+
# Default configuration for WEBrick::HTTPServlet::FileHandler
|
|
79
|
+
#
|
|
80
|
+
# :AcceptableLanguages::
|
|
81
|
+
# Array of languages allowed for accept-language. There is no default
|
|
82
|
+
# :DirectoryCallback::
|
|
83
|
+
# Allows preprocessing of directory requests. There is no default
|
|
84
|
+
# callback.
|
|
85
|
+
# :FancyIndexing::
|
|
86
|
+
# If true, show an index for directories. The default is true.
|
|
87
|
+
# :FileCallback::
|
|
88
|
+
# Allows preprocessing of file requests. There is no default callback.
|
|
89
|
+
# :HandlerCallback::
|
|
90
|
+
# Allows preprocessing of requests. There is no default callback.
|
|
91
|
+
# :HandlerTable::
|
|
92
|
+
# Maps file suffixes to file handlers. DefaultFileHandler is used by
|
|
93
|
+
# default but any servlet can be used.
|
|
94
|
+
# :NondisclosureName::
|
|
95
|
+
# Do not show files matching this array of globs. .ht* and *~ are
|
|
96
|
+
# excluded by default.
|
|
97
|
+
# :UserDir::
|
|
98
|
+
# Directory inside ~user to serve content from for /~user requests.
|
|
99
|
+
# Only works if mounted on /. Disabled by default.
|
|
100
|
+
|
|
101
|
+
FileHandler = {
|
|
102
|
+
:NondisclosureName => [".ht*", "*~"],
|
|
103
|
+
:FancyIndexing => false,
|
|
104
|
+
:HandlerTable => {},
|
|
105
|
+
:HandlerCallback => nil,
|
|
106
|
+
:DirectoryCallback => nil,
|
|
107
|
+
:FileCallback => nil,
|
|
108
|
+
:UserDir => nil, # e.g. "public_html"
|
|
109
|
+
:AcceptableLanguages => [] # ["en", "ja", ... ]
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
##
|
|
113
|
+
# Default configuration for WEBrick::HTTPAuth::BasicAuth
|
|
114
|
+
#
|
|
115
|
+
# :AutoReloadUserDB:: Reload the user database provided by :UserDB
|
|
116
|
+
# automatically?
|
|
117
|
+
|
|
118
|
+
BasicAuth = {
|
|
119
|
+
:AutoReloadUserDB => true,
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
##
|
|
123
|
+
# Default configuration for WEBrick::HTTPAuth::DigestAuth.
|
|
124
|
+
#
|
|
125
|
+
# :Algorithm:: MD5, MD5-sess (default), SHA1, SHA1-sess
|
|
126
|
+
# :Domain:: An Array of URIs that define the protected space
|
|
127
|
+
# :Qop:: 'auth' for authentication, 'auth-int' for integrity protection or
|
|
128
|
+
# both
|
|
129
|
+
# :UseOpaque:: Should the server send opaque values to the client? This
|
|
130
|
+
# helps prevent replay attacks.
|
|
131
|
+
# :CheckNc:: Should the server check the nonce count? This helps the
|
|
132
|
+
# server detect replay attacks.
|
|
133
|
+
# :UseAuthenticationInfoHeader:: Should the server send an
|
|
134
|
+
# AuthenticationInfo header?
|
|
135
|
+
# :AutoReloadUserDB:: Reload the user database provided by :UserDB
|
|
136
|
+
# automatically?
|
|
137
|
+
# :NonceExpirePeriod:: How long should we store used nonces? Default is
|
|
138
|
+
# 30 minutes.
|
|
139
|
+
# :NonceExpireDelta:: How long is a nonce valid? Default is 1 minute
|
|
140
|
+
# :InternetExplorerHack:: Hack which allows Internet Explorer to work.
|
|
141
|
+
# :OperaHack:: Hack which allows Opera to work.
|
|
142
|
+
|
|
143
|
+
DigestAuth = {
|
|
144
|
+
:Algorithm => 'MD5-sess', # or 'MD5'
|
|
145
|
+
:Domain => nil, # an array includes domain names.
|
|
146
|
+
:Qop => [ 'auth' ], # 'auth' or 'auth-int' or both.
|
|
147
|
+
:UseOpaque => true,
|
|
148
|
+
:UseNextNonce => false,
|
|
149
|
+
:CheckNc => false,
|
|
150
|
+
:UseAuthenticationInfoHeader => true,
|
|
151
|
+
:AutoReloadUserDB => true,
|
|
152
|
+
:NonceExpirePeriod => 30*60,
|
|
153
|
+
:NonceExpireDelta => 60,
|
|
154
|
+
:InternetExplorerHack => true,
|
|
155
|
+
:OperaHack => true,
|
|
156
|
+
}
|
|
157
|
+
end
|
|
158
|
+
end
|
|
@@ -0,0 +1,172 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
#
|
|
3
|
+
# cookie.rb -- Cookie class
|
|
4
|
+
#
|
|
5
|
+
# Author: IPR -- Internet Programming with Ruby -- writers
|
|
6
|
+
# Copyright (c) 2000, 2001 TAKAHASHI Masayoshi, GOTOU Yuuzou
|
|
7
|
+
# Copyright (c) 2002 Internet Programming with Ruby writers. All rights
|
|
8
|
+
# reserved.
|
|
9
|
+
#
|
|
10
|
+
# $IPR: cookie.rb,v 1.16 2002/09/21 12:23:35 gotoyuzo Exp $
|
|
11
|
+
|
|
12
|
+
require 'time'
|
|
13
|
+
require_relative 'httputils'
|
|
14
|
+
|
|
15
|
+
module WEBrick
|
|
16
|
+
|
|
17
|
+
##
|
|
18
|
+
# Processes HTTP cookies
|
|
19
|
+
|
|
20
|
+
class Cookie
|
|
21
|
+
|
|
22
|
+
##
|
|
23
|
+
# The cookie name
|
|
24
|
+
|
|
25
|
+
attr_reader :name
|
|
26
|
+
|
|
27
|
+
##
|
|
28
|
+
# The cookie value
|
|
29
|
+
|
|
30
|
+
attr_accessor :value
|
|
31
|
+
|
|
32
|
+
##
|
|
33
|
+
# The cookie version
|
|
34
|
+
|
|
35
|
+
attr_accessor :version
|
|
36
|
+
|
|
37
|
+
##
|
|
38
|
+
# The cookie domain
|
|
39
|
+
attr_accessor :domain
|
|
40
|
+
|
|
41
|
+
##
|
|
42
|
+
# The cookie path
|
|
43
|
+
|
|
44
|
+
attr_accessor :path
|
|
45
|
+
|
|
46
|
+
##
|
|
47
|
+
# Is this a secure cookie?
|
|
48
|
+
|
|
49
|
+
attr_accessor :secure
|
|
50
|
+
|
|
51
|
+
##
|
|
52
|
+
# The cookie comment
|
|
53
|
+
|
|
54
|
+
attr_accessor :comment
|
|
55
|
+
|
|
56
|
+
##
|
|
57
|
+
# The maximum age of the cookie
|
|
58
|
+
|
|
59
|
+
attr_accessor :max_age
|
|
60
|
+
|
|
61
|
+
#attr_accessor :comment_url, :discard, :port
|
|
62
|
+
|
|
63
|
+
##
|
|
64
|
+
# Creates a new cookie with the given +name+ and +value+
|
|
65
|
+
|
|
66
|
+
def initialize(name, value)
|
|
67
|
+
@name = name
|
|
68
|
+
@value = value
|
|
69
|
+
@version = 0 # Netscape Cookie
|
|
70
|
+
|
|
71
|
+
@domain = @path = @secure = @comment = @max_age =
|
|
72
|
+
@expires = @comment_url = @discard = @port = nil
|
|
73
|
+
end
|
|
74
|
+
|
|
75
|
+
##
|
|
76
|
+
# Sets the cookie expiration to the time +t+. The expiration time may be
|
|
77
|
+
# a false value to disable expiration or a Time or HTTP format time string
|
|
78
|
+
# to set the expiration date.
|
|
79
|
+
|
|
80
|
+
def expires=(t)
|
|
81
|
+
@expires = t && (t.is_a?(Time) ? t.httpdate : t.to_s)
|
|
82
|
+
end
|
|
83
|
+
|
|
84
|
+
##
|
|
85
|
+
# Retrieves the expiration time as a Time
|
|
86
|
+
|
|
87
|
+
def expires
|
|
88
|
+
@expires && Time.parse(@expires)
|
|
89
|
+
end
|
|
90
|
+
|
|
91
|
+
##
|
|
92
|
+
# The cookie string suitable for use in an HTTP header
|
|
93
|
+
|
|
94
|
+
def to_s
|
|
95
|
+
ret = +""
|
|
96
|
+
ret << @name << "=" << @value
|
|
97
|
+
ret << "; " << "Version=" << @version.to_s if @version > 0
|
|
98
|
+
ret << "; " << "Domain=" << @domain if @domain
|
|
99
|
+
ret << "; " << "Expires=" << @expires if @expires
|
|
100
|
+
ret << "; " << "Max-Age=" << @max_age.to_s if @max_age
|
|
101
|
+
ret << "; " << "Comment=" << @comment if @comment
|
|
102
|
+
ret << "; " << "Path=" << @path if @path
|
|
103
|
+
ret << "; " << "Secure" if @secure
|
|
104
|
+
ret
|
|
105
|
+
end
|
|
106
|
+
|
|
107
|
+
##
|
|
108
|
+
# Parses a Cookie field sent from the user-agent. Returns an array of
|
|
109
|
+
# cookies.
|
|
110
|
+
|
|
111
|
+
def self.parse(str)
|
|
112
|
+
if str
|
|
113
|
+
ret = []
|
|
114
|
+
cookie = nil
|
|
115
|
+
ver = 0
|
|
116
|
+
str.split(/;\s+/).each{|x|
|
|
117
|
+
key, val = x.split(/=/,2)
|
|
118
|
+
val = val ? HTTPUtils::dequote(val) : ""
|
|
119
|
+
case key
|
|
120
|
+
when "$Version"; ver = val.to_i
|
|
121
|
+
when "$Path"; cookie.path = val
|
|
122
|
+
when "$Domain"; cookie.domain = val
|
|
123
|
+
when "$Port"; cookie.port = val
|
|
124
|
+
else
|
|
125
|
+
ret << cookie if cookie
|
|
126
|
+
cookie = self.new(key, val)
|
|
127
|
+
cookie.version = ver
|
|
128
|
+
end
|
|
129
|
+
}
|
|
130
|
+
ret << cookie if cookie
|
|
131
|
+
ret
|
|
132
|
+
end
|
|
133
|
+
end
|
|
134
|
+
|
|
135
|
+
##
|
|
136
|
+
# Parses the cookie in +str+
|
|
137
|
+
|
|
138
|
+
def self.parse_set_cookie(str)
|
|
139
|
+
cookie_elem = str.split(/;/)
|
|
140
|
+
first_elem = cookie_elem.shift
|
|
141
|
+
first_elem.strip!
|
|
142
|
+
key, value = first_elem.split(/=/, 2)
|
|
143
|
+
cookie = new(key, HTTPUtils.dequote(value))
|
|
144
|
+
cookie_elem.each{|pair|
|
|
145
|
+
pair.strip!
|
|
146
|
+
key, value = pair.split(/=/, 2)
|
|
147
|
+
if value
|
|
148
|
+
value = HTTPUtils.dequote(value.strip)
|
|
149
|
+
end
|
|
150
|
+
case key.downcase
|
|
151
|
+
when "domain" then cookie.domain = value
|
|
152
|
+
when "path" then cookie.path = value
|
|
153
|
+
when "expires" then cookie.expires = value
|
|
154
|
+
when "max-age" then cookie.max_age = Integer(value)
|
|
155
|
+
when "comment" then cookie.comment = value
|
|
156
|
+
when "version" then cookie.version = Integer(value)
|
|
157
|
+
when "secure" then cookie.secure = true
|
|
158
|
+
end
|
|
159
|
+
}
|
|
160
|
+
return cookie
|
|
161
|
+
end
|
|
162
|
+
|
|
163
|
+
##
|
|
164
|
+
# Parses the cookies in +str+
|
|
165
|
+
|
|
166
|
+
def self.parse_set_cookies(str)
|
|
167
|
+
return str.split(/,(?=[^;,]*=)|,$/).collect{|c|
|
|
168
|
+
parse_set_cookie(c)
|
|
169
|
+
}
|
|
170
|
+
end
|
|
171
|
+
end
|
|
172
|
+
end
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
#--
|
|
3
|
+
# htmlutils.rb -- HTMLUtils Module
|
|
4
|
+
#
|
|
5
|
+
# Author: IPR -- Internet Programming with Ruby -- writers
|
|
6
|
+
# Copyright (c) 2000, 2001 TAKAHASHI Masayoshi, GOTOU Yuuzou
|
|
7
|
+
# Copyright (c) 2002 Internet Programming with Ruby writers. All rights
|
|
8
|
+
# reserved.
|
|
9
|
+
#
|
|
10
|
+
# $IPR: htmlutils.rb,v 1.7 2002/09/21 12:23:35 gotoyuzo Exp $
|
|
11
|
+
|
|
12
|
+
module WEBrick
|
|
13
|
+
module HTMLUtils
|
|
14
|
+
|
|
15
|
+
##
|
|
16
|
+
# Escapes &, ", > and < in +string+
|
|
17
|
+
|
|
18
|
+
def escape(string)
|
|
19
|
+
return "" unless string
|
|
20
|
+
str = string.b
|
|
21
|
+
str.gsub!(/&/n, '&')
|
|
22
|
+
str.gsub!(/\"/n, '"')
|
|
23
|
+
str.gsub!(/>/n, '>')
|
|
24
|
+
str.gsub!(/</n, '<')
|
|
25
|
+
str.force_encoding(string.encoding)
|
|
26
|
+
end
|
|
27
|
+
module_function :escape
|
|
28
|
+
|
|
29
|
+
end
|
|
30
|
+
end
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
#
|
|
3
|
+
# httpauth.rb -- HTTP access authentication
|
|
4
|
+
#
|
|
5
|
+
# Author: IPR -- Internet Programming with Ruby -- writers
|
|
6
|
+
# Copyright (c) 2000, 2001 TAKAHASHI Masayoshi, GOTOU Yuuzou
|
|
7
|
+
# Copyright (c) 2002 Internet Programming with Ruby writers. All rights
|
|
8
|
+
# reserved.
|
|
9
|
+
#
|
|
10
|
+
# $IPR: httpauth.rb,v 1.14 2003/07/22 19:20:42 gotoyuzo Exp $
|
|
11
|
+
|
|
12
|
+
require_relative 'httpauth/basicauth'
|
|
13
|
+
require_relative 'httpauth/digestauth'
|
|
14
|
+
require_relative 'httpauth/htpasswd'
|
|
15
|
+
require_relative 'httpauth/htdigest'
|
|
16
|
+
require_relative 'httpauth/htgroup'
|
|
17
|
+
|
|
18
|
+
module WEBrick
|
|
19
|
+
|
|
20
|
+
##
|
|
21
|
+
# HTTPAuth provides both basic and digest authentication.
|
|
22
|
+
#
|
|
23
|
+
# To enable authentication for requests in WEBrick you will need a user
|
|
24
|
+
# database and an authenticator. To start, here's an Htpasswd database for
|
|
25
|
+
# use with a DigestAuth authenticator:
|
|
26
|
+
#
|
|
27
|
+
# config = { :Realm => 'DigestAuth example realm' }
|
|
28
|
+
#
|
|
29
|
+
# htpasswd = WEBrick::HTTPAuth::Htpasswd.new 'my_password_file'
|
|
30
|
+
# htpasswd.auth_type = WEBrick::HTTPAuth::DigestAuth
|
|
31
|
+
# htpasswd.set_passwd config[:Realm], 'username', 'password'
|
|
32
|
+
# htpasswd.flush
|
|
33
|
+
#
|
|
34
|
+
# The +:Realm+ is used to provide different access to different groups
|
|
35
|
+
# across several resources on a server. Typically you'll need only one
|
|
36
|
+
# realm for a server.
|
|
37
|
+
#
|
|
38
|
+
# This database can be used to create an authenticator:
|
|
39
|
+
#
|
|
40
|
+
# config[:UserDB] = htpasswd
|
|
41
|
+
#
|
|
42
|
+
# digest_auth = WEBrick::HTTPAuth::DigestAuth.new config
|
|
43
|
+
#
|
|
44
|
+
# To authenticate a request call #authenticate with a request and response
|
|
45
|
+
# object in a servlet:
|
|
46
|
+
#
|
|
47
|
+
# def do_GET req, res
|
|
48
|
+
# @authenticator.authenticate req, res
|
|
49
|
+
# end
|
|
50
|
+
#
|
|
51
|
+
# For digest authentication the authenticator must not be created every
|
|
52
|
+
# request, it must be passed in as an option via WEBrick::HTTPServer#mount.
|
|
53
|
+
|
|
54
|
+
module HTTPAuth
|
|
55
|
+
module_function
|
|
56
|
+
|
|
57
|
+
def _basic_auth(req, res, realm, req_field, res_field, err_type,
|
|
58
|
+
block) # :nodoc:
|
|
59
|
+
user = pass = nil
|
|
60
|
+
if /^Basic\s+(.*)/o =~ req[req_field]
|
|
61
|
+
userpass = $1
|
|
62
|
+
user, pass = userpass.unpack("m*")[0].split(":", 2)
|
|
63
|
+
end
|
|
64
|
+
if block.call(user, pass)
|
|
65
|
+
req.user = user
|
|
66
|
+
return
|
|
67
|
+
end
|
|
68
|
+
res[res_field] = "Basic realm=\"#{realm}\""
|
|
69
|
+
raise err_type
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
##
|
|
73
|
+
# Simple wrapper for providing basic authentication for a request. When
|
|
74
|
+
# called with a request +req+, response +res+, authentication +realm+ and
|
|
75
|
+
# +block+ the block will be called with a +username+ and +password+. If
|
|
76
|
+
# the block returns true the request is allowed to continue, otherwise an
|
|
77
|
+
# HTTPStatus::Unauthorized error is raised.
|
|
78
|
+
|
|
79
|
+
def basic_auth(req, res, realm, &block) # :yield: username, password
|
|
80
|
+
_basic_auth(req, res, realm, "Authorization", "WWW-Authenticate",
|
|
81
|
+
HTTPStatus::Unauthorized, block)
|
|
82
|
+
end
|
|
83
|
+
|
|
84
|
+
##
|
|
85
|
+
# Simple wrapper for providing basic authentication for a proxied request.
|
|
86
|
+
# When called with a request +req+, response +res+, authentication +realm+
|
|
87
|
+
# and +block+ the block will be called with a +username+ and +password+.
|
|
88
|
+
# If the block returns true the request is allowed to continue, otherwise
|
|
89
|
+
# an HTTPStatus::ProxyAuthenticationRequired error is raised.
|
|
90
|
+
|
|
91
|
+
def proxy_basic_auth(req, res, realm, &block) # :yield: username, password
|
|
92
|
+
_basic_auth(req, res, realm, "Proxy-Authorization", "Proxy-Authenticate",
|
|
93
|
+
HTTPStatus::ProxyAuthenticationRequired, block)
|
|
94
|
+
end
|
|
95
|
+
end
|
|
96
|
+
end
|