omniauth-rightsignature 0.0.4 → 0.0.5
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +17 -148
- data/lib/omniauth/rightsignature/version.rb +1 -1
- data/lib/omniauth/strategies/rightsignature.rb +0 -1
- metadata +1 -18
- data/lib/omniauth/auth_hash.rb +0 -54
- data/lib/omniauth/builder.rb +0 -62
- data/lib/omniauth/failure_endpoint.rb +0 -44
- data/lib/omniauth/form.css +0 -81
- data/lib/omniauth/form.rb +0 -111
- data/lib/omniauth/strategy.rb +0 -501
- data/lib/omniauth/test.rb +0 -8
- data/lib/omniauth/version.rb +0 -3
- data/lib/omniauth.rb +0 -170
- data/spec/helper.rb +0 -55
- data/spec/omniauth/auth_hash_spec.rb +0 -109
- data/spec/omniauth/builder_spec.rb +0 -50
- data/spec/omniauth/failure_endpoint_spec.rb +0 -58
- data/spec/omniauth/form_spec.rb +0 -23
- data/spec/omniauth/strategies/developer_spec.rb +0 -73
- data/spec/omniauth/strategy_spec.rb +0 -765
- data/spec/omniauth_spec.rb +0 -145
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: be51d780d2d1dbd57923e11be16c0c3ead2a753f
|
4
|
+
data.tar.gz: da07361b7e6f421a45a372693e7f573f82d47cbb
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c4c0c32c3138f1adc19b5e5687607de50507907fc3aa8a29396dc5614e2b472274bb72c31642d49c62f21b34d0e1a33b45a3f475934ec0800c90556a0d84e942
|
7
|
+
data.tar.gz: 65c001e316d7fd109f4f5cc77f1492d6e952342d03aef7eaa9004e3a60366bc15be38e654947dae4f1e013fd26473370e28f92583800ee984e3df6b7d168b916
|
data/README.md
CHANGED
@@ -1,167 +1,36 @@
|
|
1
|
-
|
1
|
+
OmniAuth RightSignature
|
2
|
+
================
|
2
3
|
|
3
|
-
[
|
4
|
-
[![Build Status](http://img.shields.io/travis/intridea/omniauth.svg)][travis]
|
5
|
-
[![Dependency Status](http://img.shields.io/gemnasium/intridea/omniauth.svg)][gemnasium]
|
6
|
-
[![Code Climate](http://img.shields.io/codeclimate/github/intridea/omniauth.svg)][codeclimate]
|
7
|
-
[![Coverage Status](http://img.shields.io/coveralls/intridea/omniauth.svg)][coveralls]
|
8
|
-
[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/intridea/omniauth/trend.png)](https://bitdeli.com/free "Bitdeli Badge")
|
4
|
+
This gem is an OmniAuth 1.0 Strategy for the [RightSignature API](https://rightsignature.com/api)
|
9
5
|
|
10
|
-
|
11
|
-
[travis]: http://travis-ci.org/intridea/omniauth
|
12
|
-
[gemnasium]: https://gemnasium.com/intridea/omniauth
|
13
|
-
[codeclimate]: https://codeclimate.com/github/intridea/omniauth
|
14
|
-
[coveralls]: https://coveralls.io/r/intridea/omniauth
|
6
|
+
It supports RightSignature API which uses OAuth 1.0a.
|
15
7
|
|
16
|
-
|
17
|
-
|
18
|
-
upgrade. See [the wiki](https://github.com/intridea/omniauth/wiki/Upgrading-to-1.0)
|
19
|
-
for more information.**
|
8
|
+
Usage
|
9
|
+
-----
|
20
10
|
|
21
|
-
|
22
|
-
OmniAuth is a library that standardizes multi-provider authentication for
|
23
|
-
web applications. It was created to be powerful, flexible, and do as
|
24
|
-
little as possible. Any developer can create **strategies** for OmniAuth
|
25
|
-
that can authenticate users via disparate systems. OmniAuth strategies
|
26
|
-
have been created for everything from Facebook to LDAP.
|
27
|
-
|
28
|
-
In order to use OmniAuth in your applications, you will need to leverage
|
29
|
-
one or more strategies. These strategies are generally released
|
30
|
-
individually as RubyGems, and you can see a [community maintained list](https://github.com/intridea/omniauth/wiki/List-of-Strategies)
|
31
|
-
on the wiki for this project.
|
32
|
-
|
33
|
-
One strategy, called `Developer`, is included with OmniAuth and provides
|
34
|
-
a completely insecure, non-production-usable strategy that directly
|
35
|
-
prompts a user for authentication information and then passes it
|
36
|
-
straight through. You can use it as a placeholder when you start
|
37
|
-
development and easily swap in other strategies later.
|
38
|
-
|
39
|
-
## Getting Started
|
40
|
-
Each OmniAuth strategy is a Rack Middleware. That means that you can use
|
41
|
-
it the same way that you use any other Rack middleware. For example, to
|
42
|
-
use the built-in Developer strategy in a Sinatra application I might do
|
43
|
-
this:
|
11
|
+
Add the strategy to your `Gemfile` alongside OmniAuth:
|
44
12
|
|
45
13
|
```ruby
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
class MyApplication < Sinatra::Base
|
50
|
-
use Rack::Session::Cookie
|
51
|
-
use OmniAuth::Strategies::Developer
|
52
|
-
end
|
14
|
+
gem 'omniauth'
|
15
|
+
gem 'omniauth-rightsignature'
|
53
16
|
```
|
54
17
|
|
55
|
-
|
56
|
-
want to leave room to run multiple strategies. For this, the built-in
|
57
|
-
`OmniAuth::Builder` class gives you an easy way to specify multiple
|
58
|
-
strategies. Note that there is **no difference** between the following
|
59
|
-
code and using each strategy individually as middleware. This is an
|
60
|
-
example that you might put into a Rails initializer at
|
61
|
-
`config/initializers/omniauth.rb`:
|
18
|
+
Then integrate the strategy into your middleware:
|
62
19
|
|
63
20
|
```ruby
|
64
|
-
|
65
|
-
provider :
|
66
|
-
provider :twitter, ENV['TWITTER_KEY'], ENV['TWITTER_SECRET']
|
21
|
+
use OmniAuth::Builder do
|
22
|
+
provider :rightsignature, 'oAuthKey', 'oAuth Secret'
|
67
23
|
end
|
68
24
|
```
|
69
25
|
|
70
|
-
|
71
|
-
specific initialization requirements.
|
72
|
-
|
73
|
-
## Integrating OmniAuth Into Your Application
|
74
|
-
OmniAuth is an extremely low-touch library. It is designed to be a
|
75
|
-
black box that you can send your application's users into when you need
|
76
|
-
authentication and then get information back. OmniAuth was intentionally
|
77
|
-
built not to automatically associate with a User model or make
|
78
|
-
assumptions about how many authentication methods you might want to use
|
79
|
-
or what you might want to do with the data once a user has
|
80
|
-
authenticated. This makes OmniAuth incredibly flexible. To use OmniAuth,
|
81
|
-
you need only to redirect users to `/auth/:provider`, where `:provider`
|
82
|
-
is the name of the strategy (for example, `developer` or `twitter`).
|
83
|
-
From there, OmniAuth will take over and take the user through the
|
84
|
-
necessary steps to authenticate them with the chosen strategy.
|
85
|
-
|
86
|
-
Once the user has authenticated, what do you do next? OmniAuth simply
|
87
|
-
sets a special hash called the Authentication Hash on the Rack
|
88
|
-
environment of a request to `/auth/:provider/callback`. This hash
|
89
|
-
contains as much information about the user as OmniAuth was able to
|
90
|
-
glean from the utilized strategy. You should set up an endpoint in your
|
91
|
-
application that matches to the callback URL and then performs whatever
|
92
|
-
steps are necessary for your application. For example, in a Rails app I
|
93
|
-
would add a line in my `routes.rb` file like this:
|
94
|
-
|
95
|
-
```ruby
|
96
|
-
get '/auth/:provider/callback', to: 'sessions#create'
|
97
|
-
```
|
98
|
-
|
99
|
-
And I might then have a `SessionsController` with code that looks
|
100
|
-
something like this:
|
26
|
+
In Rails, you'll want to add to the middleware stack:
|
101
27
|
|
102
28
|
```ruby
|
103
|
-
|
104
|
-
|
105
|
-
@user = User.find_or_create_from_auth_hash(auth_hash)
|
106
|
-
self.current_user = @user
|
107
|
-
redirect_to '/'
|
108
|
-
end
|
109
|
-
|
110
|
-
protected
|
111
|
-
|
112
|
-
def auth_hash
|
113
|
-
request.env['omniauth.auth']
|
114
|
-
end
|
29
|
+
Rails.application.config.middleware.use OmniAuth::Builder do
|
30
|
+
provider :rightsignature, 'oAuthKey', 'oAuth Secret'
|
115
31
|
end
|
116
32
|
```
|
117
33
|
|
118
|
-
|
119
|
-
Authentication Hash which will contain information about the just
|
120
|
-
authenticated user including a unique id, the strategy they just used
|
121
|
-
for authentication, and personal details such as name and email address
|
122
|
-
as available. For an in-depth description of what the authentication
|
123
|
-
hash might contain, see the [Auth Hash Schema wiki page](https://github.com/intridea/omniauth/wiki/Auth-Hash-Schema).
|
124
|
-
|
125
|
-
Note that OmniAuth does not perform any actions beyond setting some
|
126
|
-
environment information on the callback request. It is entirely up to
|
127
|
-
you how you want to implement the particulars of your application's
|
128
|
-
authentication flow.
|
129
|
-
|
130
|
-
## Logging
|
131
|
-
OmniAuth supports a configurable logger. By default, OmniAuth will log
|
132
|
-
to `STDOUT` but you can configure this using `OmniAuth.config.logger`:
|
133
|
-
|
134
|
-
```ruby
|
135
|
-
# Rails application example
|
136
|
-
OmniAuth.config.logger = Rails.logger
|
137
|
-
```
|
138
|
-
|
139
|
-
## Resources
|
140
|
-
The [OmniAuth Wiki](https://github.com/intridea/omniauth/wiki) has
|
141
|
-
actively maintained in-depth documentation for OmniAuth. It should be
|
142
|
-
your first stop if you are wondering about a more in-depth look at
|
143
|
-
OmniAuth, how it works, and how to use it.
|
144
|
-
|
145
|
-
## Supported Ruby Versions
|
146
|
-
OmniAuth is tested under 1.8.7, 1.9.3, 2.0.0, 2.1.0, JRuby, and Rubinius.
|
147
|
-
|
148
|
-
## Versioning
|
149
|
-
This library aims to adhere to [Semantic Versioning 2.0.0][semver]. Violations
|
150
|
-
of this scheme should be reported as bugs. Specifically, if a minor or patch
|
151
|
-
version is released that breaks backward compatibility, that version should be
|
152
|
-
immediately yanked and/or a new version should be immediately released that
|
153
|
-
restores compatibility. Breaking changes to the public API will only be
|
154
|
-
introduced with new major versions. As a result of this policy, you can (and
|
155
|
-
should) specify a dependency on this gem using the [Pessimistic Version
|
156
|
-
Constraint][pvc] with two digits of precision. For example:
|
157
|
-
|
158
|
-
spec.add_dependency 'omniauth', '~> 1.0'
|
159
|
-
|
160
|
-
[semver]: http://semver.org/
|
161
|
-
[pvc]: http://docs.rubygems.org/read/chapter/16#page74
|
162
|
-
|
163
|
-
## License
|
164
|
-
Copyright (c) 2010-2013 Michael Bleigh and Intridea, Inc. See [LICENSE][] for
|
165
|
-
details.
|
34
|
+
You will have to put in your consumer key and secret (RightSignature refers to them as oAuth Key and oAuth Secret in https://rightsignature.com/oauth_clients).
|
166
35
|
|
167
|
-
[
|
36
|
+
For additional information, refer to the [OmniAuth wiki](https://github.com/intridea/omniauth/wiki).
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: omniauth-rightsignature
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Deepikaa Subramaniam
|
@@ -126,26 +126,9 @@ files:
|
|
126
126
|
- README.md
|
127
127
|
- Rakefile
|
128
128
|
- lib/omniauth-rightsignature.rb
|
129
|
-
- lib/omniauth.rb
|
130
|
-
- lib/omniauth/auth_hash.rb
|
131
|
-
- lib/omniauth/builder.rb
|
132
|
-
- lib/omniauth/failure_endpoint.rb
|
133
|
-
- lib/omniauth/form.css
|
134
|
-
- lib/omniauth/form.rb
|
135
129
|
- lib/omniauth/rightsignature/version.rb
|
136
130
|
- lib/omniauth/strategies/rightsignature.rb
|
137
|
-
- lib/omniauth/strategy.rb
|
138
|
-
- lib/omniauth/test.rb
|
139
|
-
- lib/omniauth/version.rb
|
140
131
|
- omniauth-rightsignature.gemspec
|
141
|
-
- spec/helper.rb
|
142
|
-
- spec/omniauth/auth_hash_spec.rb
|
143
|
-
- spec/omniauth/builder_spec.rb
|
144
|
-
- spec/omniauth/failure_endpoint_spec.rb
|
145
|
-
- spec/omniauth/form_spec.rb
|
146
|
-
- spec/omniauth/strategies/developer_spec.rb
|
147
|
-
- spec/omniauth/strategy_spec.rb
|
148
|
-
- spec/omniauth_spec.rb
|
149
132
|
homepage: https://github.com/DeepikaaSubramaniam21/omniauth-rightsignature/
|
150
133
|
licenses: []
|
151
134
|
metadata: {}
|
data/lib/omniauth/auth_hash.rb
DELETED
@@ -1,54 +0,0 @@
|
|
1
|
-
require 'hashie/mash'
|
2
|
-
|
3
|
-
module OmniAuth
|
4
|
-
# The AuthHash is a normalized schema returned by all OmniAuth
|
5
|
-
# strategies. It maps as much user information as the provider
|
6
|
-
# is able to provide into the InfoHash (stored as the `'info'`
|
7
|
-
# key).
|
8
|
-
class AuthHash < Hashie::Mash
|
9
|
-
def self.subkey_class
|
10
|
-
Hashie::Mash
|
11
|
-
end
|
12
|
-
|
13
|
-
# Tells you if this is considered to be a valid
|
14
|
-
# OmniAuth AuthHash. The requirements for that
|
15
|
-
# are that it has a provider name, a uid, and a
|
16
|
-
# valid info hash. See InfoHash#valid? for
|
17
|
-
# more details there.
|
18
|
-
def valid?
|
19
|
-
uid? && provider? && info? && info.valid?
|
20
|
-
end
|
21
|
-
|
22
|
-
def regular_writer(key, value)
|
23
|
-
if key.to_s == 'info' && !value.is_a?(InfoHash)
|
24
|
-
value = InfoHash.new(value)
|
25
|
-
end
|
26
|
-
super
|
27
|
-
end
|
28
|
-
|
29
|
-
class InfoHash < Hashie::Mash
|
30
|
-
def self.subkey_class
|
31
|
-
Hashie::Mash
|
32
|
-
end
|
33
|
-
|
34
|
-
def name
|
35
|
-
return self[:name] if self[:name]
|
36
|
-
return "#{first_name} #{last_name}".strip if first_name? || last_name?
|
37
|
-
return nickname if nickname?
|
38
|
-
return email if email?
|
39
|
-
nil
|
40
|
-
end
|
41
|
-
|
42
|
-
def name?
|
43
|
-
!!name # rubocop:disable DoubleNegation
|
44
|
-
end
|
45
|
-
alias_method :valid?, :name?
|
46
|
-
|
47
|
-
def to_hash
|
48
|
-
hash = super
|
49
|
-
hash['name'] ||= name
|
50
|
-
hash
|
51
|
-
end
|
52
|
-
end
|
53
|
-
end
|
54
|
-
end
|
data/lib/omniauth/builder.rb
DELETED
@@ -1,62 +0,0 @@
|
|
1
|
-
module OmniAuth
|
2
|
-
class Builder < ::Rack::Builder
|
3
|
-
def initialize(app, &block)
|
4
|
-
@options = nil
|
5
|
-
if rack14?
|
6
|
-
super
|
7
|
-
else
|
8
|
-
@app = app
|
9
|
-
super(&block)
|
10
|
-
@ins << @app
|
11
|
-
end
|
12
|
-
end
|
13
|
-
|
14
|
-
def rack14?
|
15
|
-
Rack.release.split('.')[1].to_i >= 4
|
16
|
-
end
|
17
|
-
|
18
|
-
def on_failure(&block)
|
19
|
-
OmniAuth.config.on_failure = block
|
20
|
-
end
|
21
|
-
|
22
|
-
def before_options_phase(&block)
|
23
|
-
OmniAuth.config.before_options_phase = block
|
24
|
-
end
|
25
|
-
|
26
|
-
def before_request_phase(&block)
|
27
|
-
OmniAuth.config.before_request_phase = block
|
28
|
-
end
|
29
|
-
|
30
|
-
def before_callback_phase(&block)
|
31
|
-
OmniAuth.config.before_callback_phase = block
|
32
|
-
end
|
33
|
-
|
34
|
-
def configure(&block)
|
35
|
-
OmniAuth.configure(&block)
|
36
|
-
end
|
37
|
-
|
38
|
-
def options(options = false)
|
39
|
-
return @options || {} if options == false
|
40
|
-
@options = options
|
41
|
-
end
|
42
|
-
|
43
|
-
def provider(klass, *args, &block)
|
44
|
-
if klass.is_a?(Class)
|
45
|
-
middleware = klass
|
46
|
-
else
|
47
|
-
begin
|
48
|
-
middleware = OmniAuth::Strategies.const_get("#{OmniAuth::Utils.camelize(klass.to_s)}")
|
49
|
-
rescue NameError
|
50
|
-
raise(LoadError.new("Could not find matching strategy for #{klass.inspect}. You may need to install an additional gem (such as omniauth-#{klass})."))
|
51
|
-
end
|
52
|
-
end
|
53
|
-
|
54
|
-
args.last.is_a?(Hash) ? args.push(options.merge(args.pop)) : args.push(options)
|
55
|
-
use middleware, *args, &block
|
56
|
-
end
|
57
|
-
|
58
|
-
def call(env)
|
59
|
-
to_app.call(env)
|
60
|
-
end
|
61
|
-
end
|
62
|
-
end
|
@@ -1,44 +0,0 @@
|
|
1
|
-
module OmniAuth
|
2
|
-
# This simple Rack endpoint that serves as the default
|
3
|
-
# 'failure' mechanism for OmniAuth. If a strategy fails for
|
4
|
-
# any reason this endpoint will be invoked. The default behavior
|
5
|
-
# is to redirect to `/auth/failure` except in the case of
|
6
|
-
# a development `RACK_ENV`, in which case an exception will
|
7
|
-
# be raised.
|
8
|
-
class FailureEndpoint
|
9
|
-
attr_reader :env
|
10
|
-
|
11
|
-
def self.call(env)
|
12
|
-
new(env).call
|
13
|
-
end
|
14
|
-
|
15
|
-
def initialize(env)
|
16
|
-
@env = env
|
17
|
-
end
|
18
|
-
|
19
|
-
def call
|
20
|
-
raise_out! if OmniAuth.config.failure_raise_out_environments.include?(ENV['RACK_ENV'].to_s)
|
21
|
-
redirect_to_failure
|
22
|
-
end
|
23
|
-
|
24
|
-
def raise_out!
|
25
|
-
fail(env['omniauth.error'] || OmniAuth::Error.new(env['omniauth.error.type']))
|
26
|
-
end
|
27
|
-
|
28
|
-
def redirect_to_failure
|
29
|
-
message_key = env['omniauth.error.type']
|
30
|
-
new_path = "#{env['SCRIPT_NAME']}#{OmniAuth.config.path_prefix}/failure?message=#{message_key}#{origin_query_param}#{strategy_name_query_param}"
|
31
|
-
Rack::Response.new(['302 Moved'], 302, 'Location' => new_path).finish
|
32
|
-
end
|
33
|
-
|
34
|
-
def strategy_name_query_param
|
35
|
-
return '' unless env['omniauth.error.strategy']
|
36
|
-
"&strategy=#{env['omniauth.error.strategy'].name}"
|
37
|
-
end
|
38
|
-
|
39
|
-
def origin_query_param
|
40
|
-
return '' unless env['omniauth.origin']
|
41
|
-
"&origin=#{Rack::Utils.escape(env['omniauth.origin'])}"
|
42
|
-
end
|
43
|
-
end
|
44
|
-
end
|
data/lib/omniauth/form.css
DELETED
@@ -1,81 +0,0 @@
|
|
1
|
-
body {
|
2
|
-
background: #ccc;
|
3
|
-
font-family: "Lucida Grande", "Lucida Sans", Helvetica, Arial, sans-serif;
|
4
|
-
}
|
5
|
-
|
6
|
-
h1 {
|
7
|
-
text-align: center;
|
8
|
-
margin: 30px auto 0px;
|
9
|
-
font-size: 18px;
|
10
|
-
padding: 10px 10px 15px;
|
11
|
-
background: #555;
|
12
|
-
color: white;
|
13
|
-
width: 320px;
|
14
|
-
border: 10px solid #444;
|
15
|
-
border-bottom: 0;
|
16
|
-
-moz-border-radius-topleft: 10px;
|
17
|
-
-moz-border-radius-topright: 10px;
|
18
|
-
-webkit-border-top-left-radius: 10px;
|
19
|
-
-webkit-border-top-right-radius: 10px;
|
20
|
-
border-top-left-radius: 10px;
|
21
|
-
border-top-right-radius: 10px;
|
22
|
-
}
|
23
|
-
|
24
|
-
h1, form {
|
25
|
-
-moz-box-shadow: 2px 2px 7px rgba(0,0,0,0.3);
|
26
|
-
-webkit-box-shadow: 2px 2px 7px rgba(0,0,0,0.3);
|
27
|
-
}
|
28
|
-
|
29
|
-
form {
|
30
|
-
background: white;
|
31
|
-
border: 10px solid #eee;
|
32
|
-
border-top: 0;
|
33
|
-
padding: 20px;
|
34
|
-
margin: 0px auto 40px;
|
35
|
-
width: 300px;
|
36
|
-
-moz-border-radius-bottomleft: 10px;
|
37
|
-
-moz-border-radius-bottomright: 10px;
|
38
|
-
-webkit-border-bottom-left-radius: 10px;
|
39
|
-
-webkit-border-bottom-right-radius: 10px;
|
40
|
-
border-bottom-left-radius: 10px;
|
41
|
-
border-bottom-right-radius: 10px;
|
42
|
-
}
|
43
|
-
|
44
|
-
label {
|
45
|
-
display: block;
|
46
|
-
font-weight: bold;
|
47
|
-
margin-bottom: 5px;
|
48
|
-
}
|
49
|
-
|
50
|
-
input {
|
51
|
-
font-size: 18px;
|
52
|
-
padding: 4px 8px;
|
53
|
-
display: block;
|
54
|
-
margin-bottom: 10px;
|
55
|
-
width: 280px;
|
56
|
-
}
|
57
|
-
|
58
|
-
input#identifier, input#openid_url {
|
59
|
-
background: url(http://openid.net/login-bg.gif) no-repeat;
|
60
|
-
background-position: 0 50%;
|
61
|
-
padding-left: 18px;
|
62
|
-
}
|
63
|
-
|
64
|
-
button {
|
65
|
-
font-size: 22px;
|
66
|
-
padding: 4px 8px;
|
67
|
-
display: block;
|
68
|
-
margin: 20px auto 0;
|
69
|
-
}
|
70
|
-
|
71
|
-
fieldset {
|
72
|
-
border: 1px solid #ccc;
|
73
|
-
border-left: 0;
|
74
|
-
border-right: 0;
|
75
|
-
padding: 10px 0;
|
76
|
-
}
|
77
|
-
|
78
|
-
fieldset input {
|
79
|
-
width: 260px;
|
80
|
-
font-size: 16px;
|
81
|
-
}
|