Cleanup and security enhancements in preparation for release 5

This commit is contained in:
2021-10-07 22:59:59 -04:00
parent e1e7254fc1
commit 2bf1859bc7
3 changed files with 91 additions and 98 deletions
+6 -6
View File
@@ -1,18 +1,18 @@
# Maintainer: Randall Winkhart <idgr at tutanota dot com> # Maintainer: Randall Winkhart <idgr at tutanota dot com>
pkgname=rpass pkgname=rpass
pkgver=2021.09.15.mr4.2 pkgver=2021.10.07.mr5
pkgrel=1 pkgrel=1
pkgdesc='An rsync-based password manager and alternative to GNU pass' pkgdesc='An rsync-based password manager and alternative to GNU pass'
url='https://github.com/rwinkhart/rpass' url='https://github.com/rwinkhart/rpass'
arch=('x86_64' 'aarch64') arch=('x86_64' 'aarch64')
license=('GPL3') license=('GPL3')
depends=( python gnupg openssh rsync xclip wl-clipboard) depends=( python gnupg openssh rsync nano xclip wl-clipboard)
source_x86_64=('https://github.com/rwinkhart/rpass/releases/download/v2021.09.15.mr4.2/rpass-2021.09.15.mr4.2.tar.xz') source_x86_64=('https://github.com/rwinkhart/rpass/releases/download/v"$pkgver"/rpass-"$pkgver".tar.xz')
source_aarch64=('https://github.com/rwinkhart/rpass/releases/download/v2021.09.15.mr4.2/rpass-2021.09.15.mr4.2.tar.xz') source_aarch64=('https://github.com/rwinkhart/rpass/releases/download/v"$pkgver"/rpass-"$pkgver".tar.xz')
sha512sums_x86_64=('f3948d7c6e26f53d19a08db32ba7f7a3576d0386dea2338ff529cb3ee72365c3d405d6de5c812b398e87b8fe50b765a4fc2bcc899fe09cef9d2db44c7978d6bf') sha512sums_x86_64=('abc1e265d474866c8d538afae923227a9023e6fc508106ca3c29b86627cd28062a3a446029b958afc6dda987a037860156d7c3d34d67afddc71b4d3ae84169b0')
sha512sums_aarch64=('f3948d7c6e26f53d19a08db32ba7f7a3576d0386dea2338ff529cb3ee72365c3d405d6de5c812b398e87b8fe50b765a4fc2bcc899fe09cef9d2db44c7978d6bf') sha512sums_aarch64=('abc1e265d474866c8d538afae923227a9023e6fc508106ca3c29b86627cd28062a3a446029b958afc6dda987a037860156d7c3d34d67afddc71b4d3ae84169b0')
package() { package() {
+78 -88
View File
@@ -8,11 +8,13 @@ from os import environ
from shutil import move from shutil import move
from shutil import rmtree from shutil import rmtree
from sys import argv from sys import argv
from re import search
from re import escape
import random import random
import string import string
# custom modules
# custom modules
def clear(): def clear():
print('\n' * 100) print('\n' * 100)
@@ -22,12 +24,25 @@ def term(cmd):
_ = system(cmd) _ = system(cmd)
def string_found(string1, string2):
if search(r"\b" + escape(string1) + r"\b", string2):
return True
return False
def replace_line(file_name, line_num, text): def replace_line(file_name, line_num, text):
xlines = open(file_name, 'r').readlines() xlines = open(file_name, 'r').readlines()
xlines[line_num] = text xlines[line_num] = text
out = open(file_name, 'w') open(file_name, 'w').writelines(xlines)
out.writelines(xlines)
out.close()
def edit_note():
lines = open('/dev/shm/' + shmfolder + '/' + shmentry).readlines()
open('/dev/shm/' + shmfolder + '/' + shmentry, 'w').writelines(lines[0:3])
open('/dev/shm/' + shmfolder + '/' + shmentry + '-n', 'w').writelines(lines[4:-2])
term('nano /dev/shm/' + shmfolder + '/' + shmentry + '-n')
edit_notes = open('/dev/shm/' + shmfolder + '/' + shmentry + '-n').read()
open('/dev/shm/' + shmfolder + '/' + shmentry, 'a').write('\n' + edit_notes + '\n\n')
def shmgen(): def shmgen():
@@ -101,7 +116,7 @@ if argument == 'version' or argument == '-v':
print('/ /') print('/ /')
print('/ rpass Copyright (C) 2021 Randall Winkhart /') print('/ rpass Copyright (C) 2021 Randall Winkhart /')
print('/ /') print('/ /')
print('/ Version 2021.10.08.mr5 /') print('/ Version 2021.10.07.mr5 /')
print('/ The Notetaker Update /') print('/ The Notetaker Update /')
print('/ /') print('/ /')
print('////////////////////////////////////////////////////////\n') print('////////////////////////////////////////////////////////\n')
@@ -130,27 +145,24 @@ if argument == 'config':
if directorychoice == 'n' or directorychoice == 'N': if directorychoice == 'n' or directorychoice == 'N':
print('\nFormat: /this/path/ends/with/a/slash/\n') print('\nFormat: /this/path/ends/with/a/slash/\n')
directory = str(input('Please input a custom directory: ')) directory = str(input('Please input a custom directory: '))
with open("/var/lib/rpass/rpass-dir", 'w') as f: open("/var/lib/rpass/rpass-dir", 'w').write(directory + '\n')
f.write(directory + '\n')
else: else:
with open("/var/lib/rpass/rpass-dir", 'w') as f: open("/var/lib/rpass/rpass-dir", 'w').write('/home/' + environ.get('USER') + '/.rpass-store/' + '\n')
f.write('/home/' + environ.get('USER') + '/.rpass-store/' + '\n')
print() print()
devicetype = str(input('Will this be a client, server, or offline device? (C/s/o) ')) devicetype = str(input('Will this be a client, server, or offline device? (C/s/o) '))
if devicetype == 's' or devicetype == 'S': if devicetype == 's' or devicetype == 'S':
with open("/var/lib/rpass/rpass-ssh", 'w') as f: open("/var/lib/rpass/rpass-ssh", 'w').write('\n\n\n\n' + devicetype)
f.write('\n\n\n\n' + devicetype)
print('\nMake sure the ssh service is running and properly configured.\n') print('\nMake sure the ssh service is running and properly configured.\n')
print('Configuration complete!\n') print('Configuration complete!\n')
else: else:
gpgid = ''
print() print()
gpgpresent = str(input( gpgpresent = str(input(
'rpass requires the use of a unique gpg key. Do you already have one you are willing to use? (y/N) ')) 'rpass requires the use of a unique gpg key. Do you already have one you are willing to use? (y/N) '))
if gpgpresent == 'y' or gpgpresent == 'Y': if gpgpresent == 'y' or gpgpresent == 'Y':
print() print()
gpgid = str(input('Please input the ID of your gpg key: ')) gpgid = str(input('Please input the ID of your gpg key: '))
with open("/var/lib/rpass/rpass-gpg", 'w') as f: open("/var/lib/rpass/rpass-gpg", 'w').write(gpgid + '\n')
f.write(gpgid + '\n')
else: else:
print() print()
gpggen = str( gpggen = str(
@@ -162,11 +174,15 @@ if argument == 'config':
term('gpg --full-generate-key') term('gpg --full-generate-key')
print() print()
gpgid = str(input('Please input the ID of your gpg key: ')) gpgid = str(input('Please input the ID of your gpg key: '))
with open("/var/lib/rpass/rpass-gpg", 'w') as f: open("/var/lib/rpass/rpass-gpg", 'w').write(gpgid + '\n')
f.write(gpgid + '\n') try:
open('/var/lib/rpass/lock', 'x').write('locked')
except FileExistsError:
pass
term('gpg -r ' + str(gpgid) + ' -e ' + '/var/lib/rpass/lock')
remove('/var/lib/rpass/lock')
if devicetype == 'o' or devicetype == 'O': if devicetype == 'o' or devicetype == 'O':
with open("/var/lib/rpass/rpass-ssh", 'w') as f: open("/var/lib/rpass/rpass-ssh", 'w').write('\n\n\n\n' + devicetype)
f.write('\n\n\n\n' + devicetype)
print('\nConfiguration complete!\n') print('\nConfiguration complete!\n')
elif devicetype != 's' and devicetype != 'S': elif devicetype != 's' and devicetype != 'S':
devicetype = 'c' devicetype = 'c'
@@ -187,14 +203,13 @@ if argument == 'config':
directoryssh = str(input('What directory is the server using?: ')) directoryssh = str(input('What directory is the server using?: '))
else: else:
directoryssh = ('/home/' + usernamessh + '/.rpass-store/') directoryssh = ('/home/' + usernamessh + '/.rpass-store/')
with open("/var/lib/rpass/rpass-ssh", 'w') as f: open("/var/lib/rpass/rpass-ssh", 'w').write(usernamessh + '\n' + ip + '\n' + port + '\n' + directoryssh +
f.write(usernamessh + '\n' + ip + '\n' + port + '\n' + directoryssh + '\n' + devicetype) '\n' + devicetype)
print('\nConfiguration complete!\n') print('\nConfiguration complete!\n')
except KeyboardInterrupt: except KeyboardInterrupt:
print('\n\nConfiguration cancelled.\n') print('\n\nConfiguration cancelled.\n')
exit() exit()
# startup help # startup help
if argument == '': if argument == '':
@@ -213,11 +228,10 @@ try:
devicetype = sshinfo[4].replace('\n', '') devicetype = sshinfo[4].replace('\n', '')
except (FileNotFoundError, IndexError): except (FileNotFoundError, IndexError):
usernamessh, ip, port, directoryssh, devicetype = (0, 0, 0, 0, 0) usernamessh, ip, port, directoryssh, devicetype = (0, 0, 0, 0, 0)
directory = ''
try: try:
with open("/var/lib/rpass/rpass-gpg") as f: gpgid = open("/var/lib/rpass/rpass-gpg").read().strip()
gpgid = f.read().strip() directory = open("/var/lib/rpass/rpass-dir").read().strip()
with open("/var/lib/rpass/rpass-dir") as f:
directory = f.read().strip()
term('mkdir -p ' + directory) term('mkdir -p ' + directory)
except FileNotFoundError: except FileNotFoundError:
print('\n!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!') print('\n!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!')
@@ -269,24 +283,20 @@ if argument == 'add note' or argument == 'add -n':
exit() exit()
shmfolder, shmentry = shmgen() shmfolder, shmentry = shmgen()
term('nano /dev/shm/' + shmfolder + '/' + shmentry + '-n') term('nano /dev/shm/' + shmfolder + '/' + shmentry + '-n')
with open('/dev/shm/' + shmfolder + '/' + shmentry + '-n', 'r') as file: notes = open('/dev/shm/' + shmfolder + '/' + shmentry + '-n', 'r').read()
notes = file.read().replace('/n', '')
try: try:
if entryname.startswith('/'): # check if user input contains slashes if entryname.startswith('/'): # check if user input contains slashes
if entryname.replace('/', '', 1).__contains__('/'): # create folder and entry if there are two slashes if entryname.replace('/', '', 1).__contains__('/'): # create folder and entry if there are two slashes
folder, sep, folderentry = entryname.replace('/', '', 1).partition('/') folder, sep, folderentry = entryname.replace('/', '', 1).partition('/')
with open('/dev/shm/' + shmfolder + '/' + shmentry, 'w') as f: open('/dev/shm/' + shmfolder + '/' + shmentry, 'w').writelines('\n\n\n\n' + notes + '\n\n')
f.writelines('\n\n\n\n' + notes + '\n\n')
encryptfolder() encryptfolder()
term('gpg -d ' + directory + folder + '/' + "'" + folderentry + '.gpg' + "'") term('gpg -d ' + directory + folder + '/' + "'" + folderentry + '.gpg' + "'")
else: # create entry if there is only one slash else: # create entry if there is only one slash
with open('/dev/shm/' + shmfolder + '/' + shmentry, 'w') as f: open('/dev/shm/' + shmfolder + '/' + shmentry, 'w').writelines('\n\n\n\n' + notes + '\n\n')
f.writelines('\n\n\n\n' + notes + '\n\n')
encrypt() encrypt()
term('gpg -d ' + directory + "'" + entryname.replace('/', '', 1) + '.gpg' + "'") term('gpg -d ' + directory + "'" + entryname.replace('/', '', 1) + '.gpg' + "'")
else: # create entry if there are no slashes else: # create entry if there are no slashes
with open('/dev/shm/' + shmfolder + '/' + shmentry, 'w') as f: open('/dev/shm/' + shmfolder + '/' + shmentry, 'w').writelines('\n\n\n\n' + notes + '\n\n')
f.writelines('\n\n\n\n' + notes + '\n\n')
encrypt() encrypt()
term('gpg -d ' + directory + "'" + entryname + '.gpg' + "'") term('gpg -d ' + directory + "'" + entryname + '.gpg' + "'")
except FileNotFoundError: except FileNotFoundError:
@@ -308,25 +318,28 @@ if argument == 'add password' or argument == 'add -p':
print('\n\nEntry add cancelled.\n') print('\n\nEntry add cancelled.\n')
exit() exit()
shmfolder, shmentry = shmgen() shmfolder, shmentry = shmgen()
term('nano /dev/shm/' + shmfolder + '/' + shmentry + '-n') add_note = input('Add a note to this entry? (y/N) ')
with open('/dev/shm/' + shmfolder + '/' + shmentry + '-n', 'r') as file: if add_note == 'y' or add_note == 'Y':
notes = file.read().replace('/n', '') term('nano /dev/shm/' + shmfolder + '/' + shmentry + '-n')
notes = open('/dev/shm/' + shmfolder + '/' + shmentry + '-n', 'r').read()
else:
notes = ''
try: try:
if entryname.startswith('/'): if entryname.startswith('/'):
if entryname.replace('/', '', 1).__contains__('/'): if entryname.replace('/', '', 1).__contains__('/'):
folder, sep, folderentry = entryname.replace('/', '', 1).partition('/') folder, sep, folderentry = entryname.replace('/', '', 1).partition('/')
with open('/dev/shm/' + shmfolder + '/' + shmentry, 'w') as f: open('/dev/shm/' + shmfolder + '/' + shmentry, 'w').writelines(username + '\n' + password + '\n' + url
f.writelines(username + '\n' + password + '\n' + url + '\n\n' + notes + '\n\n') + '\n\n' + notes + '\n\n')
encryptfolder() encryptfolder()
term('gpg -d ' + directory + folder + '/' + "'" + folderentry + '.gpg' + "'") term('gpg -d ' + directory + folder + '/' + "'" + folderentry + '.gpg' + "'")
else: else:
with open('/dev/shm/' + shmfolder + '/' + shmentry, 'w') as f: open('/dev/shm/' + shmfolder + '/' + shmentry, 'w').writelines(username + '\n' + password + '\n' + url
f.writelines(username + '\n' + password + '\n' + url + '\n\n' + notes + '\n\n') + '\n\n' + notes + '\n\n')
encrypt() encrypt()
term('gpg -d ' + directory + "'" + entryname.replace('/', '', 1) + '.gpg' + "'") term('gpg -d ' + directory + "'" + entryname.replace('/', '', 1) + '.gpg' + "'")
else: else:
with open('/dev/shm/' + shmfolder + '/' + shmentry, 'w') as f: open('/dev/shm/' + shmfolder + '/' + shmentry, 'w').writelines(username + '\n' + password + '\n' + url
f.writelines(username + '\n' + password + '\n' + url + '\n\n' + notes + '\n\n') + '\n\n' + notes + '\n\n')
encrypt() encrypt()
term('gpg -d ' + directory + "'" + entryname + '.gpg' + "'") term('gpg -d ' + directory + "'" + entryname + '.gpg' + "'")
except FileNotFoundError: except FileNotFoundError:
@@ -520,50 +533,20 @@ if argument == 'edit note' or argument == 'edit -n':
folder, sep, folderentry = entryname.replace('/', '', 1).partition('/') folder, sep, folderentry = entryname.replace('/', '', 1).partition('/')
term('gpg -d --output /dev/shm/' + shmfolder + '/' + shmentry + ' ' + directory + term('gpg -d --output /dev/shm/' + shmfolder + '/' + shmentry + ' ' + directory +
folder + '/' + folderentry + '.gpg') folder + '/' + folderentry + '.gpg')
with open('/dev/shm/' + shmfolder + '/' + shmentry) as first: edit_note()
lines = first.readlines()
with open('/dev/shm/' + shmfolder + '/' + shmentry, 'w') as first:
first.writelines(lines[0:3])
with open('/dev/shm/' + shmfolder + '/' + shmentry + '-n', 'w') as second:
second.writelines(lines[4:-2])
term('nano /dev/shm/' + shmfolder + '/' + shmentry + '-n')
with open('/dev/shm/' + shmfolder + '/' + shmentry + '-n') as second:
notes = second.read()
with open('/dev/shm/' + shmfolder + '/' + shmentry, 'a') as first:
first.write('\n' + notes + '\n\n')
remove(directory + folder + '/' + folderentry + '.gpg') remove(directory + folder + '/' + folderentry + '.gpg')
encryptfolder() encryptfolder()
term('gpg -d ' + directory + folder + '/' + "'" + folderentry + '.gpg' + "'") term('gpg -d ' + directory + folder + '/' + "'" + folderentry + '.gpg' + "'")
else: else:
term('gpg -d --output /dev/shm/' + shmfolder + '/' + shmentry + ' ' + directory + term('gpg -d --output /dev/shm/' + shmfolder + '/' + shmentry + ' ' + directory +
entryname.replace('/', '', 1) + '.gpg') entryname.replace('/', '', 1) + '.gpg')
with open('/dev/shm/' + shmfolder + '/' + shmentry) as first: edit_note()
lines = first.readlines()
with open('/dev/shm/' + shmfolder + '/' + shmentry, 'w') as first:
first.writelines(lines[0:3])
with open('/dev/shm/' + shmfolder + '/' + shmentry + '-n', 'w') as second:
second.writelines(lines[4:-2])
term('nano /dev/shm/' + shmfolder + '/' + shmentry + '-n')
with open('/dev/shm/' + shmfolder + '/' + shmentry + '-n') as second:
notes = second.read()
with open('/dev/shm/' + shmfolder + '/' + shmentry, 'a') as first:
first.write('\n' + notes + '\n\n')
remove(directory + entryname.replace('/', '', 1) + '.gpg') remove(directory + entryname.replace('/', '', 1) + '.gpg')
encrypt() encrypt()
term('gpg -d ' + directory + "'" + entryname.replace('/', '', 1) + '.gpg' + "'") term('gpg -d ' + directory + "'" + entryname.replace('/', '', 1) + '.gpg' + "'")
else: else:
term('gpg -d --output /dev/shm/' + shmfolder + '/' + shmentry + ' ' + directory + entryname + '.gpg') term('gpg -d --output /dev/shm/' + shmfolder + '/' + shmentry + ' ' + directory + entryname + '.gpg')
with open('/dev/shm/' + shmfolder + '/' + shmentry) as first: edit_note()
lines = first.readlines()
with open('/dev/shm/' + shmfolder + '/' + shmentry, 'w') as first:
first.writelines(lines[0:3])
with open('/dev/shm/' + shmfolder + '/' + shmentry + '-n', 'w') as second:
second.writelines(lines[4:-2])
term('nano /dev/shm/' + shmfolder + '/' + shmentry + '-n')
with open('/dev/shm/' + shmfolder + '/' + shmentry + '-n') as second:
notes = second.read()
with open('/dev/shm/' + shmfolder + '/' + shmentry, 'a') as first:
first.write('\n' + notes + '\n\n')
remove(directory + entryname + '.gpg') remove(directory + entryname + '.gpg')
encrypt() encrypt()
term('gpg -d ' + directory + "'" + entryname + '.gpg' + "'") term('gpg -d ' + directory + "'" + entryname + '.gpg' + "'")
@@ -714,18 +697,18 @@ if argument == 'gen':
if entryname.startswith('/'): if entryname.startswith('/'):
if entryname.replace('/', '', 1).__contains__('/'): if entryname.replace('/', '', 1).__contains__('/'):
folder, sep, folderentry = entryname.replace('/', '', 1).partition('/') folder, sep, folderentry = entryname.replace('/', '', 1).partition('/')
with open('/dev/shm/' + shmfolder + '/' + shmentry, 'w') as f: open('/dev/shm/' + shmfolder + '/' + shmentry, 'w').writelines(username + '\n' + passgen + '\n' + url
f.writelines(username + '\n' + passgen + '\n' + url + '\n' + notes + '\n\n') + '\n' + notes + '\n\n')
encryptfolder() encryptfolder()
term('gpg -d ' + directory + folder + '/' + "'" + folderentry + '.gpg' + "'") term('gpg -d ' + directory + folder + '/' + "'" + folderentry + '.gpg' + "'")
else: else:
with open('/dev/shm/' + shmfolder + '/' + shmentry, 'w') as f: open('/dev/shm/' + shmfolder + '/' + shmentry, 'w').writelines(username + '\n' + passgen + '\n' + url
f.writelines(username + '\n' + passgen + '\n' + url + '\n' + notes + '\n\n') + '\n' + notes + '\n\n')
encrypt() encrypt()
term('gpg -d ' + directory + "'" + entryname.replace('/', '', 1) + '.gpg' + "'") term('gpg -d ' + directory + "'" + entryname.replace('/', '', 1) + '.gpg' + "'")
else: else:
with open('/dev/shm/' + shmfolder + '/' + shmentry, 'w') as f: open('/dev/shm/' + shmfolder + '/' + shmentry, 'w').writelines(username + '\n' + passgen + '\n' + url
f.writelines(username + '\n' + passgen + '\n' + url + '\n' + notes + '\n\n') + '\n' + notes + '\n\n')
encrypt() encrypt()
term('gpg -d ' + directory + "'" + entryname + '.gpg' + "'") term('gpg -d ' + directory + "'" + entryname + '.gpg' + "'")
except FileNotFoundError: except FileNotFoundError:
@@ -791,6 +774,13 @@ if argument == 'remove' or argument == '-rm':
print() print()
try: try:
entryname = str(input('What would you like to delete? ')) entryname = str(input('What would you like to delete? '))
try:
term('gpg -d --output /dev/shm/rpass.lock /var/lib/rpass/lock.gpg')
unlocker = open('/dev/shm/rpass.lock', 'r').readlines()
remove('/dev/shm/rpass.lock')
except FileNotFoundError:
print('\nAccess denied.\n')
exit()
if entryname.startswith('/'): if entryname.startswith('/'):
if entryname.replace('/', '', 1).__contains__('/'): if entryname.replace('/', '', 1).__contains__('/'):
if devicetype == 'c': if devicetype == 'c':
@@ -816,12 +806,12 @@ if argument == 'remove' or argument == '-rm':
print('!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\n') print('!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\n')
exit() exit()
if argument.__contains__('add') or argument.__contains__('-rm') or argument.__contains__('remove') or argument.\ if argument.__contains__('-rm') or string_found('remove', argument) or string_found('add', argument) or \
__contains__('edit') or argument.__contains__('gen') or argument.__contains__('version') or argument.\ string_found('edit', argument) or string_found('gen', argument) or string_found('copy', argument) or \
__contains__('-v') or argument.__contains__('config') or argument.__contains__('copy') or argument.\ string_found('/', argument) or argument == 'sync' or argument == '-s' or argument == '' or argument == 'help' \
__contains__('show') or argument.__contains__('/') or argument == 'sync' or argument == '-s' or argument == '' \ or argument == '--help' or argument == '-h' or argument == 'version' or argument == '-v' or argument == \
or argument == 'help' or argument == '--help' or argument == '-h': 'config' or argument == 'show w' or argument == 'show c':
null = 'null' pass
else: else:
print('\n!!!!!!!!!!!!!!!') print('\n!!!!!!!!!!!!!!!')
print('Argument error!') print('Argument error!')
@@ -835,8 +825,8 @@ term('find ' + directory + ' -type f -exec chmod -R 600 {} +')
# rsync - ran at end of program to ensure all files are properly synced # rsync - ran at end of program to ensure all files are properly synced
if devicetype == 'c': if devicetype == 'c':
if argument.__contains__('add') or argument.__contains__('-rm') or argument.__contains__('remove') or argument. \ if argument.__contains__('-rm') or string_found('remove', argument) or string_found('add', argument) or \
__contains__('edit') or argument.__contains__('gen') or argument == 'sync' or argument == '-s': string_found('edit', argument) or string_found('gen', argument) or argument == 'sync' or argument == '-s':
print('Syncing entries with other device(s)...\n') print('Syncing entries with other device(s)...\n')
term('rsync -v -H -r -l -t -p -e ' + '"ssh -i ~/.ssh/rpass -p ' + port + '" ' + directory + ' ' + term('rsync -v -H -r -l -t -p -e ' + '"ssh -i ~/.ssh/rpass -p ' + port + '" ' + directory + ' ' +
usernamessh + '@' + ip + ':' + directoryssh) usernamessh + '@' + ip + ':' + directoryssh)
+7 -4
View File
@@ -1,6 +1,6 @@
<><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><> <><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><>
rpass 2021.10.08.mr5 rpass 2021.10.07.mr5
The Notetaker Update - Fifth main release of rpass The Notetaker Update - Fifth main release of rpass
@@ -9,20 +9,23 @@ This release focuses on user-facing polish and usability enhancements.
New features: New features:
- notes are now edited in nano and can be split across multiple lines - notes are now edited in nano and can be split across multiple lines
- password confirmation has been added for entry deletion
Changes: Changes:
- fixed issues with copying passwords with certain special characters, e.g. '"()| - fixed issues with copying passwords with certain special characters, e.g. '"()|
- auto-generated ssh key now uses ed25519, rather than rsa-3072 - auto-generated ssh key now uses ed25519, rather than rsa-3072
- entry format modified to include a blank line before the notes field (old format still mostly compatible)
- rpass is now much better at catching bad arguments
- some general code cleanup
Planned for next update (The Housekeeping Update Pt. 2): Planned for next update (The Housekeeping Update Pt. 2):
- add new file list w/color and w/o extensions - add new file list w/color and w/o extensions + proper displaying of nested folders
- improve exceptions for unknown arguments
- ability to pass entries as arguments for more functions - ability to pass entries as arguments for more functions
- manpage - manpage
- add more comments to code - add more comments to code
- simplify code from the Notetaker Update - validate for Python 3.10
Planned for next update (The cryptpass Update): Planned for next update (The cryptpass Update):