lol_auth 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (43) hide show
  1. checksums.yaml +7 -0
  2. data/MIT-LICENSE +20 -0
  3. data/README.md +28 -0
  4. data/Rakefile +36 -0
  5. data/app/assets/config/lol_auth_manifest.js +2 -0
  6. data/app/assets/javascripts/lol_auth/application.js +13 -0
  7. data/app/assets/stylesheets/lol_auth/application.css +15 -0
  8. data/app/controllers/lol_auth/application_controller.rb +4 -0
  9. data/app/controllers/lol_auth/passwords_controller.rb +31 -0
  10. data/app/controllers/lol_auth/users_controller.rb +17 -0
  11. data/app/helpers/lol_auth/application_helper.rb +4 -0
  12. data/app/helpers/lol_auth/users_helper.rb +4 -0
  13. data/app/jobs/lol_auth/application_job.rb +4 -0
  14. data/app/mailers/lol_auth/application_mailer.rb +6 -0
  15. data/app/managers/facebook/base.rb +11 -0
  16. data/app/managers/facebook/login.rb +68 -0
  17. data/app/managers/user_reset_password_manager.rb +24 -0
  18. data/app/models/lol_auth/application_record.rb +5 -0
  19. data/app/models/user.rb +9 -0
  20. data/app/uploaders/avatar_uploader.rb +52 -0
  21. data/app/views/devise/mailer/reset_password_instructions.html.erb +893 -0
  22. data/app/views/layouts/lol_auth/application.html.erb +14 -0
  23. data/app/views/layouts/lol_auth/passwords.html.erb +17 -0
  24. data/app/views/lol_auth/passwords/_form.html.erb +31 -0
  25. data/app/views/lol_auth/passwords/_token_expired.html.erb +7 -0
  26. data/app/views/lol_auth/passwords/complete.html.erb +12 -0
  27. data/app/views/lol_auth/passwords/new.html.erb +5 -0
  28. data/app/views/lol_auth/users/_user.json.jbuilder +5 -0
  29. data/app/views/lol_auth/users/success.json.jbuilder +4 -0
  30. data/config/initializers/carrierwave.rb +10 -0
  31. data/config/initializers/devise_token_auth.rb +48 -0
  32. data/config/initializers/lol_users_config.rb +3 -0
  33. data/config/routes.rb +16 -0
  34. data/db/migrate/20170825152755_devise_token_auth_create_users.rb +54 -0
  35. data/db/migrate/20170828174614_add_avatar_to_users.rb +5 -0
  36. data/lib/generators/lol_auth/install/USAGE +8 -0
  37. data/lib/generators/lol_auth/install/install_generator.rb +17 -0
  38. data/lib/generators/lol_auth/install/templates/facebook_app.yml +11 -0
  39. data/lib/lol_auth.rb +5 -0
  40. data/lib/lol_auth/engine.rb +13 -0
  41. data/lib/lol_auth/version.rb +3 -0
  42. data/lib/tasks/lol_auth_tasks.rake +4 -0
  43. metadata +253 -0
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 50efce898322f9571d067b6b19e16838408edea6
4
+ data.tar.gz: 7b5c461bc3ad9fd44c7de24851d8c7fd24cf10fd
5
+ SHA512:
6
+ metadata.gz: 4308267c46f7cb70d43e9a77b4cd71c72bb3a5dda4f5a455ada7c3ddddd149b7a2cb1f753cd47ba70269625e93910d3e2627a56397d7196ed01f4a477f768882
7
+ data.tar.gz: 400a7d5332ca4c099d81031fd40917faa0eab6038189462789cf677891ae7a5bc2e80e6aadd1f1944a710556a10f448e59a23fc8eca51dee8a3da641885b36ac
data/MIT-LICENSE ADDED
@@ -0,0 +1,20 @@
1
+ Copyright 2017 Eduardo Zaghi
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ "Software"), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,28 @@
1
+ # LolAuth
2
+ Short description and motivation.
3
+
4
+ ## Usage
5
+ How to use my plugin.
6
+
7
+ ## Installation
8
+ Add this line to your application's Gemfile:
9
+
10
+ ```ruby
11
+ gem 'lol_auth'
12
+ ```
13
+
14
+ And then execute:
15
+ ```bash
16
+ $ bundle
17
+ ```
18
+
19
+ Or install it yourself as:
20
+ ```bash
21
+ $ gem install lol_auth
22
+ ```
23
+
24
+ ## Contributing
25
+ Contribution directions go here.
26
+
27
+ ## License
28
+ The gem is available as open source under the terms of the [MIT License](http://opensource.org/licenses/MIT).
data/Rakefile ADDED
@@ -0,0 +1,36 @@
1
+ begin
2
+ require 'bundler/setup'
3
+ rescue LoadError
4
+ puts 'You must `gem install bundler` and `bundle install` to run rake tasks'
5
+ end
6
+
7
+ require 'rdoc/task'
8
+
9
+ RDoc::Task.new(:rdoc) do |rdoc|
10
+ rdoc.rdoc_dir = 'rdoc'
11
+ rdoc.title = 'LolAuth'
12
+ rdoc.options << '--line-numbers'
13
+ rdoc.rdoc_files.include('README.md')
14
+ rdoc.rdoc_files.include('lib/**/*.rb')
15
+ end
16
+
17
+ APP_RAKEFILE = File.expand_path(".././specs/dummy/Rakefile", __FILE__)
18
+ load 'rails/tasks/engine.rake'
19
+
20
+
21
+ load 'rails/tasks/statistics.rake'
22
+
23
+
24
+
25
+ require 'bundler/gem_tasks'
26
+
27
+ require 'rake/testtask'
28
+
29
+ Rake::TestTask.new(:test) do |t|
30
+ t.libs << 'test'
31
+ t.pattern = 'test/**/*_test.rb'
32
+ t.verbose = false
33
+ end
34
+
35
+
36
+ task default: :test
@@ -0,0 +1,2 @@
1
+ //= link_directory ../javascripts/lol_auth .js
2
+ //= link_directory ../stylesheets/lol_auth .css
@@ -0,0 +1,13 @@
1
+ // This is a manifest file that'll be compiled into application.js, which will include all the files
2
+ // listed below.
3
+ //
4
+ // Any JavaScript/Coffee file within this directory, lib/assets/javascripts, vendor/assets/javascripts,
5
+ // or any plugin's vendor/assets/javascripts directory can be referenced here using a relative path.
6
+ //
7
+ // It's not advisable to add code directly here, but if you do, it'll appear at the bottom of the
8
+ // compiled file. JavaScript code in this file should be added after the last require_* statement.
9
+ //
10
+ // Read Sprockets README (https://github.com/rails/sprockets#sprockets-directives) for details
11
+ // about supported directives.
12
+ //
13
+ //= require_tree .
@@ -0,0 +1,15 @@
1
+ /*
2
+ * This is a manifest file that'll be compiled into application.css, which will include all the files
3
+ * listed below.
4
+ *
5
+ * Any CSS and SCSS file within this directory, lib/assets/stylesheets, vendor/assets/stylesheets,
6
+ * or any plugin's vendor/assets/stylesheets directory can be referenced here using a relative path.
7
+ *
8
+ * You're free to add application-wide styles to this file and they'll appear at the bottom of the
9
+ * compiled file so the styles you add here take precedence over styles defined in any other CSS/SCSS
10
+ * files in this directory. Styles in this file should be added after the last require_* statement.
11
+ * It is generally better to create a new file per style scope.
12
+ *
13
+ *= require_tree .
14
+ *= require_self
15
+ */
@@ -0,0 +1,4 @@
1
+ module LolAuth
2
+ class ApplicationController < ActionController::Base
3
+ end
4
+ end
@@ -0,0 +1,31 @@
1
+ require_dependency "lol_auth/application_controller"
2
+
3
+ module LolAuth
4
+ class PasswordsController < ApplicationController
5
+ include Rails.application.routes.url_helpers
6
+
7
+ before_action :load_user, except: [:complete_password]
8
+
9
+ def new
10
+ @user = nil unless @user.persisted?
11
+ end
12
+
13
+ def create
14
+ @manager = UserResetPasswordManager.new(user: @user, params: params[:user])
15
+
16
+ if @manager.process
17
+ redirect_to complete_password_path
18
+ else
19
+ redirect_to new_password_path(token: params[:token], notice: 'Confirmação deve ser igual a Senha e maior de 8 caracteres')
20
+ end
21
+ end
22
+
23
+ def complete_password
24
+ end
25
+
26
+ private
27
+ def load_user
28
+ @user = User.reset_password_by_token({reset_password_token: params[:token]})
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,17 @@
1
+ require_dependency "lol_auth/application_controller"
2
+
3
+ module LolAuth
4
+ class UsersController < ApplicationController
5
+ def facebook_signin
6
+ @manager = Facebook::Login.new()
7
+
8
+ @user = @manager.login_with_token(params[:token])
9
+
10
+ sign_in(:user, @user, store: false, bypass: true)
11
+
12
+ response.headers.merge!(@manager.auth_header)
13
+
14
+ render :success, status: 201
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,4 @@
1
+ module LolAuth
2
+ module ApplicationHelper
3
+ end
4
+ end
@@ -0,0 +1,4 @@
1
+ module LolAuth
2
+ module UsersHelper
3
+ end
4
+ end
@@ -0,0 +1,4 @@
1
+ module LolAuth
2
+ class ApplicationJob < ActiveJob::Base
3
+ end
4
+ end
@@ -0,0 +1,6 @@
1
+ module LolAuth
2
+ class ApplicationMailer < ActionMailer::Base
3
+ default from: 'from@example.com'
4
+ layout 'mailer'
5
+ end
6
+ end
@@ -0,0 +1,11 @@
1
+ module Facebook
2
+ class Base
3
+ def initialize
4
+ @app_id = Rails.configuration.facebook_app['id']
5
+ @app_secret_id = Rails.configuration.facebook_app['secret_key']
6
+ end
7
+ end
8
+ end
9
+
10
+ #How to use
11
+ # Facebook::Base
@@ -0,0 +1,68 @@
1
+ module Facebook
2
+ class Login < Base
3
+ attr_accessor :auth_header
4
+
5
+ def initialize(options={})
6
+ super()
7
+
8
+ @user_type = options[:user_type] || 'User'
9
+ end
10
+
11
+ def login_with_token(token)
12
+ @graph = Koala::Facebook::API.new(token)
13
+
14
+ get_info()
15
+
16
+ sign_in(@info['id'])
17
+ end
18
+
19
+ private
20
+ def get_info
21
+ @info ||= @graph.get_object("me", {fields: 'picture, email, first_name, last_name, birthday'})
22
+ end
23
+
24
+ def sign_in(id)
25
+ user = @user_type.constantize.find_or_create_by(uid: id) do |user|
26
+ user.email = build_email()
27
+ user.password = build_pasword()
28
+ user.name = build_name()
29
+ user.remote_avatar_url = build_image()
30
+ user.provider = :facebook
31
+ end
32
+
33
+ build_token(user)
34
+
35
+ user.reload
36
+ end
37
+
38
+ def build_email
39
+ @info['email'] || "#{@info['first_name'].downcase.underscore}#{@info['last_name'].downcase.underscore}@sample.com"
40
+ end
41
+
42
+ def build_pasword
43
+ Devise.friendly_token[0,20]
44
+ end
45
+
46
+ def build_name
47
+ "#{@info['first_name']} #{@info['last_name']}"
48
+ end
49
+
50
+ def build_image
51
+ "https://graph.facebook.com/#{@info['id']}/picture?type=large"
52
+ end
53
+
54
+ def build_token(user)
55
+ client_id = SecureRandom.urlsafe_base64(nil, false)
56
+ token = SecureRandom.urlsafe_base64(nil, false)
57
+
58
+ user.tokens[client_id] = {
59
+ token: BCrypt::Password.create(token),
60
+ expiry: (Time.now + DeviseTokenAuth.token_lifespan).to_i
61
+ }
62
+
63
+ user.save
64
+
65
+ @auth_header = user.create_new_auth_token(client_id)
66
+ end
67
+ end
68
+ end
@@ -0,0 +1,24 @@
1
+ class UserResetPasswordManager
2
+ def initialize(options={})
3
+ @user = options[:user]
4
+ @params = options[:params]
5
+ end
6
+
7
+ def send_instructions
8
+ @user.send_reset_password_instructions if @user.present?
9
+
10
+ true
11
+ end
12
+
13
+ def process
14
+ return false unless valid_params?
15
+
16
+ @user.update_attributes(password: @params[:password])
17
+ end
18
+
19
+ private
20
+ def valid_params?
21
+ (@params[:password].present? && @params[:password_confirmation].present?) &&
22
+ @params[:password] == @params[:password_confirmation]
23
+ end
24
+ end
@@ -0,0 +1,5 @@
1
+ module LolAuth
2
+ class ApplicationRecord < ActiveRecord::Base
3
+ self.abstract_class = true
4
+ end
5
+ end
@@ -0,0 +1,9 @@
1
+ class User < ActiveRecord::Base
2
+ mount_uploader :avatar, AvatarUploader
3
+
4
+ # Include default devise modules.
5
+ devise :database_authenticatable, :registerable,
6
+ :recoverable, :rememberable, :trackable, :validatable, :omniauthable
7
+
8
+ include DeviseTokenAuth::Concerns::User
9
+ end
@@ -0,0 +1,52 @@
1
+ class AvatarUploader < CarrierWave::Uploader::Base
2
+
3
+ # Include RMagick or MiniMagick support:
4
+ # include CarrierWave::RMagick
5
+ include CarrierWave::MiniMagick
6
+
7
+ # Choose what kind of storage to use for this uploader:
8
+ if Rails.env.production?
9
+ storage :fog
10
+ else
11
+ storage :file
12
+ end
13
+
14
+ # Override the directory where uploaded files will be stored.
15
+ # This is a sensible default for uploaders that are meant to be mounted:
16
+ def store_dir
17
+ "uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}"
18
+ end
19
+
20
+ # Provide a default URL as a default if there hasn't been a file uploaded:
21
+ # def default_url(*args)
22
+ # # For Rails 3.1+ asset pipeline compatibility:
23
+ # # ActionController::Base.helpers.asset_path("fallback/" + [version_name, "default.png"].compact.join('_'))
24
+ #
25
+ # "/images/fallback/" + [version_name, "default.png"].compact.join('_')
26
+ # end
27
+
28
+ # Process files as they are uploaded:
29
+ # process scale: [200, 300]
30
+ #
31
+ # def scale(width, height)
32
+ # # do something
33
+ # end
34
+
35
+ # Create different versions of your uploaded files:
36
+ version :thumb do
37
+ process resize_to_fill: [150, 150]
38
+ end
39
+
40
+ # Add a white list of extensions which are allowed to be uploaded.
41
+ # For images you might use something like this:
42
+ # def extension_whitelist
43
+ # %w(jpg jpeg gif png)
44
+ # end
45
+
46
+ # Override the filename of the uploaded files:
47
+ # Avoid using model.id or version_name here, see uploader/store.rb for details.
48
+ # def filename
49
+ # "something.jpg" if original_filename
50
+ # end
51
+
52
+ end
@@ -0,0 +1,893 @@
1
+ <!doctype html>
2
+ <html xmlns="http://www.w3.org/1999/xhtml" xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office">
3
+ <head>
4
+ <!-- NAME: EDUCATE -->
5
+ <!--[if gte mso 15]>
6
+ <xml>
7
+ <o:OfficeDocumentSettings>
8
+ <o:AllowPNG/>
9
+ <o:PixelsPerInch>96</o:PixelsPerInch>
10
+ </o:OfficeDocumentSettings>
11
+ </xml>
12
+ <![endif]-->
13
+ <meta charset="UTF-8">
14
+ <meta http-equiv="X-UA-Compatible" content="IE=edge">
15
+ <meta name="viewport" content="width=device-width, initial-scale=1">
16
+ <title>*|MC:SUBJECT|*</title>
17
+
18
+ <style type="text/css">
19
+ p{
20
+ margin:10px 0;
21
+ padding:0;
22
+ }
23
+ table{
24
+ border-collapse:collapse;
25
+ }
26
+ h1,h2,h3,h4,h5,h6{
27
+ display:block;
28
+ margin:0;
29
+ padding:0;
30
+ }
31
+ img,a img{
32
+ border:0;
33
+ height:auto;
34
+ outline:none;
35
+ text-decoration:none;
36
+ }
37
+ body,#bodyTable,#bodyCell{
38
+ height:100%;
39
+ margin:0;
40
+ padding:0;
41
+ width:100%;
42
+ }
43
+ .mcnPreviewText{
44
+ display:none !important;
45
+ }
46
+ #outlook a{
47
+ padding:0;
48
+ }
49
+ img{
50
+ -ms-interpolation-mode:bicubic;
51
+ }
52
+ table{
53
+ mso-table-lspace:0pt;
54
+ mso-table-rspace:0pt;
55
+ }
56
+ .ReadMsgBody{
57
+ width:100%;
58
+ }
59
+ .ExternalClass{
60
+ width:100%;
61
+ }
62
+ p,a,li,td,blockquote{
63
+ mso-line-height-rule:exactly;
64
+ }
65
+ a[href^=tel],a[href^=sms]{
66
+ color:inherit;
67
+ cursor:default;
68
+ text-decoration:none;
69
+ }
70
+ p,a,li,td,body,table,blockquote{
71
+ -ms-text-size-adjust:100%;
72
+ -webkit-text-size-adjust:100%;
73
+ }
74
+ .ExternalClass,.ExternalClass p,.ExternalClass td,.ExternalClass div,.ExternalClass span,.ExternalClass font{
75
+ line-height:100%;
76
+ }
77
+ a[x-apple-data-detectors]{
78
+ color:inherit !important;
79
+ text-decoration:none !important;
80
+ font-size:inherit !important;
81
+ font-family:inherit !important;
82
+ font-weight:inherit !important;
83
+ line-height:inherit !important;
84
+ }
85
+ .templateContainer{
86
+ max-width:600px !important;
87
+ }
88
+ a.mcnButton{
89
+ display:block;
90
+ }
91
+ .mcnImage{
92
+ vertical-align:bottom;
93
+ }
94
+ .mcnTextContent{
95
+ word-break:break-word;
96
+ }
97
+ .mcnTextContent img{
98
+ height:auto !important;
99
+ }
100
+ .mcnDividerBlock{
101
+ table-layout:fixed !important;
102
+ }
103
+ /*
104
+ @tab Page
105
+ @section Heading 1
106
+ @style heading 1
107
+ */
108
+ h1{
109
+ /*@editable*/color:#222222;
110
+ /*@editable*/font-family:Helvetica;
111
+ /*@editable*/font-size:40px;
112
+ /*@editable*/font-style:normal;
113
+ /*@editable*/font-weight:bold;
114
+ /*@editable*/line-height:150%;
115
+ /*@editable*/letter-spacing:normal;
116
+ /*@editable*/text-align:left;
117
+ }
118
+ /*
119
+ @tab Page
120
+ @section Heading 2
121
+ @style heading 2
122
+ */
123
+ h2{
124
+ /*@editable*/color:#222222;
125
+ /*@editable*/font-family:Helvetica;
126
+ /*@editable*/font-size:28px;
127
+ /*@editable*/font-style:normal;
128
+ /*@editable*/font-weight:bold;
129
+ /*@editable*/line-height:150%;
130
+ /*@editable*/letter-spacing:normal;
131
+ /*@editable*/text-align:left;
132
+ }
133
+ /*
134
+ @tab Page
135
+ @section Heading 3
136
+ @style heading 3
137
+ */
138
+ h3{
139
+ /*@editable*/color:#444444;
140
+ /*@editable*/font-family:Helvetica;
141
+ /*@editable*/font-size:22px;
142
+ /*@editable*/font-style:normal;
143
+ /*@editable*/font-weight:bold;
144
+ /*@editable*/line-height:150%;
145
+ /*@editable*/letter-spacing:normal;
146
+ /*@editable*/text-align:left;
147
+ }
148
+ /*
149
+ @tab Page
150
+ @section Heading 4
151
+ @style heading 4
152
+ */
153
+ h4{
154
+ /*@editable*/color:#999999;
155
+ /*@editable*/font-family:Georgia;
156
+ /*@editable*/font-size:20px;
157
+ /*@editable*/font-style:italic;
158
+ /*@editable*/font-weight:normal;
159
+ /*@editable*/line-height:125%;
160
+ /*@editable*/letter-spacing:normal;
161
+ /*@editable*/text-align:left;
162
+ }
163
+ /*
164
+ @tab Header
165
+ @section Header Container Style
166
+ */
167
+ #templateHeader{
168
+ /*@editable*/background-color:#F7F7F7;
169
+ /*@editable*/background-image:none;
170
+ /*@editable*/background-repeat:no-repeat;
171
+ /*@editable*/background-position:center;
172
+ /*@editable*/background-size:cover;
173
+ /*@editable*/border-top:0;
174
+ /*@editable*/border-bottom:0;
175
+ /*@editable*/padding-top:54px;
176
+ /*@editable*/padding-bottom:54px;
177
+ }
178
+ /*
179
+ @tab Header
180
+ @section Header Interior Style
181
+ */
182
+ .headerContainer{
183
+ /*@editable*/background-color:transparent;
184
+ /*@editable*/background-image:none;
185
+ /*@editable*/background-repeat:no-repeat;
186
+ /*@editable*/background-position:center;
187
+ /*@editable*/background-size:cover;
188
+ /*@editable*/border-top:0;
189
+ /*@editable*/border-bottom:0;
190
+ /*@editable*/padding-top:0;
191
+ /*@editable*/padding-bottom:0;
192
+ }
193
+ /*
194
+ @tab Header
195
+ @section Header Text
196
+ */
197
+ .headerContainer .mcnTextContent,.headerContainer .mcnTextContent p{
198
+ /*@editable*/color:#808080;
199
+ /*@editable*/font-family:Helvetica;
200
+ /*@editable*/font-size:16px;
201
+ /*@editable*/line-height:150%;
202
+ /*@editable*/text-align:left;
203
+ }
204
+ /*
205
+ @tab Header
206
+ @section Header Link
207
+ */
208
+ .headerContainer .mcnTextContent a,.headerContainer .mcnTextContent p a{
209
+ /*@editable*/color:#00ADD8;
210
+ /*@editable*/font-weight:normal;
211
+ /*@editable*/text-decoration:underline;
212
+ }
213
+ /*
214
+ @tab Body
215
+ @section Body Container Style
216
+ */
217
+ #templateBody{
218
+ /*@editable*/background-color:#FFFFFF;
219
+ /*@editable*/background-image:none;
220
+ /*@editable*/background-repeat:no-repeat;
221
+ /*@editable*/background-position:center;
222
+ /*@editable*/background-size:cover;
223
+ /*@editable*/border-top:0;
224
+ /*@editable*/border-bottom:0;
225
+ /*@editable*/padding-top:27px;
226
+ /*@editable*/padding-bottom:63px;
227
+ }
228
+ /*
229
+ @tab Body
230
+ @section Body Interior Style
231
+ */
232
+ .bodyContainer{
233
+ /*@editable*/background-color:transparent;
234
+ /*@editable*/background-image:none;
235
+ /*@editable*/background-repeat:no-repeat;
236
+ /*@editable*/background-position:center;
237
+ /*@editable*/background-size:cover;
238
+ /*@editable*/border-top:0;
239
+ /*@editable*/border-bottom:0;
240
+ /*@editable*/padding-top:0;
241
+ /*@editable*/padding-bottom:0;
242
+ }
243
+ /*
244
+ @tab Body
245
+ @section Body Text
246
+ */
247
+ .bodyContainer .mcnTextContent,.bodyContainer .mcnTextContent p{
248
+ /*@editable*/color:#808080;
249
+ /*@editable*/font-family:Helvetica;
250
+ /*@editable*/font-size:16px;
251
+ /*@editable*/line-height:150%;
252
+ /*@editable*/text-align:left;
253
+ }
254
+ /*
255
+ @tab Body
256
+ @section Body Link
257
+ */
258
+ .bodyContainer .mcnTextContent a,.bodyContainer .mcnTextContent p a{
259
+ /*@editable*/color:#00ADD8;
260
+ /*@editable*/font-weight:normal;
261
+ /*@editable*/text-decoration:underline;
262
+ }
263
+ /*
264
+ @tab Footer
265
+ @section Footer Style
266
+ */
267
+ #templateFooter{
268
+ /*@editable*/background-color:#333333;
269
+ /*@editable*/background-image:none;
270
+ /*@editable*/background-repeat:no-repeat;
271
+ /*@editable*/background-position:center;
272
+ /*@editable*/background-size:cover;
273
+ /*@editable*/border-top:0;
274
+ /*@editable*/border-bottom:0;
275
+ /*@editable*/padding-top:45px;
276
+ /*@editable*/padding-bottom:63px;
277
+ }
278
+ /*
279
+ @tab Footer
280
+ @section Footer Interior Style
281
+ */
282
+ .footerContainer{
283
+ /*@editable*/background-color:transparent;
284
+ /*@editable*/background-image:none;
285
+ /*@editable*/background-repeat:no-repeat;
286
+ /*@editable*/background-position:center;
287
+ /*@editable*/background-size:cover;
288
+ /*@editable*/border-top:0;
289
+ /*@editable*/border-bottom:0;
290
+ /*@editable*/padding-top:0;
291
+ /*@editable*/padding-bottom:0;
292
+ }
293
+ /*
294
+ @tab Footer
295
+ @section Footer Text
296
+ */
297
+ .footerContainer .mcnTextContent,.footerContainer .mcnTextContent p{
298
+ /*@editable*/color:#FFFFFF;
299
+ /*@editable*/font-family:Helvetica;
300
+ /*@editable*/font-size:12px;
301
+ /*@editable*/line-height:150%;
302
+ /*@editable*/text-align:center;
303
+ }
304
+ /*
305
+ @tab Footer
306
+ @section Footer Link
307
+ */
308
+ .footerContainer .mcnTextContent a,.footerContainer .mcnTextContent p a{
309
+ /*@editable*/color:#FFFFFF;
310
+ /*@editable*/font-weight:normal;
311
+ /*@editable*/text-decoration:underline;
312
+ }
313
+ @media only screen and (min-width:768px){
314
+ .templateContainer{
315
+ width:600px !important;
316
+ }
317
+
318
+ } @media only screen and (max-width: 480px){
319
+ body,table,td,p,a,li,blockquote{
320
+ -webkit-text-size-adjust:none !important;
321
+ }
322
+
323
+ } @media only screen and (max-width: 480px){
324
+ body{
325
+ width:100% !important;
326
+ min-width:100% !important;
327
+ }
328
+
329
+ } @media only screen and (max-width: 480px){
330
+ .mcnImage{
331
+ width:100% !important;
332
+ }
333
+
334
+ } @media only screen and (max-width: 480px){
335
+ .mcnCartContainer,.mcnCaptionTopContent,.mcnRecContentContainer,.mcnCaptionBottomContent,.mcnTextContentContainer,.mcnBoxedTextContentContainer,.mcnImageGroupContentContainer,.mcnCaptionLeftTextContentContainer,.mcnCaptionRightTextContentContainer,.mcnCaptionLeftImageContentContainer,.mcnCaptionRightImageContentContainer,.mcnImageCardLeftTextContentContainer,.mcnImageCardRightTextContentContainer{
336
+ max-width:100% !important;
337
+ width:100% !important;
338
+ }
339
+
340
+ } @media only screen and (max-width: 480px){
341
+ .mcnBoxedTextContentContainer{
342
+ min-width:100% !important;
343
+ }
344
+
345
+ } @media only screen and (max-width: 480px){
346
+ .mcnImageGroupContent{
347
+ padding:9px !important;
348
+ }
349
+
350
+ } @media only screen and (max-width: 480px){
351
+ .mcnCaptionLeftContentOuter .mcnTextContent,.mcnCaptionRightContentOuter .mcnTextContent{
352
+ padding-top:9px !important;
353
+ }
354
+
355
+ } @media only screen and (max-width: 480px){
356
+ .mcnImageCardTopImageContent,.mcnCaptionBlockInner .mcnCaptionTopContent:last-child .mcnTextContent{
357
+ padding-top:18px !important;
358
+ }
359
+
360
+ } @media only screen and (max-width: 480px){
361
+ .mcnImageCardBottomImageContent{
362
+ padding-bottom:9px !important;
363
+ }
364
+
365
+ } @media only screen and (max-width: 480px){
366
+ .mcnImageGroupBlockInner{
367
+ padding-top:0 !important;
368
+ padding-bottom:0 !important;
369
+ }
370
+
371
+ } @media only screen and (max-width: 480px){
372
+ .mcnImageGroupBlockOuter{
373
+ padding-top:9px !important;
374
+ padding-bottom:9px !important;
375
+ }
376
+
377
+ } @media only screen and (max-width: 480px){
378
+ .mcnTextContent,.mcnBoxedTextContentColumn{
379
+ padding-right:18px !important;
380
+ padding-left:18px !important;
381
+ }
382
+
383
+ } @media only screen and (max-width: 480px){
384
+ .mcnImageCardLeftImageContent,.mcnImageCardRightImageContent{
385
+ padding-right:18px !important;
386
+ padding-bottom:0 !important;
387
+ padding-left:18px !important;
388
+ }
389
+
390
+ } @media only screen and (max-width: 480px){
391
+ .mcpreview-image-uploader{
392
+ display:none !important;
393
+ width:100% !important;
394
+ }
395
+
396
+ } @media only screen and (max-width: 480px){
397
+ /*
398
+ @tab Mobile Styles
399
+ @section Heading 1
400
+ @tip Make the first-level headings larger in size for better readability on small screens.
401
+ */
402
+ h1{
403
+ /*@editable*/font-size:30px !important;
404
+ /*@editable*/line-height:125% !important;
405
+ }
406
+
407
+ } @media only screen and (max-width: 480px){
408
+ /*
409
+ @tab Mobile Styles
410
+ @section Heading 2
411
+ @tip Make the second-level headings larger in size for better readability on small screens.
412
+ */
413
+ h2{
414
+ /*@editable*/font-size:26px !important;
415
+ /*@editable*/line-height:125% !important;
416
+ }
417
+
418
+ } @media only screen and (max-width: 480px){
419
+ /*
420
+ @tab Mobile Styles
421
+ @section Heading 3
422
+ @tip Make the third-level headings larger in size for better readability on small screens.
423
+ */
424
+ h3{
425
+ /*@editable*/font-size:20px !important;
426
+ /*@editable*/line-height:150% !important;
427
+ }
428
+
429
+ } @media only screen and (max-width: 480px){
430
+ /*
431
+ @tab Mobile Styles
432
+ @section Heading 4
433
+ @tip Make the fourth-level headings larger in size for better readability on small screens.
434
+ */
435
+ h4{
436
+ /*@editable*/font-size:18px !important;
437
+ /*@editable*/line-height:150% !important;
438
+ }
439
+
440
+ } @media only screen and (max-width: 480px){
441
+ /*
442
+ @tab Mobile Styles
443
+ @section Boxed Text
444
+ @tip Make the boxed text larger in size for better readability on small screens. We recommend a font size of at least 16px.
445
+ */
446
+ .mcnBoxedTextContentContainer .mcnTextContent,.mcnBoxedTextContentContainer .mcnTextContent p{
447
+ /*@editable*/font-size:14px !important;
448
+ /*@editable*/line-height:150% !important;
449
+ }
450
+
451
+ } @media only screen and (max-width: 480px){
452
+ /*
453
+ @tab Mobile Styles
454
+ @section Header Text
455
+ @tip Make the header text larger in size for better readability on small screens.
456
+ */
457
+ .headerContainer .mcnTextContent,.headerContainer .mcnTextContent p{
458
+ /*@editable*/font-size:16px !important;
459
+ /*@editable*/line-height:150% !important;
460
+ }
461
+
462
+ } @media only screen and (max-width: 480px){
463
+ /*
464
+ @tab Mobile Styles
465
+ @section Body Text
466
+ @tip Make the body text larger in size for better readability on small screens. We recommend a font size of at least 16px.
467
+ */
468
+ .bodyContainer .mcnTextContent,.bodyContainer .mcnTextContent p{
469
+ /*@editable*/font-size:16px !important;
470
+ /*@editable*/line-height:150% !important;
471
+ }
472
+
473
+ } @media only screen and (max-width: 480px){
474
+ /*
475
+ @tab Mobile Styles
476
+ @section Footer Text
477
+ @tip Make the footer content text larger in size for better readability on small screens.
478
+ */
479
+ .footerContainer .mcnTextContent,.footerContainer .mcnTextContent p{
480
+ /*@editable*/font-size:14px !important;
481
+ /*@editable*/line-height:150% !important;
482
+ }
483
+
484
+ }</style></head>
485
+ <body>
486
+ <!--*|IF:MC_PREVIEW_TEXT|*-->
487
+ <!--[if !gte mso 9]><!----><span class="mcnPreviewText" style="display:none; font-size:0px; line-height:0px; max-height:0px; max-width:0px; opacity:0; overflow:hidden; visibility:hidden; mso-hide:all;">*|MC_PREVIEW_TEXT|*</span><!--<![endif]-->
488
+ <!--*|END:IF|*-->
489
+ <center>
490
+ <table align="center" border="0" cellpadding="0" cellspacing="0" height="100%" width="100%" id="bodyTable">
491
+ <tr>
492
+ <td align="center" valign="top" id="bodyCell">
493
+ <!-- BEGIN TEMPLATE // -->
494
+ <table border="0" cellpadding="0" cellspacing="0" width="100%">
495
+ <tr>
496
+ <td align="center" valign="top" id="templateHeader" data-template-container>
497
+ <!--[if gte mso 9]>
498
+ <table align="center" border="0" cellspacing="0" cellpadding="0" width="600" style="width:600px;">
499
+ <tr>
500
+ <td align="center" valign="top" width="600" style="width:600px;">
501
+ <![endif]-->
502
+ <table align="center" border="0" cellpadding="0" cellspacing="0" width="100%" class="templateContainer">
503
+ <tr>
504
+ <td valign="top" class="headerContainer"><table border="0" cellpadding="0" cellspacing="0" width="100%" class="mcnImageBlock" style="min-width:100%;">
505
+ <tbody class="mcnImageBlockOuter">
506
+ <tr>
507
+ <td valign="top" style="padding:9px" class="mcnImageBlockInner">
508
+ <table align="left" width="100%" border="0" cellpadding="0" cellspacing="0" class="mcnImageContentContainer" style="min-width:100%;">
509
+ <tbody><tr>
510
+ <td class="mcnImageContent" valign="top" style="padding-right: 9px; padding-left: 9px; padding-top: 0; padding-bottom: 0; text-align:center;">
511
+
512
+
513
+ <img align="center" alt="" src="https://gallery.mailchimp.com/576914de5846fd5459862a592/images/f83f4675-ccb0-4589-b812-a17f1cd5323a.png" width="98" style="max-width:196px; padding-bottom: 0; display: inline !important; vertical-align: bottom;" class="mcnImage">
514
+
515
+ </td>
516
+ </tr>
517
+ </tbody></table>
518
+ </td>
519
+ </tr>
520
+ </tbody>
521
+ </table></td>
522
+ </tr>
523
+ </table>
524
+ <!--[if gte mso 9]>
525
+ </td>
526
+ </tr>
527
+ </table>
528
+ <![endif]-->
529
+ </td>
530
+ </tr>
531
+ <tr>
532
+ <td align="center" valign="top" id="templateBody" data-template-container>
533
+ <!--[if gte mso 9]>
534
+ <table align="center" border="0" cellspacing="0" cellpadding="0" width="600" style="width:600px;">
535
+ <tr>
536
+ <td align="center" valign="top" width="600" style="width:600px;">
537
+ <![endif]-->
538
+ <table align="center" border="0" cellpadding="0" cellspacing="0" width="100%" class="templateContainer">
539
+ <tr>
540
+ <td valign="top" class="bodyContainer"><table border="0" cellpadding="0" cellspacing="0" width="100%" class="mcnTextBlock" style="min-width:100%;">
541
+ <tbody class="mcnTextBlockOuter">
542
+ <tr>
543
+ <td valign="top" class="mcnTextBlockInner" style="padding-top:9px;">
544
+ <!--[if mso]>
545
+ <table align="left" border="0" cellspacing="0" cellpadding="0" width="100%" style="width:100%;">
546
+ <tr>
547
+ <![endif]-->
548
+
549
+ <!--[if mso]>
550
+ <td valign="top" width="600" style="width:600px;">
551
+ <![endif]-->
552
+ <table align="left" border="0" cellpadding="0" cellspacing="0" style="max-width:100%; min-width:100%;" width="100%" class="mcnTextContentContainer">
553
+ <tbody><tr>
554
+
555
+ <td valign="top" class="mcnTextContent" style="padding-top:0; padding-right:18px; padding-bottom:9px; padding-left:18px;">
556
+
557
+ <h2>Recupere a sua Senha.</h2><p style="font-size:18px !important;">
558
+ <%= @resource.name %>, <%= t '.request_reset_link_msg' %></p>
559
+ <p style="font-size:18px !important;"><%= t '.request_reset_link_msg' %></p>
560
+ </td>
561
+ </tr>
562
+ </tbody></table>
563
+ <!--[if mso]>
564
+ </td>
565
+ <![endif]-->
566
+
567
+ <!--[if mso]>
568
+ </tr>
569
+ </table>
570
+ <![endif]-->
571
+ </td>
572
+ </tr>
573
+ </tbody>
574
+ </table><table border="0" cellpadding="0" cellspacing="0" width="100%" class="mcnDividerBlock" style="min-width:100%;">
575
+ <tbody class="mcnDividerBlockOuter">
576
+ <tr>
577
+ <td class="mcnDividerBlockInner" style="min-width: 100%; padding: 18px 18px 0px;">
578
+ <table class="mcnDividerContent" border="0" cellpadding="0" cellspacing="0" width="100%" style="min-width:100%;">
579
+ <tbody><tr>
580
+ <td>
581
+ <span></span>
582
+ </td>
583
+ </tr>
584
+ </tbody></table>
585
+ <!--
586
+ <td class="mcnDividerBlockInner" style="padding: 18px;">
587
+ <hr class="mcnDividerContent" style="border-bottom-color:none; border-left-color:none; border-right-color:none; border-bottom-width:0; border-left-width:0; border-right-width:0; margin-top:0; margin-right:0; margin-bottom:0; margin-left:0;" />
588
+ -->
589
+ </td>
590
+ </tr>
591
+ </tbody>
592
+ </table><table border="0" cellpadding="0" cellspacing="0" width="100%" class="mcnButtonBlock" style="min-width:100%;">
593
+ <tbody class="mcnButtonBlockOuter">
594
+ <tr>
595
+ <td style="padding-top:0; padding-right:18px; padding-bottom:18px; padding-left:18px;" valign="top" align="center" class="mcnButtonBlockInner">
596
+ <table border="0" cellpadding="0" cellspacing="0" class="mcnButtonContentContainer" style="border-collapse: separate !important;border-radius: 3px;background-color: #F15E24;">
597
+ <tbody>
598
+ <tr>
599
+ <td align="center" valign="middle" class="mcnButtonContent" style="font-family: Helvetica; font-size: 18px; padding: 18px;">
600
+ <p><%= link_to(t('.password_change_link'), new_password_url(token: @token).html_safe, class: "mcnButton", style: "font-weight: bold;letter-spacing: -0.5px;line-height: 100%;text-align: center;text-decoration: none;color: #FFFFFF;") %></p>
601
+ </td>
602
+ </tr>
603
+ </tbody>
604
+ </table>
605
+ </td>
606
+ </tr>
607
+ </tbody>
608
+ </table><table border="0" cellpadding="0" cellspacing="0" width="100%" class="mcnBoxedTextBlock" style="min-width:100%;">
609
+ <!--[if gte mso 9]>
610
+ <table align="center" border="0" cellspacing="0" cellpadding="0" width="100%">
611
+ <![endif]-->
612
+ <tbody class="mcnBoxedTextBlockOuter">
613
+ <tr>
614
+ <td valign="top" class="mcnBoxedTextBlockInner">
615
+
616
+ <!--[if gte mso 9]>
617
+ <td align="center" valign="top" ">
618
+ <![endif]-->
619
+ <table align="left" border="0" cellpadding="0" cellspacing="0" width="100%" style="min-width:100%;" class="mcnBoxedTextContentContainer">
620
+ <tbody><tr>
621
+
622
+ <td style="padding-top:9px; padding-left:18px; padding-bottom:9px; padding-right:18px;">
623
+
624
+ <table border="0" cellpadding="18" cellspacing="0" class="mcnTextContentContainer" width="100%" style="min-width: 100% !important;background-color: #F7F7F7;">
625
+ <tbody><tr>
626
+ <td valign="top" class="mcnTextContent" style="text-align: center;">
627
+ <h3 style="text-align:center;">Loldesign</h3><p style="text-align:center !important;">Lorem ipsum dolor sit amet, consectetur adipisicing elit.</p>
628
+ </td>
629
+ </tr>
630
+ </tbody></table>
631
+ </td>
632
+ </tr>
633
+ </tbody></table>
634
+ <!--[if gte mso 9]>
635
+ </td>
636
+ <![endif]-->
637
+
638
+ <!--[if gte mso 9]>
639
+ </tr>
640
+ </table>
641
+ <![endif]-->
642
+ </td>
643
+ </tr>
644
+ </tbody>
645
+ </table></td>
646
+ </tr>
647
+ </table>
648
+ <!--[if gte mso 9]>
649
+ </td>
650
+ </tr>
651
+ </table>
652
+ <![endif]-->
653
+ </td>
654
+ </tr>
655
+ <tr>
656
+ <td align="center" valign="top" id="templateFooter" data-template-container>
657
+ <!--[if gte mso 9]>
658
+ <table align="center" border="0" cellspacing="0" cellpadding="0" width="600" style="width:600px;">
659
+ <tr>
660
+ <td align="center" valign="top" width="600" style="width:600px;">
661
+ <![endif]-->
662
+ <table align="center" border="0" cellpadding="0" cellspacing="0" width="100%" class="templateContainer">
663
+ <tr>
664
+ <td valign="top" class="footerContainer"><table border="0" cellpadding="0" cellspacing="0" width="100%" class="mcnFollowBlock" style="min-width:100%;">
665
+ <tbody class="mcnFollowBlockOuter">
666
+ <tr>
667
+ <td align="center" valign="top" style="padding:9px" class="mcnFollowBlockInner">
668
+ <table border="0" cellpadding="0" cellspacing="0" width="100%" class="mcnFollowContentContainer" style="min-width:100%;">
669
+ <tbody><tr>
670
+ <td align="center" style="padding-left:9px;padding-right:9px;">
671
+ <table border="0" cellpadding="0" cellspacing="0" width="100%" style="min-width:100%;" class="mcnFollowContent">
672
+ <tbody><tr>
673
+ <td align="center" valign="top" style="padding-top:9px; padding-right:9px; padding-left:9px;">
674
+ <table align="center" border="0" cellpadding="0" cellspacing="0">
675
+ <tbody><tr>
676
+ <td align="center" valign="top">
677
+ <!--[if mso]>
678
+ <table align="center" border="0" cellspacing="0" cellpadding="0">
679
+ <tr>
680
+ <![endif]-->
681
+
682
+ <!--[if mso]>
683
+ <td align="center" valign="top">
684
+ <![endif]-->
685
+
686
+
687
+ <table align="left" border="0" cellpadding="0" cellspacing="0" style="display:inline;">
688
+ <tbody><tr>
689
+ <td valign="top" style="padding-right:10px; padding-bottom:9px;" class="mcnFollowContentItemContainer">
690
+ <table border="0" cellpadding="0" cellspacing="0" width="100%" class="mcnFollowContentItem">
691
+ <tbody><tr>
692
+ <td align="left" valign="middle" style="padding-top:5px; padding-right:10px; padding-bottom:5px; padding-left:9px;">
693
+ <table align="left" border="0" cellpadding="0" cellspacing="0" width="">
694
+ <tbody><tr>
695
+
696
+ <td align="center" valign="middle" width="24" class="mcnFollowIconContent">
697
+ <a href="https://www.facebook.com/loldesign.com.br/" target="_blank"><img src="https://cdn-images.mailchimp.com/icons/social-block-v2/outline-light-facebook-48.png" style="display:block;" height="24" width="24" class=""></a>
698
+ </td>
699
+
700
+
701
+ </tr>
702
+ </tbody></table>
703
+ </td>
704
+ </tr>
705
+ </tbody></table>
706
+ </td>
707
+ </tr>
708
+ </tbody></table>
709
+
710
+ <!--[if mso]>
711
+ </td>
712
+ <![endif]-->
713
+
714
+ <!--[if mso]>
715
+ <td align="center" valign="top">
716
+ <![endif]-->
717
+
718
+
719
+ <table align="left" border="0" cellpadding="0" cellspacing="0" style="display:inline;">
720
+ <tbody><tr>
721
+ <td valign="top" style="padding-right:10px; padding-bottom:9px;" class="mcnFollowContentItemContainer">
722
+ <table border="0" cellpadding="0" cellspacing="0" width="100%" class="mcnFollowContentItem">
723
+ <tbody><tr>
724
+ <td align="left" valign="middle" style="padding-top:5px; padding-right:10px; padding-bottom:5px; padding-left:9px;">
725
+ <table align="left" border="0" cellpadding="0" cellspacing="0" width="">
726
+ <tbody><tr>
727
+
728
+ <td align="center" valign="middle" width="24" class="mcnFollowIconContent">
729
+ <a href="https://twitter.com/LolDesign_BR" target="_blank"><img src="https://cdn-images.mailchimp.com/icons/social-block-v2/outline-light-twitter-48.png" style="display:block;" height="24" width="24" class=""></a>
730
+ </td>
731
+
732
+
733
+ </tr>
734
+ </tbody></table>
735
+ </td>
736
+ </tr>
737
+ </tbody></table>
738
+ </td>
739
+ </tr>
740
+ </tbody></table>
741
+
742
+ <!--[if mso]>
743
+ </td>
744
+ <![endif]-->
745
+
746
+ <!--[if mso]>
747
+ <td align="center" valign="top">
748
+ <![endif]-->
749
+
750
+
751
+ <table align="left" border="0" cellpadding="0" cellspacing="0" style="display:inline;">
752
+ <tbody><tr>
753
+ <td valign="top" style="padding-right:10px; padding-bottom:9px;" class="mcnFollowContentItemContainer">
754
+ <table border="0" cellpadding="0" cellspacing="0" width="100%" class="mcnFollowContentItem">
755
+ <tbody><tr>
756
+ <td align="left" valign="middle" style="padding-top:5px; padding-right:10px; padding-bottom:5px; padding-left:9px;">
757
+ <table align="left" border="0" cellpadding="0" cellspacing="0" width="">
758
+ <tbody><tr>
759
+
760
+ <td align="center" valign="middle" width="24" class="mcnFollowIconContent">
761
+ <a href="https://www.instagram.com/loldesign_/" target="_blank"><img src="https://cdn-images.mailchimp.com/icons/social-block-v2/outline-light-instagram-48.png" style="display:block;" height="24" width="24" class=""></a>
762
+ </td>
763
+
764
+
765
+ </tr>
766
+ </tbody></table>
767
+ </td>
768
+ </tr>
769
+ </tbody></table>
770
+ </td>
771
+ </tr>
772
+ </tbody></table>
773
+
774
+ <!--[if mso]>
775
+ </td>
776
+ <![endif]-->
777
+
778
+ <!--[if mso]>
779
+ <td align="center" valign="top">
780
+ <![endif]-->
781
+
782
+
783
+ <table align="left" border="0" cellpadding="0" cellspacing="0" style="display:inline;">
784
+ <tbody><tr>
785
+ <td valign="top" style="padding-right:0; padding-bottom:9px;" class="mcnFollowContentItemContainer">
786
+ <table border="0" cellpadding="0" cellspacing="0" width="100%" class="mcnFollowContentItem">
787
+ <tbody><tr>
788
+ <td align="left" valign="middle" style="padding-top:5px; padding-right:10px; padding-bottom:5px; padding-left:9px;">
789
+ <table align="left" border="0" cellpadding="0" cellspacing="0" width="">
790
+ <tbody><tr>
791
+
792
+ <td align="center" valign="middle" width="24" class="mcnFollowIconContent">
793
+ <a href="http://www.loldesign.com.br/" target="_blank"><img src="https://cdn-images.mailchimp.com/icons/social-block-v2/outline-light-link-48.png" style="display:block;" height="24" width="24" class=""></a>
794
+ </td>
795
+ </tr>
796
+ </tbody></table>
797
+ </td>
798
+ </tr>
799
+ </tbody></table>
800
+ </td>
801
+ </tr>
802
+ </tbody></table>
803
+
804
+ <!--[if mso]>
805
+ </td>
806
+ <![endif]-->
807
+
808
+ <!--[if mso]>
809
+ </tr>
810
+ </table>
811
+ <![endif]-->
812
+ </td>
813
+ </tr>
814
+ </tbody></table>
815
+ </td>
816
+ </tr>
817
+ </tbody></table>
818
+ </td>
819
+ </tr>
820
+ </tbody></table>
821
+
822
+ </td>
823
+ </tr>
824
+ </tbody>
825
+ </table><table border="0" cellpadding="0" cellspacing="0" width="100%" class="mcnDividerBlock" style="min-width:100%;">
826
+ <tbody class="mcnDividerBlockOuter">
827
+ <tr>
828
+ <td class="mcnDividerBlockInner" style="min-width:100%; padding:18px;">
829
+ <table class="mcnDividerContent" border="0" cellpadding="0" cellspacing="0" width="100%" style="min-width: 100%;border-top: 2px solid #505050;">
830
+ <tbody><tr>
831
+ <td>
832
+ <span></span>
833
+ </td>
834
+ </tr>
835
+ </tbody></table>
836
+ <!--
837
+ <td class="mcnDividerBlockInner" style="padding: 18px;">
838
+ <hr class="mcnDividerContent" style="border-bottom-color:none; border-left-color:none; border-right-color:none; border-bottom-width:0; border-left-width:0; border-right-width:0; margin-top:0; margin-right:0; margin-bottom:0; margin-left:0;" />
839
+ -->
840
+ </td>
841
+ </tr>
842
+ </tbody>
843
+ </table><table border="0" cellpadding="0" cellspacing="0" width="100%" class="mcnTextBlock" style="min-width:100%;">
844
+ <tbody class="mcnTextBlockOuter">
845
+ <tr>
846
+ <td valign="top" class="mcnTextBlockInner" style="padding-top:9px;">
847
+ <!--[if mso]>
848
+ <table align="left" border="0" cellspacing="0" cellpadding="0" width="100%" style="width:100%;">
849
+ <tr>
850
+ <![endif]-->
851
+
852
+ <!--[if mso]>
853
+ <td valign="top" width="600" style="width:600px;">
854
+ <![endif]-->
855
+ <table align="left" border="0" cellpadding="0" cellspacing="0" style="max-width:100%; min-width:100%;" width="100%" class="mcnTextContentContainer">
856
+ <tbody><tr>
857
+
858
+ <td valign="top" class="mcnTextContent" style="padding-top:0; padding-right:18px; padding-bottom:9px; padding-left:18px;">
859
+
860
+ <em>Copyright © *| <%= Time.now.year %> |* *|LOLDESIGN|*, All rights reserved.</em>
861
+
862
+ </td>
863
+ </tr>
864
+ </tbody></table>
865
+ <!--[if mso]>
866
+ </td>
867
+ <![endif]-->
868
+
869
+ <!--[if mso]>
870
+ </tr>
871
+ </table>
872
+ <![endif]-->
873
+ </td>
874
+ </tr>
875
+ </tbody>
876
+ </table></td>
877
+ </tr>
878
+ </table>
879
+ <!--[if gte mso 9]>
880
+ </td>
881
+ </tr>
882
+ </table>
883
+ <![endif]-->
884
+ </td>
885
+ </tr>
886
+ </table>
887
+ <!-- // END TEMPLATE -->
888
+ </td>
889
+ </tr>
890
+ </table>
891
+ </center>
892
+ </body>
893
+ </html>