optimacms 0.3.23 → 0.3.29
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/app/assets/stylesheets/optimacms/application.scss +7 -0
- data/app/controllers/optimacms/admin/backup_metadata_controller.rb +4 -1
- data/app/controllers/optimacms/admin/pages_controller.rb +1 -0
- data/app/controllers/optimacms/application_controller.rb +13 -0
- data/app/models/optimacms/cms_admin_user.rb +31 -1
- data/app/models/optimacms/page.rb +33 -1
- data/app/views/cms_admin_users/sessions/new.html.haml +43 -0
- data/app/views/optimacms/admin/appdata/index.html.haml +10 -9
- data/app/views/optimacms/admin/layouts/basic.html.haml +1 -1
- data/app/views/optimacms/admin/mediafiles/index.html.erb +3 -3
- data/app/views/optimacms/admin/pages/_form_folder.html.haml +1 -0
- data/config/initializers/devise.rb +4 -0
- data/lib/optimacms/appdata/rsync_command.rb +60 -0
- data/lib/optimacms/appdata/service.rb +39 -25
- data/lib/optimacms/appdata/ssh_command.rb +180 -0
- data/lib/optimacms/backup_metadata/backup.rb +5 -3
- data/lib/optimacms/backup_metadata/page_import.rb +10 -8
- data/lib/optimacms/concerns/admin_menu/admin_menu.rb +3 -3
- data/lib/optimacms/devise.rb +3 -0
- data/lib/optimacms/mycontroller.rb +1 -1
- data/lib/optimacms/version.rb +1 -1
- data/spec/dummy/config/initializers/devise.rb +1 -1
- data/spec/dummy/config/secrets.yml +2 -2
- data/spec/dummy/log/development.log +4944 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/0m/0mcAe0Hhx0J17BMXbMxKzwvGiiI_20xASSAITdm1ziU.cache +1 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/2z/2zwgrDVnzLZlTx8Memb0gzpf8yagLFZN3JGQAX4OniM.cache +0 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/6_/6_y_S8oVqUuB2sc04zlksxKHk9syS6sk5qFUecJ03q8.cache +1 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/9k/9kye0L2ZDoq9vTjMGfvwxMIiaSlAqgL7Lp5ctzjx6eE.cache +0 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/E9/E9ZKDOUFr9ts2L-I2rTrunk7Gik_Ft_oQ6IUBRCsVh8.cache +1 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/Ot/OtR0AxjtDduwkdYgLAyGUSVTmPzqJtZprIGk9dqRoBg.cache +0 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/V5/V5Fc_yYrC6DrvWkqweF4721viJOg6miLaAhoE5wjIQc.cache +0 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/WX/WXJgHWrvkJSuyYyGqt826Ntu2G2WuNxmJbUqO7hH2Qg.cache +0 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/k3/k38_e4uNEpuFVjGD1JEc8a_sEP7Tsrh3s3BSTkPsD-A.cache +0 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/pn/pnhFGUpeu-U6-EluSZI82xJzUrxyoM_PzepMONjKKcg.cache +1 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/xW/xWA0OS9RacBbkbDr1ge6K_aPjihZEfS90Ctpw-zZq_Y.cache +0 -0
- data/spec/dummy/tmp/pids/server.pid +1 -1
- metadata +27 -156
- data/app/views/cms_admin_users/sessions/new.html.erb +0 -26
- data/spec/dummy/data/backups/cms/metadata/2017.09.08.14.11.34/pages/about.json +0 -21
- data/spec/dummy/data/backups/cms/metadata/2017.09.08.14.11.34/pages/auth.json +0 -21
- data/spec/dummy/data/backups/cms/metadata/2017.09.08.14.11.34/pages/contact_form.json +0 -21
- data/spec/dummy/data/backups/cms/metadata/2017.09.08.14.11.34/pages/contact_form_result.json +0 -21
- data/spec/dummy/data/backups/cms/metadata/2017.09.08.14.11.34/pages/contacts.json +0 -21
- data/spec/dummy/data/backups/cms/metadata/2017.09.08.14.11.34/pages/dev.json +0 -21
- data/spec/dummy/data/backups/cms/metadata/2017.09.08.14.11.34/pages/error403.json +0 -21
- data/spec/dummy/data/backups/cms/metadata/2017.09.08.14.11.34/pages/error404.json +0 -21
- data/spec/dummy/data/backups/cms/metadata/2017.09.08.14.11.34/pages/example.json +0 -21
- data/spec/dummy/data/backups/cms/metadata/2017.09.08.14.11.34/pages/folder-services.json +0 -21
- data/spec/dummy/data/backups/cms/metadata/2017.09.08.14.11.34/pages/folder-system.json +0 -21
- data/spec/dummy/data/backups/cms/metadata/2017.09.08.14.11.34/pages/folder_contact.json +0 -21
- data/spec/dummy/data/backups/cms/metadata/2017.09.08.14.11.34/pages/home.json +0 -21
- data/spec/dummy/data/backups/cms/metadata/2017.09.08.14.11.34/pages/mp1.json +0 -21
- data/spec/dummy/data/backups/cms/metadata/2017.09.08.14.11.34/pages/news-folder.json +0 -21
- data/spec/dummy/data/backups/cms/metadata/2017.09.08.14.11.34/pages/news.json +0 -21
- data/spec/dummy/data/backups/cms/metadata/2017.09.08.14.11.34/pages/news2.json +0 -21
- data/spec/dummy/data/backups/cms/metadata/2017.09.08.14.11.34/pages/news_category.json +0 -21
- data/spec/dummy/data/backups/cms/metadata/2017.09.08.14.11.34/pages/news_country_city.json +0 -21
- data/spec/dummy/data/backups/cms/metadata/2017.09.08.14.11.34/pages/news_item.json +0 -21
- data/spec/dummy/data/backups/cms/metadata/2017.09.08.14.11.34/pages/newsarticle.json +0 -21
- data/spec/dummy/data/backups/cms/metadata/2017.09.08.14.11.34/pages/p1.json +0 -21
- data/spec/dummy/data/backups/cms/metadata/2017.09.08.14.11.34/pages/p3.json +0 -21
- data/spec/dummy/data/backups/cms/metadata/2017.09.08.14.11.34/pages/page1.json +0 -21
- data/spec/dummy/data/backups/cms/metadata/2017.09.08.14.11.34/pages/page4.json +0 -21
- data/spec/dummy/data/backups/cms/metadata/2017.09.08.14.11.34/pages/register.json +0 -21
- data/spec/dummy/data/backups/cms/metadata/2017.09.08.14.11.34/pages/register_result.json +0 -21
- data/spec/dummy/data/backups/cms/metadata/2017.09.08.14.11.34/pages/service.json +0 -21
- data/spec/dummy/data/backups/cms/metadata/2017.09.08.14.11.34/pages/services.json +0 -21
- data/spec/dummy/data/backups/cms/metadata/2017.09.08.14.11.34/pages/sitemap.json +0 -21
- data/spec/dummy/data/backups/cms/metadata/2017.09.08.14.11.34/pages/t1.json +0 -21
- data/spec/dummy/data/backups/cms/metadata/2017.09.08.14.11.34/pages/t2.json +0 -21
- data/spec/dummy/data/backups/cms/metadata/2017.09.08.14.11.34/pages/ta1.json +0 -21
- data/spec/dummy/data/backups/cms/metadata/2017.09.08.14.11.34/pages/text1.json +0 -21
- data/spec/dummy/data/backups/cms/metadata/2017.09.08.14.11.34/pages/textpages.json +0 -21
- data/spec/dummy/data/backups/cms/metadata/2017.09.08.14.11.34/pages/tt1.json +0 -21
- data/spec/dummy/data/backups/cms/metadata/2017.09.08.14.11.34/templates/company--p2.json +0 -14
- data/spec/dummy/data/backups/cms/metadata/2017.09.08.14.11.34/templates/company--p3.json +0 -14
- data/spec/dummy/data/backups/cms/metadata/2017.09.08.14.11.34/templates/company.json +0 -14
- data/spec/dummy/data/backups/cms/metadata/2017.09.08.14.11.34/templates/home--index.json +0 -14
- data/spec/dummy/data/backups/cms/metadata/2017.09.08.14.11.34/templates/home.json +0 -14
- data/spec/dummy/data/backups/cms/metadata/2017.09.08.14.11.34/templates/layouts--application.json +0 -14
- data/spec/dummy/data/backups/cms/metadata/2017.09.08.14.11.34/templates/layouts--home_news_data.json +0 -14
- data/spec/dummy/data/backups/cms/metadata/2017.09.08.14.11.34/templates/layouts--layout2.json +0 -14
- data/spec/dummy/data/backups/cms/metadata/2017.09.08.14.11.34/templates/layouts--main.json +0 -14
- data/spec/dummy/data/backups/cms/metadata/2017.09.08.14.11.34/templates/layouts.json +0 -14
- data/spec/dummy/data/backups/cms/metadata/2017.09.08.14.11.34/templates/news--index.json +0 -14
- data/spec/dummy/data/backups/cms/metadata/2017.09.08.14.11.34/templates/news--show.json +0 -14
- data/spec/dummy/data/backups/cms/metadata/2017.09.08.14.11.34/templates/news.json +0 -14
- data/spec/dummy/data/backups/cms/metadata/2017.09.08.14.11.34/templates/pages--about.json +0 -14
- data/spec/dummy/data/backups/cms/metadata/2017.09.08.14.11.34/templates/pages--text1.json +0 -14
- data/spec/dummy/data/backups/cms/metadata/2017.09.08.14.11.34/templates/services--index.json +0 -14
- data/spec/dummy/data/backups/cms/metadata/2017.09.08.14.11.34/templates/services--index_bottom.json +0 -14
- data/spec/dummy/data/backups/cms/metadata/2017.09.08.14.11.34/templates/services--index_top.json +0 -14
- data/spec/dummy/data/backups/cms/metadata/2017.09.08.14.11.34/templates/services--service.json +0 -14
- data/spec/dummy/data/backups/cms/metadata/2017.09.08.14.11.34/templates/services.json +0 -14
- data/spec/dummy/data/backups/cms/metadata/2017.09.08.14.11.34/templates/temp--b1.json +0 -14
- data/spec/dummy/data/backups/cms/metadata/2017.09.08.14.11.34/templates/temp--h1.json +0 -14
- data/spec/dummy/data/backups/cms/metadata/2017.09.08.14.11.34/templates/temp--home.json +0 -14
- data/spec/dummy/data/backups/cms/metadata/2017.09.08.14.11.34/templates/temp--multi1.json +0 -14
- data/spec/dummy/data/backups/cms/metadata/2017.09.08.14.11.34/templates/temp--multi2.json +0 -14
- data/spec/dummy/data/backups/cms/metadata/2017.09.08.14.11.34/templates/temp--news.json +0 -14
- data/spec/dummy/data/backups/cms/metadata/2017.09.08.14.11.34/templates/temp--news_item.json +0 -14
- data/spec/dummy/data/backups/cms/metadata/2017.09.08.14.11.34/templates/temp--p1.json +0 -14
- data/spec/dummy/data/backups/cms/metadata/2017.09.08.14.11.34/templates/temp--part1.json +0 -14
- data/spec/dummy/data/backups/cms/metadata/2017.09.08.14.11.34/templates/temp--part2.json +0 -14
- data/spec/dummy/data/backups/cms/metadata/2017.09.08.14.11.34/templates/temp--t1.json +0 -14
- data/spec/dummy/data/backups/cms/metadata/2017.09.08.14.11.34/templates/temp--t2.json +0 -14
- data/spec/dummy/data/backups/cms/metadata/2017.09.08.14.11.34/templates/temp--ta1.json +0 -14
- data/spec/dummy/data/backups/cms/metadata/2017.09.08.14.11.34/templates/temp--workers--index.json +0 -14
- data/spec/dummy/data/backups/cms/metadata/2017.09.08.14.11.34/templates/temp.json +0 -14
- data/spec/dummy/data/backups/cms/metadata/2017.09.08.14.11.34/templates/temp9--t2.json +0 -14
- data/spec/dummy/data/backups/cms/metadata/2017.09.08.14.11.34/templates/temp9--t9.json +0 -14
- data/spec/dummy/data/backups/cms/metadata/2017.09.08.14.11.34/templates/temp9.json +0 -14
- data/spec/dummy/data/backups/cms/metadata/2017.09.08.14.11.34/templates/workers--index.json +0 -14
- data/spec/dummy/data/backups/cms/metadata/2017.09.08.14.11.34/templates/workers.json +0 -14
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f0b9b2205c8bc82968042a97682ad648e2a08953
|
4
|
+
data.tar.gz: 02bd91769a57bae77c8ed131abcbdacf0e1c61fa
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 13b733bdfcadfe1dcd9eae255cb35668018ef4dff2000d45e05c83b33b670043478017d754b64396139ce1a60ce0d678fc654983d7a4d077d7513f91919d5b8e
|
7
|
+
data.tar.gz: f6ac5bae985b6110ebb3630f3c541acb2392f6fc464a21f33051d7e2f37e3bf7df62b890b2f1fdfe075cdbab246c799155ec2f2a76e93e866d0cc8dcd969c9aa
|
@@ -48,7 +48,10 @@ module Optimacms
|
|
48
48
|
|
49
49
|
path = File.join(BackupMetadata::Backup.dir_backups, f)
|
50
50
|
|
51
|
-
|
51
|
+
#data = File.open(path, 'rb') { |f| f.read }
|
52
|
+
data = IO.read(path)
|
53
|
+
send_data data, filename: f
|
54
|
+
#send_file path
|
52
55
|
end
|
53
56
|
|
54
57
|
def delete
|
@@ -16,5 +16,18 @@ module Optimacms
|
|
16
16
|
raise ActionController::RoutingError.new('Not Found')
|
17
17
|
end
|
18
18
|
|
19
|
+
|
20
|
+
# devise
|
21
|
+
before_action :configure_permitted_parameters, if: :devise_controller?
|
22
|
+
|
23
|
+
|
24
|
+
protected
|
25
|
+
|
26
|
+
def configure_permitted_parameters
|
27
|
+
added_attrs = [:username, :email, :password, :password_confirmation, :remember_me]
|
28
|
+
devise_parameter_sanitizer.permit :sign_up, keys: added_attrs
|
29
|
+
devise_parameter_sanitizer.permit :account_update, keys: added_attrs
|
30
|
+
end
|
31
|
+
|
19
32
|
end
|
20
33
|
end
|
@@ -5,9 +5,11 @@ module Optimacms
|
|
5
5
|
# Include default devise modules. Others available are:
|
6
6
|
# :confirmable, :lockable, :timeoutable and :omniauthable
|
7
7
|
#devise :database_authenticatable, :registerable, :recoverable, :rememberable, :trackable, :validatable
|
8
|
-
devise :database_authenticatable, :recoverable, :rememberable, :trackable
|
8
|
+
devise :database_authenticatable, :recoverable, :rememberable, :trackable,
|
9
|
+
authentication_keys: [:login]
|
9
10
|
#, :validatable
|
10
11
|
|
12
|
+
attr_accessor :login
|
11
13
|
|
12
14
|
# search
|
13
15
|
searchable_by_simple_filter
|
@@ -20,13 +22,24 @@ module Optimacms
|
|
20
22
|
:length => { :minimum => 6 },
|
21
23
|
:if => :should_validate_password? # only validate if password changed!
|
22
24
|
|
25
|
+
validates :username,
|
26
|
+
presence: :true,
|
27
|
+
uniqueness: { case_sensitive: false }
|
28
|
+
|
29
|
+
# Only allow letter, number, underscore and punctuation.
|
30
|
+
#validates_format_of :username, with: /^[a-zA-Z0-9_\.]*$/, :multiline => true
|
31
|
+
|
32
|
+
|
23
33
|
def should_validate_password?
|
24
34
|
x = new_record? || !password.blank?
|
25
35
|
#if: Proc.new{|obj| obj.new_record? || !obj.<attribute>.blank? }
|
26
36
|
end
|
27
37
|
|
38
|
+
### callbacks
|
39
|
+
|
28
40
|
before_destroy :can_destroy?
|
29
41
|
|
42
|
+
|
30
43
|
def can_destroy?
|
31
44
|
!self.is_superadmin
|
32
45
|
end
|
@@ -37,5 +50,22 @@ module Optimacms
|
|
37
50
|
def is_superadmin?
|
38
51
|
self.is_superadmin
|
39
52
|
end
|
53
|
+
|
54
|
+
|
55
|
+
|
56
|
+
|
57
|
+
### for login auth
|
58
|
+
|
59
|
+
def self.find_for_database_authentication(warden_conditions)
|
60
|
+
conditions = warden_conditions.dup
|
61
|
+
conditions[:email].downcase! if conditions[:email]
|
62
|
+
|
63
|
+
if login = conditions.delete(:login)
|
64
|
+
where(conditions.to_hash).where(["lower(username) = :value OR lower(email) = :value", { :value => login.downcase }]).first
|
65
|
+
elsif conditions.has_key?(:username) || conditions.has_key?(:email)
|
66
|
+
where(conditions.to_hash).first
|
67
|
+
end
|
68
|
+
end
|
69
|
+
|
40
70
|
end
|
41
71
|
end
|
@@ -2,18 +2,37 @@ module Optimacms
|
|
2
2
|
class Page < ActiveRecord::Base
|
3
3
|
self.table_name = 'cms_pages'
|
4
4
|
|
5
|
+
|
6
|
+
# relations
|
7
|
+
|
5
8
|
belongs_to :layout, :foreign_key => 'layout_id', :class_name => 'Template'
|
6
9
|
belongs_to :template, :foreign_key => 'template_id', :class_name => 'Template'
|
7
10
|
belongs_to :folder, :foreign_key => 'parent_id', :class_name => 'Page'
|
8
11
|
has_many :translations, :foreign_key => 'item_id', :class_name => 'PageTranslation', :dependent => :destroy
|
9
12
|
accepts_nested_attributes_for :translations
|
10
|
-
|
11
13
|
accepts_nested_attributes_for :template
|
12
14
|
|
13
15
|
#has_many :page_translations
|
14
16
|
#accepts_nested_attributes_for :page_translations
|
15
17
|
|
18
|
+
# validation
|
19
|
+
#validates :name, uniqueness: { scope: :w_page}
|
20
|
+
|
21
|
+
with_options unless: :is_folder? do |m|
|
22
|
+
m.validates :name, uniqueness: {
|
23
|
+
conditions: -> {
|
24
|
+
w_page
|
25
|
+
}
|
26
|
+
}
|
27
|
+
end
|
28
|
+
|
29
|
+
with_options if: :is_folder? do |m|
|
30
|
+
m.validates :name, uniqueness: { scope: :parent_id}
|
31
|
+
end
|
32
|
+
|
33
|
+
|
16
34
|
# callbacks
|
35
|
+
before_save :_before_validate
|
17
36
|
before_save :_before_save
|
18
37
|
|
19
38
|
# modules
|
@@ -23,6 +42,8 @@ module Optimacms
|
|
23
42
|
|
24
43
|
# scopes
|
25
44
|
scope :of_parent, lambda { |parent_id| where_parent(parent_id) }
|
45
|
+
scope :w_page, -> { where(is_folder: false) }
|
46
|
+
scope :w_folder, -> { where(is_folder: false) }
|
26
47
|
|
27
48
|
#
|
28
49
|
paginates_per 10
|
@@ -60,6 +81,17 @@ module Optimacms
|
|
60
81
|
end
|
61
82
|
|
62
83
|
|
84
|
+
### validate
|
85
|
+
|
86
|
+
|
87
|
+
### callbacks
|
88
|
+
|
89
|
+
|
90
|
+
def _before_validate
|
91
|
+
self.parent_id = nil if self.parent_id && self.parent_id==0
|
92
|
+
end
|
93
|
+
|
94
|
+
|
63
95
|
### content
|
64
96
|
|
65
97
|
def content(lang='')
|
@@ -0,0 +1,43 @@
|
|
1
|
+
|
2
|
+
.container
|
3
|
+
.row.justify-content-center
|
4
|
+
.col-xl-4.col-lg-4.col-md-6.col-12
|
5
|
+
.card
|
6
|
+
.card-body
|
7
|
+
%h3.card-title.text-uppercase
|
8
|
+
Admin Area
|
9
|
+
-#%h6.card-subtitle.mt-2.mb-2.text-muted
|
10
|
+
OptimaCMS Admin Area
|
11
|
+
-#%p.card-text
|
12
|
+
|
13
|
+
= form_for(resource, as: resource_name, url: session_path(resource_name)) do |f|
|
14
|
+
.form-group
|
15
|
+
= f.label :login
|
16
|
+
%br
|
17
|
+
= f.text_field :login, autofocus: true, class: 'form-control'
|
18
|
+
|
19
|
+
.form-group
|
20
|
+
= f.label :password
|
21
|
+
%br
|
22
|
+
= f.password_field :password, autocomplete: "off", class: 'form-control'
|
23
|
+
|
24
|
+
- if devise_mapping.rememberable?
|
25
|
+
.form-group
|
26
|
+
= f.check_box :remember_me
|
27
|
+
= f.label :remember_me
|
28
|
+
|
29
|
+
.actions
|
30
|
+
= f.submit "Log in", class: 'btn btn-primary btn-lg'
|
31
|
+
|
32
|
+
%p.mt-3
|
33
|
+
= render "devise/shared/links"
|
34
|
+
|
35
|
+
%hr.mt-2
|
36
|
+
%p
|
37
|
+
=link_to 'OptimaCMS', 'https://github.com/maxivak/optimacms'
|
38
|
+
v.#{Optimacms::Common::Common.version}
|
39
|
+
|
40
|
+
|
41
|
+
|
42
|
+
|
43
|
+
|
@@ -5,7 +5,7 @@
|
|
5
5
|
- @list.each do |content|
|
6
6
|
%h2 #{content['name']}
|
7
7
|
Storage:<br>
|
8
|
-
#{content['storage']['type']}
|
8
|
+
Type: #{content['storage']['type']}
|
9
9
|
%br
|
10
10
|
Dirs: #{content['dirs'].map{|r| r}.join(", ") }
|
11
11
|
%br
|
@@ -71,14 +71,17 @@
|
|
71
71
|
%h1 Help
|
72
72
|
|
73
73
|
%b Save changes
|
74
|
-
|
74
|
+
%br
|
75
|
+
Save current changes to remote repo:
|
76
|
+
%br
|
75
77
|
* run on server
|
76
78
|
%pre
|
77
|
-
|
79
|
+
RAILS_ENV=#{Rails.env} rake appdata:save['CONTENT_NAME']
|
78
80
|
|
79
81
|
* run from local project
|
80
82
|
%pre
|
81
|
-
cap #{Rails.env} deploy:appdata:server_save
|
83
|
+
name=CONTENT_NAME cap #{Rails.env} deploy:appdata:server_save
|
84
|
+
|
82
85
|
|
83
86
|
%br
|
84
87
|
%br
|
@@ -87,15 +90,13 @@ Save current changes to remote repo
|
|
87
90
|
%b Get changes
|
88
91
|
Get changes from remote repo
|
89
92
|
%br
|
90
|
-
|
91
|
-
or<br>
|
92
93
|
* run on server
|
93
94
|
%pre
|
94
|
-
name=
|
95
|
+
name=CONTENT_NAME RAILS_ENV=#{Rails.env} rake appdata:update
|
95
96
|
|
96
|
-
* run from local project
|
97
|
+
* or run from local project
|
97
98
|
%pre
|
98
|
-
cap #{Rails.env} deploy:appdata:server_update
|
99
|
+
name=CONTENT_NAME cap #{Rails.env} deploy:appdata:server_update
|
99
100
|
|
100
101
|
|
101
102
|
|
@@ -4,9 +4,9 @@
|
|
4
4
|
<title>File Manager</title>
|
5
5
|
|
6
6
|
|
7
|
-
<link rel="stylesheet" type="text/css" media="screen" href="
|
8
|
-
<script type="text/javascript" src="
|
9
|
-
<script type="text/javascript" src="
|
7
|
+
<link rel="stylesheet" type="text/css" media="screen" href="https://ajax.googleapis.com/ajax/libs/jqueryui/1.8.14/themes/smoothness/jquery-ui.css" />
|
8
|
+
<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script>
|
9
|
+
<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jqueryui/1.8.18/jquery-ui.min.js"></script>
|
10
10
|
|
11
11
|
|
12
12
|
<script type="text/javascript" src="/elfinder/js/elfinder.min.js"></script>
|
@@ -0,0 +1,60 @@
|
|
1
|
+
module Optimacms
|
2
|
+
module Appdata
|
3
|
+
class RsyncCommand
|
4
|
+
|
5
|
+
|
6
|
+
def self.build_cmd_with_ssh_save(storage, d_local_full, d_remote)
|
7
|
+
s_ssh = " #{storage['ssh_user']}@#{storage['host']}"
|
8
|
+
ssh_opts = build_ssh_opts(storage)
|
9
|
+
|
10
|
+
cmd_rsync = %Q(rsync -Lavrt -e "ssh #{ssh_opts}" #{d_local_full} #{s_ssh}:#{d_remote} --delete)
|
11
|
+
|
12
|
+
cmd = nil
|
13
|
+
if storage['ssh_key'] && storage['ssh_key']!=''
|
14
|
+
# use ssh key
|
15
|
+
cmd = cmd_rsync
|
16
|
+
else
|
17
|
+
# use sshpass with password
|
18
|
+
cmd = %Q(sshpass -p #{storage['ssh_password']} #{cmd_rsync})
|
19
|
+
end
|
20
|
+
|
21
|
+
|
22
|
+
cmd
|
23
|
+
end
|
24
|
+
|
25
|
+
def self.build_cmd_with_ssh_update(storage, d_local_full, d_remote)
|
26
|
+
s_ssh = " #{storage['ssh_user']}@#{storage['host']}"
|
27
|
+
ssh_opts = build_ssh_opts(storage)
|
28
|
+
|
29
|
+
cmd_rsync = %Q(rsync -Lavrt -e "ssh #{ssh_opts}" #{s_ssh}:#{d_remote} #{d_local_full} --delete)
|
30
|
+
|
31
|
+
|
32
|
+
cmd = nil
|
33
|
+
if storage['ssh_key'] && storage['ssh_key']!=''
|
34
|
+
# use ssh key
|
35
|
+
cmd = cmd_rsync
|
36
|
+
else
|
37
|
+
# use sshpass with password
|
38
|
+
cmd = %Q(sshpass -p #{storage['ssh_password']} #{cmd_rsync})
|
39
|
+
end
|
40
|
+
|
41
|
+
|
42
|
+
cmd
|
43
|
+
end
|
44
|
+
|
45
|
+
|
46
|
+
def self.build_ssh_opts(storage)
|
47
|
+
ssh_opts = "-p #{storage['ssh_port']||22} -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no"
|
48
|
+
|
49
|
+
if storage['ssh_key'] && storage['ssh_key']!=''
|
50
|
+
ssh_opts << " -i #{storage['ssh_key']}"
|
51
|
+
end
|
52
|
+
|
53
|
+
ssh_opts
|
54
|
+
end
|
55
|
+
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
|
@@ -142,13 +142,19 @@ module Optimacms
|
|
142
142
|
storage = content['storage']
|
143
143
|
|
144
144
|
#
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
|
149
|
-
|
150
|
-
|
151
|
-
|
145
|
+
cmd = SshCommand.new
|
146
|
+
ssh_options = {
|
147
|
+
port: storage['ssh_port'],
|
148
|
+
user: storage['ssh_user'],
|
149
|
+
password: storage['ssh_password'],
|
150
|
+
key: storage['ssh_key']
|
151
|
+
}
|
152
|
+
|
153
|
+
#s_ssh = " #{storage['ssh_user']}@#{storage['host']}"
|
154
|
+
#ssh_opts = "-p #{storage['ssh_port']||22} -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no"
|
155
|
+
#if storage['ssh_key'] && storage['ssh_key']!=''
|
156
|
+
# ssh_opts << " -i #{storage['ssh_key']}"
|
157
|
+
#end
|
152
158
|
|
153
159
|
# sync dirs
|
154
160
|
content['dirs'].each do |d|
|
@@ -159,12 +165,19 @@ module Optimacms
|
|
159
165
|
|
160
166
|
|
161
167
|
# create remote dir
|
162
|
-
|
168
|
+
#%x[ssh -t #{ssh_opts} #{s_ssh} mkdir -p #{d_remote}]
|
169
|
+
cmd_create = %Q(mkdir -p #{d_remote})
|
170
|
+
res_cmd_create = cmd.run_ssh_cmd(storage['host'], ssh_options, cmd_create)
|
171
|
+
|
172
|
+
if res_cmd_create[:res]!=1
|
173
|
+
raise "Cannot create dir: #{res_cmd_create[:error]}"
|
174
|
+
end
|
175
|
+
|
163
176
|
|
164
177
|
# rsync
|
165
|
-
|
166
|
-
puts "#{
|
167
|
-
%x[#{
|
178
|
+
cmd_rsync = RsyncCommand.build_cmd_with_ssh_save(storage, d_local_full, d_remote)
|
179
|
+
#puts "#{cmd_rsync}"
|
180
|
+
output = %x[#{cmd_rsync}]
|
168
181
|
|
169
182
|
end
|
170
183
|
|
@@ -182,16 +195,14 @@ module Optimacms
|
|
182
195
|
|
183
196
|
#
|
184
197
|
content = Optimacms::Appdata::Settings.get_content_info(_env, content_name)
|
185
|
-
#puts "content: #{content}"
|
186
198
|
storage = content['storage']
|
187
199
|
|
188
200
|
#
|
189
|
-
s_ssh = " #{storage['ssh_user']}@#{storage['host']}"
|
190
|
-
ssh_opts = "-p #{storage['ssh_port']||22} -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no"
|
191
|
-
|
192
|
-
|
193
|
-
|
194
|
-
end
|
201
|
+
#s_ssh = " #{storage['ssh_user']}@#{storage['host']}"
|
202
|
+
#ssh_opts = "-p #{storage['ssh_port']||22} -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no"
|
203
|
+
#if storage['ssh_key'] && storage['ssh_key']!=''
|
204
|
+
# ssh_opts << " -i #{storage['ssh_key']}"
|
205
|
+
#end
|
195
206
|
|
196
207
|
|
197
208
|
# sync dirs
|
@@ -200,13 +211,16 @@ module Optimacms
|
|
200
211
|
d_local = File.join(File.dirname(d), File.basename(d))+"/"
|
201
212
|
d_local_full = File.join(Rails.root, d_local)
|
202
213
|
|
203
|
-
#
|
214
|
+
# create local dir
|
204
215
|
%x[mkdir -p #{d_local_full}]
|
205
216
|
|
217
|
+
|
206
218
|
# rsync
|
207
|
-
|
208
|
-
puts "#{
|
209
|
-
%x[#{
|
219
|
+
cmd_rsync = RsyncCommand.build_cmd_with_ssh_update(storage, d_local_full, d_remote)
|
220
|
+
#puts "#{cmd_rsync}"
|
221
|
+
output = %x[#{cmd_rsync}]
|
222
|
+
|
223
|
+
#cmd = %Q(rsync -Lavrt -e "ssh #{ssh_opts}" #{s_ssh}:#{d_remote} #{d_local_full} --delete)
|
210
224
|
|
211
225
|
end
|
212
226
|
|
@@ -259,18 +273,18 @@ module Optimacms
|
|
259
273
|
d_to = File.join(repo_local_path, d)
|
260
274
|
d_to_base = File.dirname(d_to)
|
261
275
|
|
262
|
-
puts "copy from #{d_from} to #{d_to}"
|
276
|
+
#puts "copy from #{d_from} to #{d_to}"
|
263
277
|
|
264
278
|
FileUtils.mkdir_p d_to
|
265
279
|
|
266
280
|
# rsync or copy
|
267
281
|
if res_rsync!=""
|
268
282
|
cmd = %Q(rsync -Lavrt #{d_from}/ #{d_to}/)
|
269
|
-
puts "#{cmd}"
|
283
|
+
#puts "#{cmd}"
|
270
284
|
%x(#{cmd})
|
271
285
|
else
|
272
286
|
# no rsync
|
273
|
-
puts "no rsync. copying..."
|
287
|
+
#puts "no rsync. copying..."
|
274
288
|
|
275
289
|
FileUtils.cp_r d_from, d_to_base
|
276
290
|
end
|