Compare commits
2 Commits
ce5bca45a3
...
d49dcda651
Author | SHA1 | Date | |
---|---|---|---|
d49dcda651 | |||
6fc0459d81 |
@ -6,7 +6,9 @@
|
|||||||
- ℹ️ - Information
|
- ℹ️ - Information
|
||||||
- ♻️ - Edited
|
- ♻️ - Edited
|
||||||
|
|
||||||
## 0.2.1 - [13/03/2022]
|
## 0.2.1 - [14/03/2022]
|
||||||
|
- ➕ - prompt '>' set color green
|
||||||
|
- ♻️ - change default pwd path to '$HOME/.pwd.yml'
|
||||||
- ✔️ - fixed empty search field
|
- ✔️ - fixed empty search field
|
||||||
- ✔️ - fixed password generate colors to russian flag
|
- ✔️ - fixed password generate colors to russian flag
|
||||||
|
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
name: pmng
|
name: pmng
|
||||||
version: 0.1.0
|
version: 0.2.1
|
||||||
|
|
||||||
authors:
|
authors:
|
||||||
- Alexander Popov <iiiypuk@iiiypuk.me>
|
- Alexander Popov <iiiypuk@iiiypuk.me>
|
||||||
|
40
src/pmng.cr
40
src/pmng.cr
@ -2,6 +2,7 @@ require "option_parser"
|
|||||||
require "yaml"
|
require "yaml"
|
||||||
require "colorize"
|
require "colorize"
|
||||||
|
|
||||||
|
# password serializer
|
||||||
class Password
|
class Password
|
||||||
include YAML::Serializable
|
include YAML::Serializable
|
||||||
|
|
||||||
@ -23,9 +24,10 @@ end
|
|||||||
|
|
||||||
VERSION = "0.2.1"
|
VERSION = "0.2.1"
|
||||||
|
|
||||||
|
# program options
|
||||||
begin
|
begin
|
||||||
OptionParser.parse do |parser|
|
OptionParser.parse do |parser|
|
||||||
parser.banner = "pmng -- ver.: #{VERSION}\nThe very simple password manager for humans\n"
|
parser.banner = "The very simple password manager for humans\n"
|
||||||
|
|
||||||
parser.on "-v", "--version", "Show version" do
|
parser.on "-v", "--version", "Show version" do
|
||||||
puts "Version #{VERSION}"
|
puts "Version #{VERSION}"
|
||||||
@ -50,11 +52,15 @@ rescue ex
|
|||||||
puts ex.message, ""
|
puts ex.message, ""
|
||||||
end
|
end
|
||||||
|
|
||||||
password_file_path = PROGRAM_NAME.split("/")
|
# password_file_path = PROGRAM_NAME.split("/")
|
||||||
password_file_path.pop
|
# password_file_path.pop
|
||||||
password_file_path.insert(-1, "pwd.yml")
|
# password_file_path.insert(-1, "pwd.yml")
|
||||||
password_file_path = password_file_path.join("/")
|
# password_file_path = password_file_path.join("/")
|
||||||
|
|
||||||
|
# TODO: Fix later
|
||||||
|
password_file_path = "#{ENV["HOME"]}/.pwd.yml"
|
||||||
|
|
||||||
|
# check password file exists
|
||||||
if File.exists?(password_file_path)
|
if File.exists?(password_file_path)
|
||||||
yaml = File.open(password_file_path) do |file|
|
yaml = File.open(password_file_path) do |file|
|
||||||
YAML.parse(file)
|
YAML.parse(file)
|
||||||
@ -65,37 +71,44 @@ else
|
|||||||
exit(1)
|
exit(1)
|
||||||
end
|
end
|
||||||
|
|
||||||
new_array = [] of Password
|
# fill passwords array
|
||||||
|
passwords_array = [] of Password
|
||||||
count = 0
|
count = 0
|
||||||
while count < yaml.size
|
while count < yaml.size
|
||||||
new_array << Password.from_yaml(yaml[count].to_yaml)
|
passwords_array << Password.from_yaml(yaml[count].to_yaml)
|
||||||
count += 1
|
count += 1
|
||||||
end
|
end
|
||||||
|
|
||||||
|
# main loop
|
||||||
loop = true
|
loop = true
|
||||||
while loop
|
while loop
|
||||||
print "Enter URL (or :q for exit)\n> "
|
# shell prompt
|
||||||
|
print "Enter URL (or :q for exit)\n"
|
||||||
|
print "> ".colorize(:green)
|
||||||
password_string = gets
|
password_string = gets
|
||||||
|
|
||||||
|
# if ':q' to close program
|
||||||
if password_string.to_s == ":q"
|
if password_string.to_s == ":q"
|
||||||
puts "Bye! 👋🏻"
|
puts "Bye! 👋🏻"
|
||||||
exit(0)
|
exit(0)
|
||||||
|
# if puts empty, retry prompt
|
||||||
elsif password_string.to_s.size == 0
|
elsif password_string.to_s.size == 0
|
||||||
puts
|
puts
|
||||||
|
# if ':h' to view help
|
||||||
elsif password_string.to_s == ":h"
|
elsif password_string.to_s == ":h"
|
||||||
puts "Help:\n-----"
|
puts "Help:\n-----"
|
||||||
puts ":s - Return stats"
|
puts ":s - Return stats"
|
||||||
|
# if ':s' to view Statistics
|
||||||
elsif password_string.to_s == ":s"
|
elsif password_string.to_s == ":s"
|
||||||
puts "Statictics:\n----------"
|
puts "Statistics:\n----------"
|
||||||
print "Elements: ".colorize(:yellow)
|
print "Elements: ".colorize(:yellow)
|
||||||
puts new_array.size
|
puts passwords_array.size
|
||||||
|
|
||||||
print "Outdated: ".colorize(:red)
|
print "Outdated: ".colorize(:red)
|
||||||
outdated_count = 0
|
outdated_count = 0
|
||||||
current_time = Time.local.to_unix
|
current_time = Time.local.to_unix
|
||||||
a = [] of String
|
a = [] of String
|
||||||
new_array.each do |item|
|
passwords_array.each do |item|
|
||||||
if item.update + (2629743 * 2) < current_time # 2629743 * 2 -- 2 month
|
if item.update + (2629743 * 2) < current_time # 2629743 * 2 -- 2 month
|
||||||
outdated_count += 1
|
outdated_count += 1
|
||||||
a << item.url
|
a << item.url
|
||||||
@ -103,8 +116,9 @@ while loop
|
|||||||
end
|
end
|
||||||
|
|
||||||
puts outdated_count
|
puts outdated_count
|
||||||
|
# list search password
|
||||||
else
|
else
|
||||||
new_array.each do |item|
|
passwords_array.each do |item|
|
||||||
if item.url.includes?(password_string.to_s)
|
if item.url.includes?(password_string.to_s)
|
||||||
puts item.url.colorize(:magenta).mode(:blink)
|
puts item.url.colorize(:magenta).mode(:blink)
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user