remotty-rails 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/.gitignore +24 -0
- data/Gemfile +18 -0
- data/LICENSE.txt +22 -0
- data/README.md +234 -0
- data/Rakefile +2 -0
- data/app/controllers/remotty/base_application_controller.rb +36 -0
- data/app/controllers/remotty/users/base_controller.rb +16 -0
- data/app/controllers/remotty/users/confirmations_controller.rb +25 -0
- data/app/controllers/remotty/users/omniauth_callbacks_controller.rb +102 -0
- data/app/controllers/remotty/users/passwords_controller.rb +47 -0
- data/app/controllers/remotty/users/registrations_controller.rb +132 -0
- data/app/controllers/remotty/users/sessions_controller.rb +48 -0
- data/app/models/remotty/base_user.rb +83 -0
- data/app/serializers/remotty/user_serializer.rb +30 -0
- data/config/locales/ko.yml +58 -0
- data/lib/generators/remotty/rails/install_generator.rb +68 -0
- data/lib/generators/remotty/rails/templates/add_column_to_users.rb +42 -0
- data/lib/generators/remotty/rails/templates/auth_token.rb +22 -0
- data/lib/generators/remotty/rails/templates/create_auth_tokens.rb +28 -0
- data/lib/generators/remotty/rails/templates/create_oauth_authentications.rb +28 -0
- data/lib/generators/remotty/rails/templates/oauth_authentication.rb +18 -0
- data/lib/generators/remotty/rails/templates/paperclip_hash.rb +1 -0
- data/lib/generators/remotty/rails/templates/user_serializer.rb +3 -0
- data/lib/remotty/rails.rb +8 -0
- data/lib/remotty/rails/authentication.rb +6 -0
- data/lib/remotty/rails/authentication/json_auth_failure.rb +29 -0
- data/lib/remotty/rails/authentication/strategies/token_header_authenticable.rb +71 -0
- data/lib/remotty/rails/engine.rb +72 -0
- data/lib/remotty/rails/version.rb +5 -0
- data/rdoc.sh +3 -0
- data/remotty-rails.gemspec +35 -0
- metadata +231 -0
@@ -0,0 +1,47 @@
|
|
1
|
+
class Users::PasswordsController < Devise::PasswordsController
|
2
|
+
include Remotty::Users::BaseController
|
3
|
+
|
4
|
+
# POST /resource/password
|
5
|
+
# email주소를 이용해서 패스워드 변경 요청 메일을 발송함
|
6
|
+
#
|
7
|
+
# ==== return
|
8
|
+
# * +success+ - no_content
|
9
|
+
# * +failure+ - validation error message
|
10
|
+
#
|
11
|
+
def create
|
12
|
+
self.resource = resource_class.send_reset_password_instructions(resource_params)
|
13
|
+
yield resource if block_given?
|
14
|
+
|
15
|
+
if successfully_sent?(resource)
|
16
|
+
render nothing: true, status: :no_content
|
17
|
+
else
|
18
|
+
render_error 'VALIDATION_ERROR', resource.errors.full_messages.first
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
# PUT /resource/password
|
23
|
+
# 토큰을 이용한 패스워드 변경
|
24
|
+
# 성공시 자동으로 로그인을 시도하고 토큰을 생성함
|
25
|
+
#
|
26
|
+
# ==== return
|
27
|
+
# * +success+ - 로그인 후 user with token json return
|
28
|
+
# * +failure+ - unauthorized with error message
|
29
|
+
#
|
30
|
+
def update
|
31
|
+
self.resource = resource_class.reset_password_by_token(resource_params)
|
32
|
+
yield resource if block_given?
|
33
|
+
|
34
|
+
if resource.errors.empty?
|
35
|
+
resource.unlock_access! if unlockable?(resource)
|
36
|
+
sign_in resource_name, resource, :store => false
|
37
|
+
|
38
|
+
token = resource.generate_auth_token!(auth_source)
|
39
|
+
render json: resource.with_token(token)
|
40
|
+
else
|
41
|
+
render_error 'UNAUTHORIZED',
|
42
|
+
resource.errors.full_messages.first,
|
43
|
+
:unauthorized
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
end
|
@@ -0,0 +1,132 @@
|
|
1
|
+
class Remotty::Users::RegistrationsController < Devise::RegistrationsController
|
2
|
+
include Remotty::Users::BaseController
|
3
|
+
|
4
|
+
wrap_parameters :user, include: [:email, :name, :password, :password_confirmation, :current_password]
|
5
|
+
|
6
|
+
# POST /resource
|
7
|
+
# 회원가입
|
8
|
+
def create
|
9
|
+
build_resource(sign_up_params)
|
10
|
+
resource.use_password = true
|
11
|
+
|
12
|
+
# oauth정보가 있으면 validation 체크
|
13
|
+
if params[:oauth]
|
14
|
+
unless valid_credential?(oauth_params)
|
15
|
+
render_error 'UNAUTHORIZED', 'Oauth credentials information is invalid', :unauthorized and return
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
if resource.save
|
20
|
+
yield resource if block_given?
|
21
|
+
|
22
|
+
resource.add_oauth_info(oauth_params) if params[:oauth]
|
23
|
+
|
24
|
+
if resource.active_for_authentication?
|
25
|
+
sign_up(resource_name, resource)
|
26
|
+
|
27
|
+
token = resource.generate_auth_token!(auth_source)
|
28
|
+
|
29
|
+
render json: resource.with_token(token)
|
30
|
+
else
|
31
|
+
expire_data_after_sign_in!
|
32
|
+
|
33
|
+
render_error 'UNAUTHORIZED',
|
34
|
+
find_message("signed_up_but_#{resource.inactive_message}"),
|
35
|
+
:unauthorized
|
36
|
+
end
|
37
|
+
else
|
38
|
+
clean_up_passwords resource
|
39
|
+
|
40
|
+
render_error 'VALIDATION_ERROR',
|
41
|
+
resource.errors.full_messages.first
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
# PUT /resource
|
46
|
+
# 회원정보 수정 (password 제외한 일반 정보)
|
47
|
+
def update
|
48
|
+
self.resource = resource_class.to_adapter.get!(send(:"current_#{resource_name}").to_key)
|
49
|
+
prev_unconfirmed_email = resource.unconfirmed_email if resource.respond_to?(:unconfirmed_email)
|
50
|
+
|
51
|
+
if account_update_params[:password].blank? # password 수정이 아니면
|
52
|
+
account_update_params.delete("password")
|
53
|
+
account_update_params.delete("password_confirmation")
|
54
|
+
|
55
|
+
if resource.update_without_password(account_update_params)
|
56
|
+
yield resource if block_given?
|
57
|
+
|
58
|
+
message_key = update_needs_confirmation?(resource, prev_unconfirmed_email) ?
|
59
|
+
:update_needs_confirmation : :updated
|
60
|
+
|
61
|
+
sign_in resource_name, resource, :bypass => true, :store => false
|
62
|
+
|
63
|
+
if message_key == :updated
|
64
|
+
render json: resource
|
65
|
+
else
|
66
|
+
render_error 'UNAUTHORIZED',
|
67
|
+
find_message(message_key),
|
68
|
+
:unauthorized
|
69
|
+
end
|
70
|
+
else
|
71
|
+
clean_up_passwords resource
|
72
|
+
|
73
|
+
render_error 'VALIDATION_ERROR',
|
74
|
+
resource.errors.full_messages.first
|
75
|
+
end
|
76
|
+
else # password 수정이면
|
77
|
+
if resource.use_password
|
78
|
+
resource.update_with_password(account_update_params)
|
79
|
+
else
|
80
|
+
resource.use_password = true
|
81
|
+
resource.update_attributes(account_update_params)
|
82
|
+
clean_up_passwords resource
|
83
|
+
end
|
84
|
+
|
85
|
+
if resource.errors.blank?
|
86
|
+
render json: resource
|
87
|
+
else
|
88
|
+
render_error 'VALIDATION_ERROR',
|
89
|
+
resource.errors.full_messages.first
|
90
|
+
end
|
91
|
+
end
|
92
|
+
end
|
93
|
+
|
94
|
+
# DELETE /resource
|
95
|
+
# 회원탈퇴
|
96
|
+
def destroy
|
97
|
+
resource.destroy
|
98
|
+
Devise.sign_out_all_scopes ? sign_out : sign_out(resource_name)
|
99
|
+
set_flash_message :notice, :destroyed if is_flashing_format?
|
100
|
+
yield resource if block_given?
|
101
|
+
render nothing: true, status: :no_content
|
102
|
+
end
|
103
|
+
|
104
|
+
private
|
105
|
+
|
106
|
+
def oauth_params
|
107
|
+
params.require(:oauth).permit :provider, :uid, info: [:name, :image], credentials: [:token, :secret, :expires_at]
|
108
|
+
end
|
109
|
+
|
110
|
+
# credential 체크
|
111
|
+
def valid_credential?(oauth_params)
|
112
|
+
if oauth_params['provider'] == 'twitter'
|
113
|
+
client = Twitter::REST::Client.new do |config|
|
114
|
+
config.consumer_key = Settings.omniauth.twitter.consumer_key
|
115
|
+
config.consumer_secret = Settings.omniauth.twitter.consumer_secret
|
116
|
+
config.access_token = oauth_params['credentials']['token']
|
117
|
+
config.access_token_secret = oauth_params['credentials']['secret']
|
118
|
+
end
|
119
|
+
|
120
|
+
begin
|
121
|
+
twitter_user = client.user
|
122
|
+
if twitter_user.id == oauth_params['uid'].to_i
|
123
|
+
return true
|
124
|
+
end
|
125
|
+
rescue Twitter::Error
|
126
|
+
return false
|
127
|
+
end
|
128
|
+
end
|
129
|
+
|
130
|
+
false
|
131
|
+
end
|
132
|
+
end
|
@@ -0,0 +1,48 @@
|
|
1
|
+
class Remotty::Users::SessionsController < Devise::SessionsController
|
2
|
+
include Remotty::Users::BaseController
|
3
|
+
include ActionController::Flash
|
4
|
+
wrap_parameters :user, include: [:email, :password]
|
5
|
+
|
6
|
+
# POST /resource/sign_in
|
7
|
+
# email과 password로 로그인
|
8
|
+
# 새로운 토큰 생성
|
9
|
+
#
|
10
|
+
# ==== return
|
11
|
+
# * +success+ - 로그인 후 user with token json return
|
12
|
+
# * +failure+ - unauthorized with error message
|
13
|
+
#
|
14
|
+
def create
|
15
|
+
self.resource = warden.authenticate!(:scope => resource_name)
|
16
|
+
sign_in(resource_name, resource, store: false)
|
17
|
+
yield resource if block_given?
|
18
|
+
token = resource.generate_auth_token!(auth_source)
|
19
|
+
render json: resource.with_token(token)
|
20
|
+
end
|
21
|
+
|
22
|
+
# DELETE /resource/sign_out
|
23
|
+
# 로그아웃. 로그인이 되어 있지 않아도 에러를 발생하지는 않음
|
24
|
+
# 토큰이용시 토큰을 삭제함
|
25
|
+
#
|
26
|
+
# ==== return
|
27
|
+
# * +success+ - no_content
|
28
|
+
# * +failure+ - no_content
|
29
|
+
#
|
30
|
+
def destroy
|
31
|
+
user = current_user
|
32
|
+
|
33
|
+
signed_out = (Devise.sign_out_all_scopes ? sign_out : sign_out(resource_name))
|
34
|
+
if signed_out
|
35
|
+
if user && request.headers["X-Auth-Token"].present?
|
36
|
+
auth_token = user.auth_tokens.where(token: Digest::SHA512.hexdigest(request.headers["X-Auth-Token"])).first
|
37
|
+
auth_token.destroy if auth_token
|
38
|
+
end
|
39
|
+
|
40
|
+
session.options[:skip] = true
|
41
|
+
response.headers['Set-Cookie'] = 'rack.session=; path=/; expires=Thu, 01-Jan-1970 00:00:00 GMT'
|
42
|
+
end
|
43
|
+
yield resource if block_given?
|
44
|
+
|
45
|
+
render nothing: true, status: :no_content
|
46
|
+
end
|
47
|
+
|
48
|
+
end
|
@@ -0,0 +1,83 @@
|
|
1
|
+
module Remotty::BaseUser
|
2
|
+
extend ActiveSupport::Concern
|
3
|
+
|
4
|
+
included do
|
5
|
+
has_many :auth_tokens, dependent: :destroy
|
6
|
+
has_many :oauth_authentications, dependent: :destroy
|
7
|
+
|
8
|
+
validates :name, presence: true
|
9
|
+
|
10
|
+
has_attached_file :avatar, :styles => { :original => "512x512#", :small => "200x200#", :thumb => "64x64#" }
|
11
|
+
validates_attachment_content_type :avatar, :content_type => /\Aimage\/.*\Z/
|
12
|
+
end
|
13
|
+
|
14
|
+
attr_accessor :auth_token
|
15
|
+
|
16
|
+
def generate_auth_token!(auth_source)
|
17
|
+
token = nil
|
18
|
+
|
19
|
+
loop do
|
20
|
+
token = Devise.friendly_token
|
21
|
+
break token unless self.auth_tokens.where(token: Digest::SHA512.hexdigest(token)).first
|
22
|
+
end
|
23
|
+
|
24
|
+
auth_token = AuthToken.create({user_id:self.id, token: Digest::SHA512.hexdigest(token)})
|
25
|
+
auth_token.update_source(auth_source[:source], auth_source[:info])
|
26
|
+
|
27
|
+
token
|
28
|
+
end
|
29
|
+
|
30
|
+
def with_token(token)
|
31
|
+
self.auth_token = token;
|
32
|
+
::UserSerializer.new(self)
|
33
|
+
end
|
34
|
+
|
35
|
+
# oauth authentication 추가
|
36
|
+
#
|
37
|
+
# * +auth+ : auth 정보
|
38
|
+
# * provider, uid, info(name, image), credentials(token, secret, expires_at)
|
39
|
+
#
|
40
|
+
def add_oauth_info(auth)
|
41
|
+
oauth = OauthAuthentication.find_or_create_by(provider: auth[:provider], uid: auth[:uid])
|
42
|
+
if oauth
|
43
|
+
oauth.update_with_credential(auth[:credentials])
|
44
|
+
oauth.user = self
|
45
|
+
oauth.save
|
46
|
+
end
|
47
|
+
|
48
|
+
if auth[:info][:image]
|
49
|
+
self.avatar_remote_url = auth[:info][:image]
|
50
|
+
self.save
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
# remote url attachment helper
|
55
|
+
#
|
56
|
+
def avatar_remote_url=(url)
|
57
|
+
avatar_url = process_uri(url)
|
58
|
+
self.avatar = URI.parse(avatar_url)
|
59
|
+
# Assuming url_value is http://example.com/photos/face.png
|
60
|
+
# avatar_file_name == "face.png"
|
61
|
+
# avatar_content_type == "image/png"
|
62
|
+
@avatar_remote_url = avatar_url
|
63
|
+
end
|
64
|
+
|
65
|
+
private
|
66
|
+
|
67
|
+
# fix uri redirection (http -> https)
|
68
|
+
def process_uri(uri)
|
69
|
+
ret = uri
|
70
|
+
|
71
|
+
require 'open-uri'
|
72
|
+
require 'open_uri_redirections'
|
73
|
+
begin
|
74
|
+
open(uri, :allow_redirections => :safe) do |r|
|
75
|
+
ret = r.base_uri.to_s
|
76
|
+
end
|
77
|
+
end
|
78
|
+
|
79
|
+
ret
|
80
|
+
end
|
81
|
+
end
|
82
|
+
|
83
|
+
|
@@ -0,0 +1,30 @@
|
|
1
|
+
# user serializer
|
2
|
+
#
|
3
|
+
# ==== column
|
4
|
+
# * +id+
|
5
|
+
# * +name+
|
6
|
+
# * +email+
|
7
|
+
# * +use_password+
|
8
|
+
# * +avatar+
|
9
|
+
# * +original+
|
10
|
+
# * +small+
|
11
|
+
# * +thumb+
|
12
|
+
# * +auth_token+
|
13
|
+
#
|
14
|
+
class Remotty::UserSerializer < ActiveModel::Serializer
|
15
|
+
attributes :id, :name, :email, :use_password, :avatar, :auth_token
|
16
|
+
|
17
|
+
def avatar
|
18
|
+
{
|
19
|
+
original:object.avatar.url,
|
20
|
+
small:object.avatar.url(:small),
|
21
|
+
thumb:object.avatar.url(:thumb)
|
22
|
+
}
|
23
|
+
end
|
24
|
+
|
25
|
+
def include_auth_token?
|
26
|
+
object.auth_token
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
|
@@ -0,0 +1,58 @@
|
|
1
|
+
# Additional translations at https://github.com/plataformatec/devise/wiki/I18n
|
2
|
+
|
3
|
+
ko:
|
4
|
+
errors:
|
5
|
+
messages:
|
6
|
+
expired: "가(이) 만료되었습니다. 새로 요청해 주십시오"
|
7
|
+
not_found: "를(을) 찾을 수 없습니다"
|
8
|
+
already_confirmed: "이미 확인되었습니다, 다시 로그인 해 주십시오"
|
9
|
+
not_locked: "가(이) 잠기지 않았습니다"
|
10
|
+
not_saved:
|
11
|
+
one: "1개의 에러가 발생해서 %{resource}를(을) 저장할 수 없습니다:"
|
12
|
+
other: "%{count}개의 에러가 발생해서 %{resource}를(을) 저장할 수 없습니다:"
|
13
|
+
|
14
|
+
devise:
|
15
|
+
failure:
|
16
|
+
already_authenticated: '이미 로그인하셨습니다.'
|
17
|
+
unauthenticated: '이용하시려면 로그인하거나 가입하셔야 합니다.'
|
18
|
+
unconfirmed: '계정 확인 하셔야 이용하실 수 있습니다.'
|
19
|
+
locked: '계정이 잠겼습니다.'
|
20
|
+
invalid: '이메일이나 패스워드가 다릅니다.'
|
21
|
+
invalid_token: '잘못된 인증 토큰 입니다.'
|
22
|
+
timeout: '세션이 만료되어습니다, 계속하시려면 로그인해주세요.'
|
23
|
+
inactive: '계정이 아직 활성화 되지 않았습니다. '
|
24
|
+
not_found_in_database: '이메일이나 패스워드가 다릅니다.'
|
25
|
+
sessions:
|
26
|
+
signed_in: '성공적으로 로그인 하셨습니다.'
|
27
|
+
signed_out: '성공적으로 로그아웃 하셨습니다.'
|
28
|
+
passwords:
|
29
|
+
send_instructions: '어떻게 비밀번호를 재설정하는지 안내하는 메일을 발송하였습니다. 잠시후 확인해 보세요.'
|
30
|
+
updated: '비밀번호를 성공적으로 변경했습니다. 이제 로그인된 상태입니다.'
|
31
|
+
updated_not_active: '비밀번호를 성공적으로 변경했습니다.'
|
32
|
+
send_paranoid_instructions: "데이터베이스에 고객님의 이메일 주소가 존재하면, 비밀번호 복구 링크가 담긴 이메일을 곧 받으실 수 있습니다."
|
33
|
+
confirmations:
|
34
|
+
send_instructions: '이메일 주소를 확인하는 메일을 발송하였습니다. 잠시후에 메일을 확인해보세요.'
|
35
|
+
send_paranoid_instructions: '데이터베이스에 고객님의 이메일 주소가 존재하면, 이메일 주소를 확인하는 방법이 담긴 이메일을 곧 받으실 수 있습니다.'
|
36
|
+
confirmed: '성공적으로 이메일 주소를 확인하였습니다. 이제 로그인된 상태입니다.'
|
37
|
+
registrations:
|
38
|
+
signed_up: '환영합니다! 성공적으로 가입하셨습니다.'
|
39
|
+
signed_up_but_unconfirmed: '이메일 주소 확인 링크가 담긴 메일을 발송하였습니다. 계정을 활성화 하기 위해서 그 링크를 방문해주세요.'
|
40
|
+
signed_up_but_inactive: '고객님은 성공적으로 가입하셨습니다. 그러나 아직 계정이 활성화되지 않아 지금 로그인하실 수 없습니다.'
|
41
|
+
signed_up_but_locked: '고객님은 성공적으로 가입하셨습니다. 그러나 계정이 잠겨 있어 지금 로그인하실 수 없습니다.'
|
42
|
+
updated: '성공적으로 계정이 수정되었습니다.'
|
43
|
+
update_needs_confirmation: "성공적으로 계정이 수정되었습니다, 하지만 저희가 이메일주소를 확인해야 합니다. 이메일을 확인하시고 새로 바뀐 이메일 주소를 확인하는 링크를 방문해주세요."
|
44
|
+
destroyed: '안녕히가세요! 계정이 성공적으로 삭제되었습니다. 다시 뵙기를 고대합니다.'
|
45
|
+
unlocks:
|
46
|
+
send_instructions: '계정 잠금을 푸는 링크가 담긴 메일을 발송하있습니다. 잠시후에 확인해 보세요.'
|
47
|
+
unlocked: '성공적으로 계정 잠금을 풀었습니다. 계속 이용하시려면 로그인하세요.'
|
48
|
+
send_paranoid_instructions: '고객님의 계정이 존재하면, 곧 계정 잠금을 푸는 방법이 담긴 이메일을 받으실 수 있습니다.'
|
49
|
+
omniauth_callbacks:
|
50
|
+
success: '%{kind} 계정으로 성공적으로 인증되었습니다.'
|
51
|
+
failure: '다음과 같은 이유로 %{kind}에서 인증에 실패하였습니다. "%{reason}"'
|
52
|
+
mailer:
|
53
|
+
confirmation_instructions:
|
54
|
+
subject: '이메일 주소 확인 메일'
|
55
|
+
reset_password_instructions:
|
56
|
+
subject: '비밀번호 변경 확인 메일'
|
57
|
+
unlock_instructions:
|
58
|
+
subject: '계정 Unlock 메일'
|
@@ -0,0 +1,68 @@
|
|
1
|
+
require 'rails/generators'
|
2
|
+
require 'rails/generators/migration'
|
3
|
+
|
4
|
+
module Remotty::Rails
|
5
|
+
module Generators
|
6
|
+
# 마이그레이션 생성 및 각종 클래스&설정 추가 및 변경
|
7
|
+
#
|
8
|
+
# ==== migration
|
9
|
+
# * +add_column_to_users.rb+ - user
|
10
|
+
# * +create_auth_tokens.rb+ - auth token
|
11
|
+
# * +create_oauth_authentications.rb+ - oauth authentication
|
12
|
+
#
|
13
|
+
# ==== model
|
14
|
+
# * +auth_token.rb+ - auth token
|
15
|
+
# * +oauth_authentication.rb+ - oauth_authentication
|
16
|
+
# * +user.rb+ - user model에 base include
|
17
|
+
#
|
18
|
+
# ==== configuration
|
19
|
+
# * +paperclip_hash.rb+ - paperclip hash
|
20
|
+
#
|
21
|
+
# ==== serializer
|
22
|
+
# * +user_serializer.rb+ - user model serializer
|
23
|
+
#
|
24
|
+
# ==== controller
|
25
|
+
# * +application_controller.rb+ - application controller에 base include
|
26
|
+
#
|
27
|
+
class InstallGenerator < ::Rails::Generators::Base
|
28
|
+
include ::Rails::Generators::Migration
|
29
|
+
|
30
|
+
desc "Creates a Remotty Rails model initializer and copy files to your application."
|
31
|
+
|
32
|
+
source_root File.expand_path("../templates", __FILE__)
|
33
|
+
|
34
|
+
# migration number 생성용 변수
|
35
|
+
@migration_index = 0
|
36
|
+
|
37
|
+
# migration number는 현재날짜시간 + index(1,2,...) 형식으로 생성함
|
38
|
+
def self.next_migration_number(path)
|
39
|
+
@migration_index += 1
|
40
|
+
(Time.now.utc.strftime("%Y%m%d%H%M%S").to_i + @migration_index).to_s
|
41
|
+
end
|
42
|
+
|
43
|
+
# add & update files
|
44
|
+
def copy_purple_attachment
|
45
|
+
template 'auth_token.rb', 'app/models/auth_token.rb'
|
46
|
+
template 'oauth_authentication.rb', 'app/models/oauth_authentication.rb'
|
47
|
+
template 'user_serializer.rb', 'app/serializers/user_serializer.rb'
|
48
|
+
template 'paperclip_hash.rb', 'config/initializers/paperclip_hash.rb'
|
49
|
+
append_to_file 'config/initializers/paperclip_hash.rb' do
|
50
|
+
secret = SecureRandom.hex(40)
|
51
|
+
"Paperclip::Attachment.default_options.update({ :hash_secret => '#{secret}' })"
|
52
|
+
end
|
53
|
+
inject_into_class 'app/controllers/application_controller.rb', ApplicationController do
|
54
|
+
" include Remotty::BaseApplicationController\n"
|
55
|
+
end
|
56
|
+
inject_into_class 'app/models/user.rb', User do
|
57
|
+
" include Remotty::BaseUser\n"
|
58
|
+
end
|
59
|
+
gsub_file 'app/models/user.rb', 'registerable', 'registerable, :confirmable, :omniauthable'
|
60
|
+
|
61
|
+
migration_template 'add_column_to_users.rb', 'db/migrate/add_column_to_users.rb'
|
62
|
+
migration_template 'create_auth_tokens.rb', 'db/migrate/create_auth_tokens.rb'
|
63
|
+
migration_template 'create_oauth_authentications.rb', 'db/migrate/create_oauth_authentications.rb'
|
64
|
+
end
|
65
|
+
|
66
|
+
end
|
67
|
+
end
|
68
|
+
end
|