ftp_paradise 1.3.8
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of ftp_paradise might be problematic. Click here for more details.
- checksums.yaml +7 -0
- data/README.md +309 -0
- data/bin/create_remote_directory +9 -0
- data/bin/ftp_get +17 -0
- data/bin/ftp_upload +42 -0
- data/bin/ftp_upload_binary +18 -0
- data/bin/iftp +7 -0
- data/bin/remote_remove +28 -0
- data/doc/README.gen +292 -0
- data/doc/TODO_FOR_FTP_PARADISE_PROJECT.md +79 -0
- data/ftp_paradise.gemspec +114 -0
- data/lib/ftp_paradise.rb +5 -0
- data/lib/ftp_paradise/base/cliner.rb +21 -0
- data/lib/ftp_paradise/base/colours.rb +83 -0
- data/lib/ftp_paradise/base/prototype.rb +169 -0
- data/lib/ftp_paradise/base/reset.rb +29 -0
- data/lib/ftp_paradise/colours/colours.rb +141 -0
- data/lib/ftp_paradise/colours/use_colours.rb +74 -0
- data/lib/ftp_paradise/configuration/configuration.rb +49 -0
- data/lib/ftp_paradise/connection/README.md +1 -0
- data/lib/ftp_paradise/connection/connection.rb +35 -0
- data/lib/ftp_paradise/connection/constants.rb +46 -0
- data/lib/ftp_paradise/connection/data.rb +148 -0
- data/lib/ftp_paradise/connection/debug.rb +80 -0
- data/lib/ftp_paradise/connection/directory_handling.rb +271 -0
- data/lib/ftp_paradise/connection/do_login.rb +108 -0
- data/lib/ftp_paradise/connection/download.rb +86 -0
- data/lib/ftp_paradise/connection/file_handling.rb +172 -0
- data/lib/ftp_paradise/connection/ftp_object.rb +21 -0
- data/lib/ftp_paradise/connection/initialize.rb +86 -0
- data/lib/ftp_paradise/connection/initialize_a_new_net_ftp_object_with_this_url.rb +20 -0
- data/lib/ftp_paradise/connection/is_connected.rb +46 -0
- data/lib/ftp_paradise/connection/misc.rb +472 -0
- data/lib/ftp_paradise/connection/notify.rb +71 -0
- data/lib/ftp_paradise/connection/password.rb +47 -0
- data/lib/ftp_paradise/connection/port.rb +33 -0
- data/lib/ftp_paradise/connection/remote_pwd.rb +72 -0
- data/lib/ftp_paradise/connection/remote_url.rb +163 -0
- data/lib/ftp_paradise/connection/remove.rb +143 -0
- data/lib/ftp_paradise/connection/reset.rb +75 -0
- data/lib/ftp_paradise/connection/run.rb +18 -0
- data/lib/ftp_paradise/connection/set_array_available_hosts.rb +27 -0
- data/lib/ftp_paradise/connection/set_input.rb +18 -0
- data/lib/ftp_paradise/connection/show.rb +153 -0
- data/lib/ftp_paradise/connection/sync_ftp_object_onto_the_main_namespace.rb +24 -0
- data/lib/ftp_paradise/connection/transfer_mode.rb +162 -0
- data/lib/ftp_paradise/connection/upload.rb +253 -0
- data/lib/ftp_paradise/connection/use_default_dataset.rb +41 -0
- data/lib/ftp_paradise/connection/username.rb +42 -0
- data/lib/ftp_paradise/constants/constants.rb +19 -0
- data/lib/ftp_paradise/constants/misc.rb +57 -0
- data/lib/ftp_paradise/constants/namespace.rb +14 -0
- data/lib/ftp_paradise/constants/newline.rb +14 -0
- data/lib/ftp_paradise/constants/roebe.rb +27 -0
- data/lib/ftp_paradise/constants/roebe_ftp_constants.rb +219 -0
- data/lib/ftp_paradise/entry/entry.rb +293 -0
- data/lib/ftp_paradise/gui/gtk/constants.rb +58 -0
- data/lib/ftp_paradise/gui/gtk/ftp_bindings.rb +1149 -0
- data/lib/ftp_paradise/interactive_ftp/constants.rb +103 -0
- data/lib/ftp_paradise/interactive_ftp/directory_handling.rb +215 -0
- data/lib/ftp_paradise/interactive_ftp/help.rb +50 -0
- data/lib/ftp_paradise/interactive_ftp/initialize.rb +27 -0
- data/lib/ftp_paradise/interactive_ftp/interactive_ftp.rb +995 -0
- data/lib/ftp_paradise/interactive_ftp/main_loop.rb +50 -0
- data/lib/ftp_paradise/interactive_ftp/menu.rb +788 -0
- data/lib/ftp_paradise/interactive_ftp/misc.rb +208 -0
- data/lib/ftp_paradise/interactive_ftp/mode.rb +124 -0
- data/lib/ftp_paradise/interactive_ftp/readline.rb +115 -0
- data/lib/ftp_paradise/interactive_ftp/remove.rb +97 -0
- data/lib/ftp_paradise/interactive_ftp/reset.rb +90 -0
- data/lib/ftp_paradise/interactive_ftp/run.rb +22 -0
- data/lib/ftp_paradise/interactive_ftp/show.rb +184 -0
- data/lib/ftp_paradise/interactive_ftp/upload.rb +90 -0
- data/lib/ftp_paradise/interactive_ftp/user_input.rb +53 -0
- data/lib/ftp_paradise/project/project.rb +62 -0
- data/lib/ftp_paradise/requires/common_basic_requires.rb +13 -0
- data/lib/ftp_paradise/requires/common_external_requires.rb +9 -0
- data/lib/ftp_paradise/requires/require_the_constants.rb +7 -0
- data/lib/ftp_paradise/requires/require_the_ftp_paradise_project.rb +18 -0
- data/lib/ftp_paradise/requires/require_the_ftp_paradise_project_with_the_GUI_bindings.rb +10 -0
- data/lib/ftp_paradise/requires/require_the_toplevel_methods.rb +24 -0
- data/lib/ftp_paradise/toplevel_methods/can_connect_to_remote_site.rb +29 -0
- data/lib/ftp_paradise/toplevel_methods/clear_user_dataset.rb +28 -0
- data/lib/ftp_paradise/toplevel_methods/connect.rb +49 -0
- data/lib/ftp_paradise/toplevel_methods/create_file.rb +18 -0
- data/lib/ftp_paradise/toplevel_methods/data.rb +31 -0
- data/lib/ftp_paradise/toplevel_methods/delete.rb +23 -0
- data/lib/ftp_paradise/toplevel_methods/determine_user_dataset_from_this_hash.rb +37 -0
- data/lib/ftp_paradise/toplevel_methods/e.rb +16 -0
- data/lib/ftp_paradise/toplevel_methods/ftp_object.rb +270 -0
- data/lib/ftp_paradise/toplevel_methods/get_files.rb +24 -0
- data/lib/ftp_paradise/toplevel_methods/is_directory.rb +33 -0
- data/lib/ftp_paradise/toplevel_methods/is_on_roebe.rb +20 -0
- data/lib/ftp_paradise/toplevel_methods/login_name.rb +49 -0
- data/lib/ftp_paradise/toplevel_methods/opn.rb +24 -0
- data/lib/ftp_paradise/toplevel_methods/password.rb +48 -0
- data/lib/ftp_paradise/toplevel_methods/port.rb +41 -0
- data/lib/ftp_paradise/toplevel_methods/rds.rb +18 -0
- data/lib/ftp_paradise/toplevel_methods/remote_url.rb +57 -0
- data/lib/ftp_paradise/toplevel_methods/time.rb +45 -0
- data/lib/ftp_paradise/toplevel_methods/upload.rb +29 -0
- data/lib/ftp_paradise/toplevel_methods/upload_this_binary_file.rb +58 -0
- data/lib/ftp_paradise/version/version.rb +19 -0
- data/lib/ftp_paradise/www/public/css/style.css +3 -0
- data/lib/ftp_paradise/www/sinatra_web_interface.rb +242 -0
- data/lib/ftp_paradise/www/views/index.slim +3 -0
- data/lib/ftp_paradise/www/views/layout.slim +11 -0
- data/lib/ftp_paradise/www/web_interface.cgi +35 -0
- data/lib/ftp_paradise/yaml/automatically_connect_on_startup_of_the_interactive_ftp_shell.yml +1 -0
- data/lib/ftp_paradise/yaml/debug.yml +1 -0
- data/lib/ftp_paradise/yaml/open_in_default_editor.yml +1 -0
- data/lib/ftp_paradise/yaml/show_full_names.yml +1 -0
- data/lib/ftp_paradise/yaml/use_colours.yml +1 -0
- data/test/testing_ftp_paradise.rb +94 -0
- data/test/testing_minimal_pure_net_ftp_example_to_connect.rb +28 -0
- data/test/testing_the_ftp_connection_component.rb +70 -0
- data/test/testing_upload_a_local_directory.rb +10 -0
- metadata +315 -0
@@ -0,0 +1,80 @@
|
|
1
|
+
#!/usr/bin/ruby -w
|
2
|
+
# Encoding: UTF-8
|
3
|
+
# frozen_string_literal: true
|
4
|
+
# =========================================================================== #
|
5
|
+
# require 'ftp_paradise/connection/debug.rb'
|
6
|
+
# =========================================================================== #
|
7
|
+
require 'ftp_paradise/base/prototype.rb'
|
8
|
+
|
9
|
+
module FtpParadise
|
10
|
+
|
11
|
+
class Connection < Base
|
12
|
+
|
13
|
+
# ========================================================================= #
|
14
|
+
# === set_debug
|
15
|
+
# ========================================================================= #
|
16
|
+
def set_debug(i = SHALL_WE_DEBUG)
|
17
|
+
@internal_hash[:debug] = i
|
18
|
+
end
|
19
|
+
|
20
|
+
# ========================================================================= #
|
21
|
+
# === enable_debug_mode
|
22
|
+
#
|
23
|
+
# When the debug mode is set to true, then all traffic to and from
|
24
|
+
# the server is written to $stdout. By default, this will NOT
|
25
|
+
# be the case.
|
26
|
+
# ========================================================================= #
|
27
|
+
def enable_debug_mode
|
28
|
+
ftp_object?.debug_mode = true
|
29
|
+
end
|
30
|
+
|
31
|
+
# ========================================================================= #
|
32
|
+
# === enable_debug
|
33
|
+
#
|
34
|
+
# Set the @debug variable to true, and also invoke enable_debug_mode().
|
35
|
+
# ========================================================================= #
|
36
|
+
def enable_debug
|
37
|
+
enable_debug_mode
|
38
|
+
set_debug(true)
|
39
|
+
end
|
40
|
+
|
41
|
+
# ========================================================================= #
|
42
|
+
# === debug?
|
43
|
+
# ========================================================================= #
|
44
|
+
def debug?
|
45
|
+
@internal_hash[:debug]
|
46
|
+
end
|
47
|
+
|
48
|
+
# ========================================================================= #
|
49
|
+
# === disable_debug
|
50
|
+
# ========================================================================= #
|
51
|
+
def disable_debug
|
52
|
+
ftp_object?.debug_mode = false
|
53
|
+
@internal_hash[:debug] = false
|
54
|
+
end
|
55
|
+
|
56
|
+
# ========================================================================= #
|
57
|
+
# === debug (debug tag)
|
58
|
+
#
|
59
|
+
# This method can be used for some debugging output.
|
60
|
+
# ========================================================================= #
|
61
|
+
def debug(
|
62
|
+
shall_we_debug = debug?
|
63
|
+
)
|
64
|
+
cliner {
|
65
|
+
pp ftp?
|
66
|
+
show_host_user_name_port_and_password
|
67
|
+
update_file_listing
|
68
|
+
if shall_we_debug
|
69
|
+
opnn; e 'File Listing:'
|
70
|
+
show_file_listing
|
71
|
+
end
|
72
|
+
if remote_file_listing?.empty?
|
73
|
+
opnn; e 'No file could be found. The remote directory '\
|
74
|
+
'is most likely empty.'
|
75
|
+
end
|
76
|
+
} if shall_we_debug
|
77
|
+
end; alias feedback debug # === feedback
|
78
|
+
alias report debug # === report
|
79
|
+
|
80
|
+
end; end
|
@@ -0,0 +1,271 @@
|
|
1
|
+
#!/usr/bin/ruby -w
|
2
|
+
# Encoding: UTF-8
|
3
|
+
# frozen_string_literal: true
|
4
|
+
# =========================================================================== #
|
5
|
+
# require 'ftp_paradise/connection/directory_handling.rb'
|
6
|
+
# =========================================================================== #
|
7
|
+
module FtpParadise
|
8
|
+
|
9
|
+
class Connection < FtpParadise::Base
|
10
|
+
|
11
|
+
require 'ftp_paradise/connection/remote_pwd.rb'
|
12
|
+
require 'ftp_paradise/connection/file_handling.rb'
|
13
|
+
|
14
|
+
# ========================================================================= #
|
15
|
+
# === report_current_remote_dir
|
16
|
+
#
|
17
|
+
# Gives you the current dir.
|
18
|
+
# ========================================================================= #
|
19
|
+
def report_current_remote_dir(
|
20
|
+
be_verbose = be_verbose?
|
21
|
+
)
|
22
|
+
begin
|
23
|
+
if be_verbose
|
24
|
+
opnn; e 'The remote directory is:'
|
25
|
+
e " #{sdir(return_remote_pwd)}"
|
26
|
+
end
|
27
|
+
rescue Exception => error
|
28
|
+
opnn; e error.class
|
29
|
+
opnn; e error
|
30
|
+
end
|
31
|
+
end; alias report_remote_directory report_current_remote_dir # === report_remote_directory
|
32
|
+
alias dir? report_current_remote_dir # === dir?
|
33
|
+
alias report_remote_pwd report_current_remote_dir # === report_remote_pwd
|
34
|
+
|
35
|
+
# ========================================================================= #
|
36
|
+
# === remote_chdir (cd tag, chdir tag)
|
37
|
+
#
|
38
|
+
# This method allows us to cd to another remote directory, on the
|
39
|
+
# remote FTP server (our main connection).
|
40
|
+
#
|
41
|
+
# The method must be able to check whether we are connected to the
|
42
|
+
# remote host.
|
43
|
+
# ========================================================================= #
|
44
|
+
def remote_chdir(
|
45
|
+
i,
|
46
|
+
be_verbose = be_verbose?
|
47
|
+
)
|
48
|
+
i = i.dup if i.frozen?
|
49
|
+
# ======================================================================= #
|
50
|
+
# Sanitize odd entries ending with ':'
|
51
|
+
# ======================================================================= #
|
52
|
+
i[-1,1] = '/' if i.end_with? ':'
|
53
|
+
i = rds("#{i}/") # <- Always ensure that a '/' is the last character.
|
54
|
+
if be_verbose
|
55
|
+
notify_the_user_about(i, __method__)
|
56
|
+
end
|
57
|
+
if is_connected?
|
58
|
+
# ===================================================================== #
|
59
|
+
# If we cd to a non-existing target, the exception Net::FTPPermError
|
60
|
+
# will be raised.
|
61
|
+
# ===================================================================== #
|
62
|
+
begin
|
63
|
+
ftp_object?.chdir(i)
|
64
|
+
update_remote_file_listing
|
65
|
+
# ===================================================================== #
|
66
|
+
# The user may have insufficient permissions:
|
67
|
+
# ===================================================================== #
|
68
|
+
rescue Net::FTPPermError => error
|
69
|
+
pp error
|
70
|
+
rescue Net::ReadTimeout => error
|
71
|
+
opnn; e 'An error was encountered in the method '\
|
72
|
+
'remote_chdir().'
|
73
|
+
opnn; e 'The error-class was Net::ReadTimeout.'
|
74
|
+
e
|
75
|
+
opnn; e 'The specific error will be displayed next.'
|
76
|
+
e
|
77
|
+
pp error
|
78
|
+
end
|
79
|
+
else
|
80
|
+
opnn; e 'We are not connected to a remote host right now.'
|
81
|
+
opnn; e 'Thus we can not change the directory.'
|
82
|
+
end
|
83
|
+
report_current_remote_dir if be_verbose # right now mandatory
|
84
|
+
end; alias rcd remote_chdir # === rcd
|
85
|
+
alias remote_cd remote_chdir # === remote_cd
|
86
|
+
alias chdir remote_chdir # === chdir
|
87
|
+
alias cd remote_chdir # === cd
|
88
|
+
alias chdir remote_chdir # === chdir
|
89
|
+
alias rcd remote_chdir # === rcd
|
90
|
+
alias change_directory remote_chdir # === change_directory
|
91
|
+
alias change_remote_directory remote_chdir # === change_remote_directory
|
92
|
+
alias cd_into_this_remote_directory remote_chdir # === cd_into_this_remote_directory
|
93
|
+
alias remote_change_directory remote_chdir # === remote_change_directory
|
94
|
+
|
95
|
+
# ========================================================================= #
|
96
|
+
# === return_remote_directories
|
97
|
+
#
|
98
|
+
# Give us a list of (remote) directories - only directories, not
|
99
|
+
# files.
|
100
|
+
#
|
101
|
+
# An Array will be returned as a result.
|
102
|
+
# ========================================================================= #
|
103
|
+
def return_remote_directories
|
104
|
+
_ = []
|
105
|
+
update_file_listing # Populate the file listing anew, so we will always get proper results back.
|
106
|
+
raw_listing?.each {|entry|
|
107
|
+
entry = FtpParadise::Entry.new(entry)
|
108
|
+
_ << rds(entry.return_name) if entry.is_a_directory?
|
109
|
+
}
|
110
|
+
# ======================================================================= #
|
111
|
+
# Directories must end with '/'. Ensure this to be the case next.
|
112
|
+
# ======================================================================= #
|
113
|
+
_.map! {|entry|
|
114
|
+
entry << '/' unless entry.end_with? '/'
|
115
|
+
entry
|
116
|
+
}
|
117
|
+
return _
|
118
|
+
end; alias directories? return_remote_directories # === directories?
|
119
|
+
alias return_directories return_remote_directories # === return_directories
|
120
|
+
|
121
|
+
# ========================================================================= #
|
122
|
+
# === return_remote_directory_content
|
123
|
+
#
|
124
|
+
# This method will return ALL remote entries, no matter if file or
|
125
|
+
# directory.
|
126
|
+
# ========================================================================= #
|
127
|
+
def return_remote_directory_content
|
128
|
+
raw_entries = raw_entries?
|
129
|
+
if raw_entries.nil?
|
130
|
+
populate_raw_entries
|
131
|
+
raw_entries = raw_entries?
|
132
|
+
end
|
133
|
+
if raw_entries
|
134
|
+
_ = raw_entries.reject {|line|
|
135
|
+
line.empty?
|
136
|
+
}.map {|entry|
|
137
|
+
FtpParadise::Entry.new(entry).name?
|
138
|
+
}
|
139
|
+
end
|
140
|
+
return _
|
141
|
+
end; alias array_file_listing? return_remote_directory_content # === array_file_listing?
|
142
|
+
alias array_file_listing return_remote_directory_content # === array_file_listing
|
143
|
+
alias remote_directory_content return_remote_directory_content # === remote_directory_content
|
144
|
+
alias list? return_remote_directory_content # === list?
|
145
|
+
|
146
|
+
# ========================================================================= #
|
147
|
+
# === is_a_directory?
|
148
|
+
#
|
149
|
+
# This method queries whether the given input is a (remote) directory.
|
150
|
+
# For this to work, the given input must obviously exist as file or
|
151
|
+
# directory.
|
152
|
+
# ========================================================================= #
|
153
|
+
def is_a_directory?(i)
|
154
|
+
update_file_listing
|
155
|
+
candidates = file_listing_as_entries?.select {|entry|
|
156
|
+
entry.is_a_directory?
|
157
|
+
}.map(&:last)
|
158
|
+
candidates.include? i
|
159
|
+
end; alias is_directory? is_a_directory? # === is_directory?
|
160
|
+
alias is_a_directory? is_a_directory? # === is_a_directory?
|
161
|
+
alias this_remote_directory_exists? is_a_directory? # === this_remote_directory_exists?
|
162
|
+
alias is_dir? is_a_directory? # === is_dir?
|
163
|
+
|
164
|
+
# ========================================================================= #
|
165
|
+
# === remote_directory_is_empty?
|
166
|
+
#
|
167
|
+
# This method will return a Boolean - true if the remote directory
|
168
|
+
# is empty, and false otherwise.
|
169
|
+
# ========================================================================= #
|
170
|
+
def remote_directory_is_empty?
|
171
|
+
_ = return_remote_directory_content
|
172
|
+
_.reject! {|entry|
|
173
|
+
(entry == '.') or (entry == '..')
|
174
|
+
}
|
175
|
+
_.empty?
|
176
|
+
end
|
177
|
+
|
178
|
+
# ========================================================================= #
|
179
|
+
# === create_this_remote_directory (mkdir tag)
|
180
|
+
#
|
181
|
+
# This method will attempt to create a remote directory.
|
182
|
+
#
|
183
|
+
# A Net::FTPPermError may result if the permission does not allow for
|
184
|
+
# that action.
|
185
|
+
# ========================================================================= #
|
186
|
+
def create_this_remote_directory(
|
187
|
+
i, be_verbose = be_verbose?
|
188
|
+
)
|
189
|
+
if i.is_a? Array
|
190
|
+
i.each {|entry| create_this_remote_directory(entry, be_verbose) }
|
191
|
+
else
|
192
|
+
i = rds(i+'/')
|
193
|
+
if be_verbose
|
194
|
+
notify_the_user_about(i, __method__)
|
195
|
+
if is_directory?(i)
|
196
|
+
opnn; e swarn('Warning - the remote directory ')+
|
197
|
+
sdir(i)+swarn(' already exists.')
|
198
|
+
opnn; e swarn('We thus can not create a new directory.')
|
199
|
+
end
|
200
|
+
end
|
201
|
+
begin
|
202
|
+
ftp_object?.mkdir(i)
|
203
|
+
rescue Net::FTPConnectionError
|
204
|
+
opnn; e 'Not connected - is the network down/available?'
|
205
|
+
rescue Net::FTPPermError
|
206
|
+
opnn; e "Net::FTPPermError: Can not create the remote "\
|
207
|
+
"directory `#{remote_path?}#{sdir(i)}`"
|
208
|
+
opnn; e 'as it - or a file with the same name - already exists.'
|
209
|
+
end
|
210
|
+
end
|
211
|
+
end; alias mkdir create_this_remote_directory # === mkdir
|
212
|
+
alias rmkdir create_this_remote_directory # === rmkdir
|
213
|
+
alias remote_mkdir create_this_remote_directory # === remote_mkdir
|
214
|
+
alias create_directory create_this_remote_directory # === create_directory
|
215
|
+
alias create_these_remote_directories create_this_remote_directory # === create_these_remote_directories
|
216
|
+
alias remote_create_directory create_this_remote_directory # === remote_create_directory
|
217
|
+
alias create_remote_directory create_this_remote_directory # === create_remote_directory
|
218
|
+
|
219
|
+
# ========================================================================= #
|
220
|
+
# === sanitize_remote_directory_content
|
221
|
+
#
|
222
|
+
# The purpose of this method is to clean up the remote dataset.
|
223
|
+
#
|
224
|
+
# Keep in mind that the output comes in something like:
|
225
|
+
#
|
226
|
+
# "-rw-rw-rw- 1 web netscape 6820 May 30 2011 AppendToCookbook.rb"
|
227
|
+
# "drwxrwxrwx 2 web netscape 8192 Oct 29 2007 CSS"
|
228
|
+
# "-rw-rw-rw- 1 web netscape 10548 May 30 2011 Chained.rb"
|
229
|
+
# "-rw-r--r-- 1 330 330 237904 Jun 9 14:24 11.03.2003_UniWien_Biologie_EinfuehrungInDieMikrobiologie.jpg",
|
230
|
+
#
|
231
|
+
# This should contain all the information that is needed.
|
232
|
+
# ========================================================================= #
|
233
|
+
def sanitize_remote_directory_content
|
234
|
+
_ = []
|
235
|
+
raw_entries?.each { |e|
|
236
|
+
next if e.empty?
|
237
|
+
entry = FtpParadise::Entry.new(e)
|
238
|
+
filesize = entry.filesize?
|
239
|
+
timestamp = entry.parsed_timestamp?
|
240
|
+
# ===================================================================== #
|
241
|
+
# === Exclude 3 entries next
|
242
|
+
# ===================================================================== #
|
243
|
+
next if e.include? 'total' or
|
244
|
+
entry.name? == '.' or
|
245
|
+
entry.name? == '..' # Batch next.
|
246
|
+
# ===================================================================== #
|
247
|
+
# === Build up the final Array
|
248
|
+
#
|
249
|
+
# Our Array will have four entries:
|
250
|
+
#
|
251
|
+
# (1) Filename
|
252
|
+
# (2) File or Directory (String)
|
253
|
+
# (3) Filesize
|
254
|
+
# (4) Timestamp
|
255
|
+
#
|
256
|
+
# ===================================================================== #
|
257
|
+
_ << [ rds(entry.filename?), entry.file_or_directory, filesize, timestamp ]
|
258
|
+
}
|
259
|
+
@internal_hash[:sanitized_remote_directory_content] = _ #.compact
|
260
|
+
end
|
261
|
+
|
262
|
+
# ========================================================================= #
|
263
|
+
# === sanitized_remote_directory_content?
|
264
|
+
# ========================================================================= #
|
265
|
+
def sanitized_remote_directory_content?
|
266
|
+
update_remote_file_listing
|
267
|
+
sanitize_remote_directory_content
|
268
|
+
@internal_hash[:sanitized_remote_directory_content]
|
269
|
+
end
|
270
|
+
|
271
|
+
end; end
|
@@ -0,0 +1,108 @@
|
|
1
|
+
#!/usr/bin/ruby -w
|
2
|
+
# Encoding: UTF-8
|
3
|
+
# frozen_string_literal: true
|
4
|
+
# =========================================================================== #
|
5
|
+
# require 'ftp_paradise/connection/do_login.rb'
|
6
|
+
# =========================================================================== #
|
7
|
+
require 'ftp_paradise/connection/initialize_a_new_net_ftp_object_with_this_url.rb'
|
8
|
+
require 'ftp_paradise/connection/is_connected.rb'
|
9
|
+
require 'ftp_paradise/connection/password.rb'
|
10
|
+
require 'ftp_paradise/connection/sync_ftp_object_onto_the_main_namespace.rb'
|
11
|
+
|
12
|
+
module FtpParadise
|
13
|
+
|
14
|
+
class Connection < FtpParadise::Base
|
15
|
+
|
16
|
+
require 'ftp_paradise/toplevel_methods/remote_url.rb'
|
17
|
+
|
18
|
+
# ========================================================================= #
|
19
|
+
# === do_login
|
20
|
+
#
|
21
|
+
# This method is responsible for the login-action.
|
22
|
+
#
|
23
|
+
# The method signature for the net-ftp class' .login() is:
|
24
|
+
#
|
25
|
+
# login(user = "anonymous", passwd = nil, acct = nil)
|
26
|
+
#
|
27
|
+
# This method here accepts a Hash as first argument.
|
28
|
+
#
|
29
|
+
# For official information about .login(), see here:
|
30
|
+
#
|
31
|
+
# https://ruby-doc.org/stdlib/libdoc/net/ftp/rdoc/Net/FTP.html#method-i-login
|
32
|
+
#
|
33
|
+
# ========================================================================= #
|
34
|
+
def do_login(
|
35
|
+
to_this_url = nil, # The remote URL.
|
36
|
+
use_this_as_username = username?, # The login-name.
|
37
|
+
use_this_as_password = password?, # The password for that user.
|
38
|
+
be_verbose = be_verbose?
|
39
|
+
)
|
40
|
+
if to_this_url.nil?
|
41
|
+
to_this_url = FtpParadise.remote_url?
|
42
|
+
elsif to_this_url.is_a? Hash
|
43
|
+
end
|
44
|
+
# ======================================================================= #
|
45
|
+
# Rescue nil-passwords here.
|
46
|
+
# ======================================================================= #
|
47
|
+
if use_this_as_password.to_s.empty?
|
48
|
+
use_this_as_password = set_password(:try_to_use_a_default_password)
|
49
|
+
end
|
50
|
+
if be_verbose
|
51
|
+
# ===================================================================== #
|
52
|
+
# Display some info to the user here.
|
53
|
+
# ===================================================================== #
|
54
|
+
e; cliner
|
55
|
+
opnn; e "Using the URL #{royalblue(to_this_url)} (remote FTP host)."
|
56
|
+
e
|
57
|
+
e " Username: #{slateblue(use_this_as_username)}"
|
58
|
+
e " Password: #{slateblue(use_this_as_password)}"
|
59
|
+
e
|
60
|
+
report_transfer_mode_in_use
|
61
|
+
e
|
62
|
+
cliner
|
63
|
+
end
|
64
|
+
if ftp_object?.nil? and !to_this_url.nil?
|
65
|
+
initialize_a_new_net_ftp_object_with_this_url(to_this_url)
|
66
|
+
end
|
67
|
+
use_this_as_username = use_this_as_username.to_s
|
68
|
+
# ======================================================================= #
|
69
|
+
# The following code must be rescued because the login() method
|
70
|
+
# may fail in various ways.
|
71
|
+
# ======================================================================= #
|
72
|
+
begin
|
73
|
+
ftp_object?.login(
|
74
|
+
use_this_as_username,
|
75
|
+
use_this_as_password
|
76
|
+
)
|
77
|
+
# =================================================================== #
|
78
|
+
# Next, assign towards the toplevel reference to the ftp-connection.
|
79
|
+
# =================================================================== #
|
80
|
+
sync_ftp_object_onto_the_main_namespace if ftp_object?
|
81
|
+
if be_verbose and is_connected?
|
82
|
+
e
|
83
|
+
cliner {
|
84
|
+
e "- #{sfancy('Successfully')} logged into "\
|
85
|
+
"the remote FTP host at `#{simp(to_this_url)}`"
|
86
|
+
}
|
87
|
+
end
|
88
|
+
rescue Net::FTPPermError => error
|
89
|
+
opnn; e "We could not connect and login to `#{sfancy(to_this_url)}`."
|
90
|
+
opnn; e 'It may be that you lack the proper permissions.'
|
91
|
+
opnn; e 'This may happen because the user/password combination was'
|
92
|
+
opnn; e 'incorrect. User and password combination will be shown next:'
|
93
|
+
show_user_and_password
|
94
|
+
opnn; e "Feedbacking that error next, of class #{error.class.to_s}:"
|
95
|
+
opnn; e orange(error.to_s)
|
96
|
+
rescue Net::FTPConnectionError => error
|
97
|
+
opnn; e 'We do not seem to be connected. An error happened.'
|
98
|
+
pp error
|
99
|
+
pp error.class
|
100
|
+
end
|
101
|
+
end; alias do_connect do_login # === do_connect
|
102
|
+
alias connect_to do_login # === connect_to
|
103
|
+
alias connect do_login # === connect
|
104
|
+
alias login do_login # === login
|
105
|
+
alias login_to do_login # === login_to
|
106
|
+
alias reconnect do_login # === reconnect
|
107
|
+
|
108
|
+
end; end
|