safedb 0.7.1001 → 0.10.5

Sign up to get free protection for your applications and to get access to all the features.
Files changed (45) hide show
  1. checksums.yaml +4 -4
  2. data/CONTRIBUTING.md +50 -3
  3. data/Dockerfile +46 -0
  4. data/Jenkinsfile +45 -0
  5. data/README.md +16 -0
  6. data/Rakefile +2 -2
  7. data/cucumber-test.sh +55 -0
  8. data/lib/cli.rb +20 -7
  9. data/lib/controller/abstract/controller.rb +2 -3
  10. data/lib/controller/access/init.rb +11 -7
  11. data/lib/controller/access/login.rb +0 -2
  12. data/lib/controller/book/commit.rb +1 -0
  13. data/lib/controller/db/obliterate.feature +45 -0
  14. data/lib/controller/db/obliterate.rb +58 -0
  15. data/lib/controller/db/pull.rb +10 -26
  16. data/lib/controller/db/push.rb +29 -321
  17. data/lib/controller/db/{remote.rb → remote-github-keypair.rb} +11 -6
  18. data/lib/controller/db/remote-github-token.rb +69 -0
  19. data/lib/controller/db/state.rb +63 -0
  20. data/lib/controller/query/publish.rb +27 -0
  21. data/lib/controller/requirer.rb +0 -1
  22. data/lib/manual/git-interaction.md +176 -0
  23. data/lib/manual/remote.md +0 -1
  24. data/lib/model/book.rb +13 -1
  25. data/lib/model/checkin.feature +15 -27
  26. data/lib/model/content.rb +25 -27
  27. data/lib/model/indices.rb +35 -8
  28. data/lib/model/state_evolve.rb +21 -0
  29. data/lib/model/text_chunk.rb +1 -1
  30. data/lib/utils/extend/string.rb +28 -0
  31. data/lib/utils/git/gitflow.rb +565 -0
  32. data/lib/utils/git/github.rb +69 -0
  33. data/lib/utils/identity/machine.id.rb +2 -2
  34. data/lib/utils/keys/keypair.rb +93 -0
  35. data/lib/utils/logs/logger.rb +3 -4
  36. data/lib/utils/time/timestamp.rb +2 -0
  37. data/lib/version.rb +1 -1
  38. data/pod-image-builder.yaml +27 -0
  39. data/pod-image-safetty.yaml +18 -0
  40. data/safedb.gemspec +1 -6
  41. metadata +17 -64
  42. data/genius-decision.txt +0 -25
  43. data/lib/controller/db/model_git_service.rb +0 -399
  44. data/lib/plugin/github.rb +0 -53
  45. data/lib/utils/store/github.rb +0 -27
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 32727ae3d52f041e5049daf92f2bb09aa5783b7d78e8f837f77025dae5a711d7
4
- data.tar.gz: 8d26aad01a827d65f85d2445154e8ee38fbbbbce04570cbc51bd38c198c73c1d
3
+ metadata.gz: c5221d9e392de0ee7e1d506642281edbed9531f7b1cc8846f948c8186edeb1e3
4
+ data.tar.gz: 83805b1ef1d48f03171863ffb7ce6da789c4fadbda0946f5750ecf13a3de1417
5
5
  SHA512:
6
- metadata.gz: a552f7d3b9b958cfad7910f777d1f3d1bd3c91b6bca0b0625c19ddee0699683650d3109fe82934860474035dd51b4333ff3e212442cf56b317f567813ea60dfc
7
- data.tar.gz: 25cec4ed1f64dcd2d0faa8b6423601d867eebb4527202266d31bff7d77df57d77687284d51fefb4fb6ea6befb4aa7398ead2e9632fe2a0c0fcc265efc2546ceb
6
+ metadata.gz: 5601e437f9bcd5c05cf956b48ec453fbbccb144799e5cbfd2d89228aa0589cd16ac7ed345f8002f9887c37e05103e97e2e1d4d92675a4a5ced378612bcb254e5
7
+ data.tar.gz: ba1c693c125a8d625e9c0a7020583a7616fe8394e6ed72400af3b661d391f806a8db8695f4c69b2654cd2a74981fe8e57ea4702d09a047aaf374000f6dfa373c
data/CONTRIBUTING.md CHANGED
@@ -3,8 +3,38 @@
3
3
 
4
4
  You can contriubute software, documentation, issues and even good ideas. Most contributions will either be integrations with other tools and technologies, or new use cases (plugins).
5
5
 
6
+ **Ignore these instructions if you just want to use the software.** To **use the software** **[visit the readme](README.md)**.
6
7
 
7
- ## Contributing Software
8
+
9
+ ---
10
+
11
+
12
+ ## Use Docker to Build and Run the Tests
13
+
14
+ Using **`docker`** is the **simplest quickest** way to **build, package** and run the **cucumber/aruba** test suite.
15
+
16
+ ```
17
+ # Get the safe software
18
+ git clone https://github.com/devops4me/safedb.net.git
19
+ cd safedb.net
20
+
21
+ # Prepare the safe build docker image
22
+ docker build --tag img.safeci .
23
+
24
+ # Now run the safe build docker image
25
+ docker run \
26
+ --interactive \
27
+ --tty \
28
+ --rm \
29
+ --name vm.safeci \
30
+ img.safeci
31
+ ```
32
+
33
+
34
+ ---
35
+
36
+
37
+ ## Building a Development Environment
8
38
 
9
39
  To contribute software you'll need to setup a development environment.
10
40
 
@@ -13,7 +43,7 @@ sudo apt install --assume-yes ruby-full libicu-dev git
13
43
  sudo chown -R $USER:$USER /var/lib/gems
14
44
  sudo chown -R $USER:$USER /usr/local/bin
15
45
  sudo chown -R $USER:$USER /usr/local/lib
16
- gem install safedb bundler gem-release cucumber aruba
46
+ gem install bundler gem-release cucumber aruba
17
47
  git clone https://github.com/devops4me/safedb.net.git mirror.safedb.ro
18
48
  cd mirror.safedb
19
49
  rake install
@@ -24,6 +54,23 @@ cucumber
24
54
  You change the software as you see fit and **send a pull request** when you are ready.
25
55
 
26
56
 
57
+ ## Cucumber and Aruba | Installi the right version
58
+
59
+ Aruba and Cucumber are **finickity** about both each others versions and the ruby version. If you see this output in the gem install command you need to act.
60
+
61
+ ```
62
+ Fetching: aruba-0.14.12.gem (100%)
63
+ Use on ruby 1.8.7
64
+ * Make sure you add something like that to your `Gemfile`. Otherwise you will
65
+ get cucumber > 2 and this will fail on ruby 1.8.7
66
+
67
+ gem 'cucumber', '~> 1.3.20'
68
+
69
+ With aruba >= 1.0 there will be breaking changes. Make sure to read https://github.com/cucumber/aruba/blob/master/History.md for 1.0.0
70
+ Successfully installed aruba-0.14.12
71
+ ```
72
+
73
+
27
74
  ## Running Cucumber/Aruba Tests
28
75
 
29
76
  Use the simple **`cucumber`** command in the project directory to run the tests.
@@ -44,7 +91,7 @@ reek lib
44
91
 
45
92
  ## Automated Software Release
46
93
 
47
- safedb is automatically released by Jenkins using a GitOps style pipeline defined in the Jenkinsfile and Dockerfile. The release to rubygems.org depends on
94
+ safedb is automatically released by Jenkins using a GitOps style pipeline defined in the **[Jenkinsfile]** and **[Dockerfile]**. The release to rubygems.org depends on
48
95
 
49
96
  - a pull request to the [safe github master branch](https://github.com/devops4me/safedb.net.git)
50
97
  - an error-free gem build
data/Dockerfile ADDED
@@ -0,0 +1,46 @@
1
+ FROM ruby:latest
2
+
3
+ # --->
4
+ # ---> install the gems necessary to build test package and
5
+ # ---> release this ruby project.
6
+ # --->
7
+
8
+ RUN gem install gem-release cucumber aruba yard reek
9
+
10
+
11
+ # --->
12
+ # ---> Create a non-root user from which cucumber and aruba
13
+ # ---> orchestrate and validate command line behaviour.
14
+ # --->
15
+
16
+ RUN adduser --home /home/safeci --shell /bin/bash --gecos 'Safe TTY Test User' safeci && \
17
+ install -d -m 755 -o safeci -g safeci /home/safeci
18
+
19
+
20
+ # --->
21
+ # ---> Copy the project assets into the docker image.
22
+ # --->
23
+
24
+ COPY . /home/safeci/code/
25
+
26
+
27
+ # --->
28
+ # ---> Use rake to Copy the project assets into the docker image.
29
+ # --->
30
+
31
+ RUN chown -R safeci:safeci /home/safeci && \
32
+ chmod u+x /home/safeci/code/cucumber-test.sh && \
33
+ cd /home/safeci/code && \
34
+ rake install
35
+
36
+
37
+ # --->
38
+ # --->
39
+ # ---> As the safeci user employ cucumber and aruba to recursively
40
+ # ---> find and execute all cucumber (*.feature) files under lib.
41
+ # --->
42
+
43
+ USER safeci
44
+ WORKDIR /home/safeci/code
45
+
46
+ ####### ENTRYPOINT [ "/home/safeci/code/cucumber-test.sh" ]
data/Jenkinsfile ADDED
@@ -0,0 +1,45 @@
1
+ pipeline
2
+ {
3
+ agent none
4
+ stages
5
+ {
6
+ stage('Build Safe Docker Image')
7
+ {
8
+ agent
9
+ {
10
+ kubernetes
11
+ {
12
+ defaultContainer 'kaniko'
13
+ yamlFile 'pod-image-builder.yaml'
14
+ }
15
+ }
16
+ steps
17
+ {
18
+ /*
19
+ * We checkout the git repository again because we
20
+ * are running in a different pod setup specifically
21
+ * to build and test the software.
22
+ */
23
+ checkout scm
24
+ sh '/kaniko/executor -f `pwd`/Dockerfile -c `pwd` --destination devops4me/safetty:latest --cleanup'
25
+ }
26
+ }
27
+ stage('Run the Cucumber Tests')
28
+ {
29
+ agent
30
+ {
31
+ kubernetes
32
+ {
33
+ yamlFile 'pod-image-safetty.yaml'
34
+ }
35
+ }
36
+ steps
37
+ {
38
+ container('safettytests')
39
+ {
40
+ sh '/home/safeci/code/cucumber-test.sh'
41
+ }
42
+ }
43
+ }
44
+ }
45
+ }
data/README.md CHANGED
@@ -2,6 +2,22 @@ safe [![Build Status](https://secure.travis-ci.org/TwP/inifile.png)](http://trav
2
2
  ==========
3
3
 
4
4
 
5
+ ## safe drag `<<xxxx>>`
6
+
7
+ if xxxx
8
+ - ends with a colon @--> book name
9
+ - begins with a colon and no slashes @--> chapter name
10
+ - has just one fwd slash @===> verse (could also have colon to specify different book or different chapter)
11
+ - has 2 fwd slashes ==> it is a line => may also have colon to specify different book or different chapter
12
+ - has no colon or fwd slashes its a line name
13
+
14
+ With this notation the open chapter/verse does not change.
15
+ Used in commands like safe delete | safe drag | safe drop | safe rename <<from>> <<to>>
16
+
17
+
18
+
19
+
20
+
5
21
  ## safe push | safe pull
6
22
 
7
23
  Working with <tt>remote (off-site) storage</tt> and <tt>sync-ing safe books</tt> between **different computers** is done using <tt>safe push</tt> and <tt>safe pull</tt>. Even with a single laptop you need a backup and restore process and this push pull is in-built and ready to go.
data/Rakefile CHANGED
@@ -18,6 +18,6 @@ require 'yard'
18
18
  # This configuration allows us to run "rake yard"
19
19
  # to build documentation.
20
20
  YARD::Rake::YardocTask.new do |t|
21
- t.files = ['lib/**/*.rb'] # optional
22
- t.stats_options = ['--list-undoc']
21
+ t.files = ['lib/**/*.rb'] # optional
22
+ t.stats_options = ['--list-undoc']
23
23
  end
data/cucumber-test.sh ADDED
@@ -0,0 +1,55 @@
1
+ #!/bin/bash
2
+
3
+ ## ####################################### ##
4
+ ## Exit this script when any command fails ##
5
+ ## ####################################### ##
6
+ set -e
7
+
8
+ # ++ +++ ++++++ # +++++ +++++++ # +++ +++++++++ # +++++++ # ++++ +++++ ++ #
9
+ # ++ --- ------ # ----- ------- # --- --------- # ------- # ---- ----- ++ #
10
+ # ++ ++ #
11
+ # ++ Prepare for the cucumber orchestrated tests that are part of the ++ #
12
+ # ++ build for the safedb personal database. This script exports the ++ #
13
+ # ++ protective safe token and then executes cucumber feature files. ++ #
14
+ # ++ ++ #
15
+ # ++ --- ------ # ----- ------- # --- --------- # ------- # ---- ----- ++ #
16
+ # ++ +++ ++++++ # +++++ +++++++ # +++ +++++++++ # +++++++ # ++++ +++++ ++ #
17
+
18
+ echo "" ; echo "" ;
19
+ echo "### ######################################## ###"
20
+ echo "### Static Code Quality Analyzer Suggestions ###"
21
+ echo "### ######################################## ###"
22
+ echo ""
23
+
24
+ reek lib
25
+ echo ""
26
+
27
+ echo "" ; echo "" ;
28
+ echo "### ################################## ###"
29
+ echo "### Ruby Execution Environment Details ###"
30
+ echo "### ################################## ###"
31
+ echo ""
32
+
33
+ echo "Current directory is $(pwd)"
34
+ echo "Current username is $(whoami)"
35
+ echo "" ; ls -lh
36
+ safe version
37
+
38
+ echo ""
39
+ echo "### ################################ ###"
40
+ echo "### Exporting safe shell (tty) token ###"
41
+ echo "### ################################ ###"
42
+ echo ""
43
+
44
+ export SAFE_TTY_TOKEN=$(safe token)
45
+
46
+ echo "" ; echo "" ;
47
+ echo "### ###################################### ###"
48
+ echo "### Now executing the cucumber/aruba tests ###"
49
+ echo "### ###################################### ###"
50
+ echo ""
51
+
52
+ cucumber lib
53
+ echo ""
54
+
55
+ exit 0
data/lib/cli.rb CHANGED
@@ -360,7 +360,7 @@ class CLI < Thor
360
360
  # Creates remote storage for the safe database crypt files.
361
361
  def remote
362
362
  log.info(x) { "performing a remote storage use case. The provision flag is set to #{options[ :provision ]}." }
363
- remote_uc = SafeDb::Remote.new()
363
+ remote_uc = SafeDb::RemoteGithubToken.new()
364
364
  remote_uc.provision = true if options[ :provision ]
365
365
  remote_uc.provision = false unless options[ :provision ]
366
366
  remote_uc.flow()
@@ -410,19 +410,32 @@ class CLI < Thor
410
410
 
411
411
 
412
412
  # Description of the safe database push command.
413
- desc "push", "push crypts to github and put index keys on removable drive"
413
+ desc "push", "push commited safe crypts to the remote backend repository."
414
414
 
415
- # After backing up local assets the <b>push use case</b> creates a remoe github
416
- # repository if necessary and initializes the master crypts as a git repository
417
- # if necessary and then adds, commits and pushes the crypts up to the github
418
- # remote for safe keeping.
415
+ # This simple command does not require the user to be logged into a specific
416
+ # book. The only pre-condition is that safe remote --provision has been successfully
417
+ # run thus placing the required remote origin urls.
419
418
  def push
420
- log.info(x) { "push crypt assets to github and refresh the index keys on removable drive." }
419
+ log.info(x) { "request to push safe crypts to the remote backend." }
421
420
  SafeDb::Push.new().flow()
422
421
  end
423
422
 
424
423
 
425
424
 
425
+
426
+ # Description of the safe database obliterate command.
427
+ desc "obliterate", "creates a backup then removes the entire safe master database"
428
+
429
+ # The obliterate command does not need to be secured behind authentication because
430
+ # all it does is delete a directory. Not withstanding taking a backup - this command
431
+ # is exactly like the bash rm -fr command.
432
+ def obliterate
433
+ log.info(x) { "request to obliterate the safedb master database." }
434
+ SafeDb::Obliterate.new().flow()
435
+ end
436
+
437
+
438
+
426
439
  # Description of the set configuration directives command.
427
440
  desc "set <directive_name> <directive_value>", "set book-scoped configuration directive"
428
441
 
@@ -35,12 +35,11 @@ module SafeDb
35
35
  def initialize
36
36
 
37
37
  class_name = self.class.name.split(":").last.downcase
38
- is_no_token_uc = [ "token", "init", "id" ].include? class_name
38
+ is_no_token_uc = [ "token", "init", "id", "obliterate" ].include? class_name
39
39
  return if is_no_token_uc
40
40
  exit(100) unless ops_key_exists?
41
41
 
42
- is_login_uc = [ "login", "push", "pull" ].include? class_name
43
- return if is_login_uc
42
+ return if [ "login", "push", "pull" ].include? class_name
44
43
 
45
44
  not_logged_in = StateInspect.not_logged_in?()
46
45
  puts TextChunk.not_logged_in_message() if not_logged_in
@@ -33,9 +33,6 @@ module SafeDb
33
33
 
34
34
  def execute
35
35
 
36
- # @todo => in parent class Authenticate validate the book name
37
-
38
-
39
36
  @book_id = Identifier.derive_ergonomic_identifier( @book_name, Indices::SAFE_BOOK_ID_LENGTH )
40
37
 
41
38
  if is_book_initialized?()
@@ -45,8 +42,6 @@ module SafeDb
45
42
 
46
43
  EvolveState.create_book( @book_id )
47
44
 
48
- # @todo => search for password in environment variable
49
-
50
45
  book_secret = KeyPass.password_from_shell( true ) if @password.nil?
51
46
  book_secret = @password unless @password.nil?
52
47
 
@@ -60,6 +55,15 @@ module SafeDb
60
55
  virginal_book()
61
56
  )
62
57
 
58
+ commit_msg = "safe init artifacts for newly created (#{@book_name}) book on #{TimeStamp.readable()}."
59
+
60
+ GitFlow.init( Indices::MASTER_CRYPTS_FOLDER_PATH )
61
+ GitFlow.config( Indices::MASTER_CRYPTS_FOLDER_PATH, "#{ENV[ "USER" ]}@#{Socket.gethostname()}", "SafeDb User" )
62
+ GitFlow.stage( Indices::MASTER_CRYPTS_FOLDER_PATH )
63
+ GitFlow.list( Indices::MASTER_CRYPTS_FOLDER_PATH )
64
+ GitFlow.list( Indices::MASTER_CRYPTS_FOLDER_PATH, true )
65
+ GitFlow.commit( Indices::MASTER_CRYPTS_FOLDER_PATH, commit_msg )
66
+
63
67
  print_success_initializing
64
68
 
65
69
  end
@@ -73,7 +77,7 @@ module SafeDb
73
77
  initial_db = DataStore.new()
74
78
  initial_db.store( Indices::SAFE_BOOK_INITIALIZE_TIME, TimeStamp.readable() )
75
79
  initial_db.store( Indices::SAFE_BOOK_NAME, @book_name )
76
- initial_db.store( Indices::SAFE_BOOK_INIT_VERSION, Indices::SAFE_VERSION_STRING )
80
+ initial_db.store( Indices::SAFE_BOOK_INIT_VERSION, "#{Indices::SAFE_PRE_VERSION_STRING}#{SafeDb::VERSION}" )
77
81
  initial_db.store( Indices::SAFE_BOOK_CHAPTER_KEYS, {} )
78
82
 
79
83
  return initial_db.to_json
@@ -85,7 +89,7 @@ module SafeDb
85
89
 
86
90
  puts ""
87
91
  puts "You can go ahead and login."
88
- puts "Your domain [#{@book_name}] is already setup."
92
+ puts "Your book [#{@book_name}] already exists."
89
93
  puts "You should already know the password."
90
94
  puts ""
91
95
  puts " #{COMMANDMENT} login #{@book_name}"
@@ -25,8 +25,6 @@ module SafeDb
25
25
  # - the shell's secure password reader
26
26
  class Login < Authenticate
27
27
 
28
- # DELETE ME ####################### attr_writer :clip, :login_book_id, :suppress_output
29
-
30
28
  # If the clip switch is present it signifies that the password should
31
29
  # be read in from the clipboard. Any text selection puts text into the
32
30
  # the clipboard - no need specifically to use Ctrl-c (copy).
@@ -33,6 +33,7 @@ module SafeDb
33
33
  puts " safe refresh"
34
34
  puts " safe commit"
35
35
  puts ""
36
+
36
37
  return
37
38
 
38
39
  end
@@ -0,0 +1,45 @@
1
+
2
+ Feature: test safedb's obliterate command
3
+
4
+ This test will run the `safe obliterate` command
5
+
6
+ Scenario: checking the safe shell token exists
7
+ When I run `printenv`
8
+ Then the output should contain "SAFE_TTY_TOKEN"
9
+
10
+ Scenario: there is nothing to obliterate
11
+ When I run `safe obliterate`
12
+ Then the output should contain "There is nothing to obliterate"
13
+ And a directory named "~/.config/safedb/safedb-master-crypts" should not exist
14
+ And a directory named "~/.config/safedb/safedb-branch-crypts" should not exist
15
+ And a directory named "~/.config/safedb/safedb-branch-keys" should not exist
16
+
17
+ Scenario: initializing the safe to obliterate
18
+ When I run `safe init book1 --password=abc123XYZ`
19
+ Then the output should contain "Your book book1 with id r6h43w-c69155 is up"
20
+ And the output should contain "Success"
21
+ And a directory named "~/.config/safedb/safedb-master-crypts" should exist
22
+ And a file named "~/.config/safedb/safedb-master-crypts/safedb-master-keys.ini" should exist
23
+ And a directory named "~/.config/safedb/safedb-master-crypts/.git" should exist
24
+ And a directory named "~/.config/safedb/safedb-branch-crypts" should not exist
25
+ And a directory named "~/.config/safedb/safedb-branch-keys" should not exist
26
+
27
+ Scenario: logging into the (just initialized) safe
28
+ When I run `safe init book1 --password=abc123XYZ`
29
+ And I run `printenv`
30
+ And I run `safe login book1 --password=abc123XYZ`
31
+ Then the output should contain "SAFE_TTY_TOKEN"
32
+ And the output should contain "There are 0 chapters and 0 verses"
33
+ And a directory named "~/.config/safedb/safedb-master-crypts" should exist
34
+ And a file named "~/.config/safedb/safedb-master-crypts/safedb-master-keys.ini" should exist
35
+ And a directory named "~/.config/safedb/safedb-branch-crypts" should exist
36
+ And a directory named "~/.config/safedb/safedb-branch-keys" should exist
37
+
38
+ Scenario: now obliterating the safe we just created
39
+ When I run `safe init book1 --password=abc123XYZ`
40
+ And I run `safe login book1 --password=abc123XYZ`
41
+ And I run `safe obliterate`
42
+ Then the output should contain "The safe has been successfully obliterated"
43
+ And a directory named "~/.config/safedb/safedb-master-crypts" should not exist
44
+ And a directory named "~/.config/safedb/safedb-branch-crypts" should not exist
45
+ And a directory named "~/.config/safedb/safedb-branch-keys" should not exist
@@ -0,0 +1,58 @@
1
+ #!/usr/bin/ruby
2
+
3
+ module SafeDb
4
+
5
+ # Obliterate the entire safe database by removing a number of folders. This is a
6
+ # drastic action especially as it will terminate all safe sessions on the machine
7
+ # no matter which shell is being used.
8
+ #
9
+ # This action is recoverable in two ways. The first is a "safe pull" if using a
10
+ # remote repository like git. The second is manual restoration of the obliterated
11
+ # folder which is saved in the safedb-backup-crypts folder.
12
+ class Obliterate < Controller
13
+
14
+ # Print message and return if the master crypts directory does not exist. Otherwise
15
+ # make a backup of the folder then obliterate
16
+ # - the master crypts folder
17
+ # - the branch crypts folder
18
+ # - the branch keys folder
19
+ def execute()
20
+
21
+ unless ( File.exist?( Indices::MASTER_CRYPTS_FOLDER_PATH ) && File.directory?( Indices::MASTER_CRYPTS_FOLDER_PATH ) )
22
+
23
+ puts ""
24
+ puts " Could not find directory"
25
+ puts " #{Indices::MASTER_CRYPTS_FOLDER_PATH}"
26
+ puts " #{Indices::NOTHING_TO_OBLITERATE}"
27
+ puts ""
28
+ return
29
+
30
+ end
31
+
32
+ backup_folder_name = TimeStamp.yyjjj_hhmm_sst() + "-" + Indices::MASTER_CRYPTS_FOLDER_NAME
33
+ backup_folder_path = File.join( Indices::BACKUP_CRYPTS_FOLDER_PATH, backup_folder_name )
34
+ FileUtils.mkdir_p( backup_folder_path )
35
+ FileUtils.cp_r( "#{Indices::MASTER_CRYPTS_FOLDER_PATH}/.", backup_folder_path )
36
+
37
+ FileUtils.remove_dir( Indices::MASTER_CRYPTS_FOLDER_PATH ) if ( File.exist?( Indices::MASTER_CRYPTS_FOLDER_PATH ) && File.directory?( Indices::MASTER_CRYPTS_FOLDER_PATH ) )
38
+ FileUtils.remove_dir( Indices::BRANCH_CRYPTS_FOLDER_PATH ) if ( File.exist?( Indices::BRANCH_CRYPTS_FOLDER_PATH ) && File.directory?( Indices::BRANCH_CRYPTS_FOLDER_PATH ) )
39
+ FileUtils.remove_dir( Indices::BRANCH_INDICES_FOLDER_PATH ) if ( File.exist?( Indices::BRANCH_INDICES_FOLDER_PATH ) && File.directory?( Indices::BRANCH_INDICES_FOLDER_PATH ) )
40
+
41
+ puts ""
42
+ puts " The safe has been successfully obliterated."
43
+ puts " The obliterated safe database is backed up in this folder."
44
+ puts " #{backup_folder_path}"
45
+ puts " safe init # this will create a new safe"
46
+ puts " safe pull # downloads a remote safe db"
47
+ puts ""
48
+
49
+ return
50
+
51
+
52
+ end
53
+
54
+
55
+ end
56
+
57
+
58
+ end
@@ -2,19 +2,19 @@
2
2
 
3
3
  module SafeDb
4
4
 
5
- # If the removable drive path is configured and exists and contains the master
6
- # index file, the pull use case backs up both file and master crypts (if necessary)
7
- # and then refreshes them with the state that exists in the remote mirrored git
8
- # directory and the indices on the removable drive path.
9
- class Pull < Controller
10
-
11
5
  # If the removable drive path is configured and exists and contains the master
12
6
  # index file, the pull use case backs up both file and master crypts (if necessary)
13
7
  # and then refreshes them with the state that exists in the remote mirrored git
14
8
  # directory and the indices on the removable drive path.
15
- def execute()
9
+ class Pull < Controller
10
+
11
+ # If the removable drive path is configured and exists and contains the master
12
+ # index file, the pull use case backs up both file and master crypts (if necessary)
13
+ # and then refreshes them with the state that exists in the remote mirrored git
14
+ # directory and the indices on the removable drive path.
15
+ def execute()
16
16
 
17
- puts ""
17
+ puts ""
18
18
 
19
19
  removable_drive_path = xxx # ~~~~ read this from the --to variable
20
20
  removable_drive_file = File.join( removable_drive_path, Indices::MASTER_INDICES_FILE_NAME )
@@ -41,29 +41,13 @@ module SafeDb
41
41
 
42
42
  is_git = File.exist?( Indices::MASTER_CRYPTS_GIT_PATH ) && File.directory?( Indices::MASTER_CRYPTS_GIT_PATH )
43
43
 
44
+ return
44
45
 
45
46
 
46
- =begin
47
- require "octokit"
48
- ############client = Octokit::Client.new(:login => 'defunkt', :password => 'c0d3b4ssssss!')
49
-
50
- client = Octokit::Client.new(:access_token => '')
51
- user = client.user
52
- puts "Company Name => #{user[:company]}"
53
- puts "User Name => #{user[:name]}"
54
- puts "User ID => #{user[:id]}"
55
- puts "Email => #{user[:email]}"
56
- puts "Login => #{user[:login]}"
57
- puts "Biography => #{user[:bio]}"
58
- =end
59
-
60
- return
47
+ end
61
48
 
62
49
 
63
50
  end
64
51
 
65
52
 
66
- end
67
-
68
-
69
53
  end