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.

Files changed (118) hide show
  1. checksums.yaml +7 -0
  2. data/README.md +309 -0
  3. data/bin/create_remote_directory +9 -0
  4. data/bin/ftp_get +17 -0
  5. data/bin/ftp_upload +42 -0
  6. data/bin/ftp_upload_binary +18 -0
  7. data/bin/iftp +7 -0
  8. data/bin/remote_remove +28 -0
  9. data/doc/README.gen +292 -0
  10. data/doc/TODO_FOR_FTP_PARADISE_PROJECT.md +79 -0
  11. data/ftp_paradise.gemspec +114 -0
  12. data/lib/ftp_paradise.rb +5 -0
  13. data/lib/ftp_paradise/base/cliner.rb +21 -0
  14. data/lib/ftp_paradise/base/colours.rb +83 -0
  15. data/lib/ftp_paradise/base/prototype.rb +169 -0
  16. data/lib/ftp_paradise/base/reset.rb +29 -0
  17. data/lib/ftp_paradise/colours/colours.rb +141 -0
  18. data/lib/ftp_paradise/colours/use_colours.rb +74 -0
  19. data/lib/ftp_paradise/configuration/configuration.rb +49 -0
  20. data/lib/ftp_paradise/connection/README.md +1 -0
  21. data/lib/ftp_paradise/connection/connection.rb +35 -0
  22. data/lib/ftp_paradise/connection/constants.rb +46 -0
  23. data/lib/ftp_paradise/connection/data.rb +148 -0
  24. data/lib/ftp_paradise/connection/debug.rb +80 -0
  25. data/lib/ftp_paradise/connection/directory_handling.rb +271 -0
  26. data/lib/ftp_paradise/connection/do_login.rb +108 -0
  27. data/lib/ftp_paradise/connection/download.rb +86 -0
  28. data/lib/ftp_paradise/connection/file_handling.rb +172 -0
  29. data/lib/ftp_paradise/connection/ftp_object.rb +21 -0
  30. data/lib/ftp_paradise/connection/initialize.rb +86 -0
  31. data/lib/ftp_paradise/connection/initialize_a_new_net_ftp_object_with_this_url.rb +20 -0
  32. data/lib/ftp_paradise/connection/is_connected.rb +46 -0
  33. data/lib/ftp_paradise/connection/misc.rb +472 -0
  34. data/lib/ftp_paradise/connection/notify.rb +71 -0
  35. data/lib/ftp_paradise/connection/password.rb +47 -0
  36. data/lib/ftp_paradise/connection/port.rb +33 -0
  37. data/lib/ftp_paradise/connection/remote_pwd.rb +72 -0
  38. data/lib/ftp_paradise/connection/remote_url.rb +163 -0
  39. data/lib/ftp_paradise/connection/remove.rb +143 -0
  40. data/lib/ftp_paradise/connection/reset.rb +75 -0
  41. data/lib/ftp_paradise/connection/run.rb +18 -0
  42. data/lib/ftp_paradise/connection/set_array_available_hosts.rb +27 -0
  43. data/lib/ftp_paradise/connection/set_input.rb +18 -0
  44. data/lib/ftp_paradise/connection/show.rb +153 -0
  45. data/lib/ftp_paradise/connection/sync_ftp_object_onto_the_main_namespace.rb +24 -0
  46. data/lib/ftp_paradise/connection/transfer_mode.rb +162 -0
  47. data/lib/ftp_paradise/connection/upload.rb +253 -0
  48. data/lib/ftp_paradise/connection/use_default_dataset.rb +41 -0
  49. data/lib/ftp_paradise/connection/username.rb +42 -0
  50. data/lib/ftp_paradise/constants/constants.rb +19 -0
  51. data/lib/ftp_paradise/constants/misc.rb +57 -0
  52. data/lib/ftp_paradise/constants/namespace.rb +14 -0
  53. data/lib/ftp_paradise/constants/newline.rb +14 -0
  54. data/lib/ftp_paradise/constants/roebe.rb +27 -0
  55. data/lib/ftp_paradise/constants/roebe_ftp_constants.rb +219 -0
  56. data/lib/ftp_paradise/entry/entry.rb +293 -0
  57. data/lib/ftp_paradise/gui/gtk/constants.rb +58 -0
  58. data/lib/ftp_paradise/gui/gtk/ftp_bindings.rb +1149 -0
  59. data/lib/ftp_paradise/interactive_ftp/constants.rb +103 -0
  60. data/lib/ftp_paradise/interactive_ftp/directory_handling.rb +215 -0
  61. data/lib/ftp_paradise/interactive_ftp/help.rb +50 -0
  62. data/lib/ftp_paradise/interactive_ftp/initialize.rb +27 -0
  63. data/lib/ftp_paradise/interactive_ftp/interactive_ftp.rb +995 -0
  64. data/lib/ftp_paradise/interactive_ftp/main_loop.rb +50 -0
  65. data/lib/ftp_paradise/interactive_ftp/menu.rb +788 -0
  66. data/lib/ftp_paradise/interactive_ftp/misc.rb +208 -0
  67. data/lib/ftp_paradise/interactive_ftp/mode.rb +124 -0
  68. data/lib/ftp_paradise/interactive_ftp/readline.rb +115 -0
  69. data/lib/ftp_paradise/interactive_ftp/remove.rb +97 -0
  70. data/lib/ftp_paradise/interactive_ftp/reset.rb +90 -0
  71. data/lib/ftp_paradise/interactive_ftp/run.rb +22 -0
  72. data/lib/ftp_paradise/interactive_ftp/show.rb +184 -0
  73. data/lib/ftp_paradise/interactive_ftp/upload.rb +90 -0
  74. data/lib/ftp_paradise/interactive_ftp/user_input.rb +53 -0
  75. data/lib/ftp_paradise/project/project.rb +62 -0
  76. data/lib/ftp_paradise/requires/common_basic_requires.rb +13 -0
  77. data/lib/ftp_paradise/requires/common_external_requires.rb +9 -0
  78. data/lib/ftp_paradise/requires/require_the_constants.rb +7 -0
  79. data/lib/ftp_paradise/requires/require_the_ftp_paradise_project.rb +18 -0
  80. data/lib/ftp_paradise/requires/require_the_ftp_paradise_project_with_the_GUI_bindings.rb +10 -0
  81. data/lib/ftp_paradise/requires/require_the_toplevel_methods.rb +24 -0
  82. data/lib/ftp_paradise/toplevel_methods/can_connect_to_remote_site.rb +29 -0
  83. data/lib/ftp_paradise/toplevel_methods/clear_user_dataset.rb +28 -0
  84. data/lib/ftp_paradise/toplevel_methods/connect.rb +49 -0
  85. data/lib/ftp_paradise/toplevel_methods/create_file.rb +18 -0
  86. data/lib/ftp_paradise/toplevel_methods/data.rb +31 -0
  87. data/lib/ftp_paradise/toplevel_methods/delete.rb +23 -0
  88. data/lib/ftp_paradise/toplevel_methods/determine_user_dataset_from_this_hash.rb +37 -0
  89. data/lib/ftp_paradise/toplevel_methods/e.rb +16 -0
  90. data/lib/ftp_paradise/toplevel_methods/ftp_object.rb +270 -0
  91. data/lib/ftp_paradise/toplevel_methods/get_files.rb +24 -0
  92. data/lib/ftp_paradise/toplevel_methods/is_directory.rb +33 -0
  93. data/lib/ftp_paradise/toplevel_methods/is_on_roebe.rb +20 -0
  94. data/lib/ftp_paradise/toplevel_methods/login_name.rb +49 -0
  95. data/lib/ftp_paradise/toplevel_methods/opn.rb +24 -0
  96. data/lib/ftp_paradise/toplevel_methods/password.rb +48 -0
  97. data/lib/ftp_paradise/toplevel_methods/port.rb +41 -0
  98. data/lib/ftp_paradise/toplevel_methods/rds.rb +18 -0
  99. data/lib/ftp_paradise/toplevel_methods/remote_url.rb +57 -0
  100. data/lib/ftp_paradise/toplevel_methods/time.rb +45 -0
  101. data/lib/ftp_paradise/toplevel_methods/upload.rb +29 -0
  102. data/lib/ftp_paradise/toplevel_methods/upload_this_binary_file.rb +58 -0
  103. data/lib/ftp_paradise/version/version.rb +19 -0
  104. data/lib/ftp_paradise/www/public/css/style.css +3 -0
  105. data/lib/ftp_paradise/www/sinatra_web_interface.rb +242 -0
  106. data/lib/ftp_paradise/www/views/index.slim +3 -0
  107. data/lib/ftp_paradise/www/views/layout.slim +11 -0
  108. data/lib/ftp_paradise/www/web_interface.cgi +35 -0
  109. data/lib/ftp_paradise/yaml/automatically_connect_on_startup_of_the_interactive_ftp_shell.yml +1 -0
  110. data/lib/ftp_paradise/yaml/debug.yml +1 -0
  111. data/lib/ftp_paradise/yaml/open_in_default_editor.yml +1 -0
  112. data/lib/ftp_paradise/yaml/show_full_names.yml +1 -0
  113. data/lib/ftp_paradise/yaml/use_colours.yml +1 -0
  114. data/test/testing_ftp_paradise.rb +94 -0
  115. data/test/testing_minimal_pure_net_ftp_example_to_connect.rb +28 -0
  116. data/test/testing_the_ftp_connection_component.rb +70 -0
  117. data/test/testing_upload_a_local_directory.rb +10 -0
  118. 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