Compare commits

...
138 Commits
Author SHA1 Message Date
RandyTheSilly 43351fd66f Bump version to v1.0.1
Former-commit-id: 73a9e537a08596e3a527f7c7b45405bd43818d54 [formerly 4aa9036d42]
Former-commit-id: 249daa62a333460a5c3142815872b3e26b4ad6a8
2022-06-21 03:46:24 -04:00
RandyTheSilly 096bdb0773 Updated changelog
Former-commit-id: 90c2c0be99f4e250b4a710c7f4013f73f648c0ed [formerly fdaff41f6f]
Former-commit-id: 4d8658fd6473e33ac3d4fecf88cfb500d2d44959
2022-06-21 03:44:48 -04:00
RandyTheSilly 330396c5f1 Improved usage of Popen in copy() function + removed import statement for subprocess.STDOUT
Former-commit-id: bbc39da1d30845aadac3430b0d8758d6958a159c [formerly 88417f5f67]
Former-commit-id: 5be7fe4d68ae5153ef1dbde3018b15ed5fe944b0
2022-06-21 03:28:56 -04:00
RandyTheSilly 8576f63479 Optimized copy_name_check() function
Former-commit-id: 07e02ab7b0bbf030b0ee1baedd8dbb7ec5ef2e4e [formerly 47e8383146]
Former-commit-id: 570a930a9c63aaa5315285ccf1a84316f4e6199a
2022-06-21 03:13:55 -04:00
RandyTheSilly 393f241538 Optimized decrypt() function (fixes issue #1)
Former-commit-id: d94cce05e9695f4d0744b5a3f4232ad48b146ed2 [formerly 3ad5acfc99]
Former-commit-id: b7edcf31903826ebb8010f6e694b728e1616a70f
2022-06-21 03:03:23 -04:00
rwinkhart c557d5bfee Update README.md
Added CodeQL badge

Former-commit-id: fa618db3f76919e31da43758bda1652f19e63912 [formerly 6f18076068]
Former-commit-id: 809209a1ba762b6dacb8a1eb9f7199873787438b
2022-06-20 09:15:39 +00:00
rwinkhart acca7d888c Create codeql-analysis.yml
Former-commit-id: 8323ea0d21b761f9ec50a79e926b15d691c9700a [formerly 492b10a44e]
Former-commit-id: 72b9d6a984840d399124efe919adaadd5d0d7f04
2022-06-20 09:05:07 +00:00
rwinkhart 2f3b3c67ba Delete codeql-analysis.yml
Former-commit-id: bedaabebf13648b28a564c575ff82723ddf70904 [formerly 94f5420f83]
Former-commit-id: 61593eb69cc8abb1120925965aaf81504cb8dd4f
2022-06-20 09:04:37 +00:00
rwinkhart 88d2402e88 Create codeql-analysis.yml
Former-commit-id: 3551b0bdb4902910a23abfcb369965f8bfb3dde8 [formerly 4f90e5ca0b]
Former-commit-id: b50cad12f70384329acc728a2628a83158c604af
2022-06-20 08:58:03 +00:00
RandyTheSilly 928aacc64a No longer package Fedora with the "All" option (to ensure Fedora is only packaged from itself)
Former-commit-id: 84a32263eb6ceb32063ba0c3fd6ecc49c59fc579 [formerly 90454645e0]
Former-commit-id: 8e57ca2e811b3cbf73c9356c103ae189022f9a9f
2022-06-20 03:49:51 -04:00
RandyTheSilly 094bdcb418 Updated documentation
Former-commit-id: 49716c1645645bdc47992c7d480f51a81e457e0e [formerly c0ac590e4b]
Former-commit-id: d0d798a715d10136bfc9c67352a2e8893ddfbff1
2022-06-20 03:45:43 -04:00
RandyTheSilly 419ff51e75 Properly handle exception for non-integer input with pass_gen()
Former-commit-id: b2c4bd2cd8cf7db4516f47a48bde46610d2e9f5c [formerly 964561b33b]
Former-commit-id: c92d23fa9ee173e5e0540ecbb060b1edf8ec05c9
2022-06-20 03:35:19 -04:00
RandyTheSilly 2111a0454e Optimized gen() function
Former-commit-id: 3706f28b1e9a0ccf59dd75076692a30534fe017c [formerly 6398ef8ec0]
Former-commit-id: 35419b0570ca452d27e0f8cae322bec552e1023d
2022-06-20 03:23:36 -04:00
RandyTheSilly 5d902f0324 Fixed error when generating a new password entry with no additional arguments
Former-commit-id: 642e7756a42374eac08df6ce1ec2ac37a803a2ce [formerly 45ee9ff40b]
Former-commit-id: b5e1a2cca9be722ae40e5a8b6b2431251344daac
2022-06-20 03:15:08 -04:00
RandyTheSilly 505ffdb489 Fixed accidental overwriting when creating a new file of a name that is already present + some fixes for renaming and generating
Former-commit-id: 947ab5d1ac6dc5b07836bc075d202b32f563ab6c [formerly a06fc38968]
Former-commit-id: 97c3bda15e6e67e8f5503aa21ac69e54c27ae42c
2022-06-20 03:08:08 -04:00
RandyTheSilly 5cab1ad091 Fix FreeBSD errors on entry creation/editing due to attempting to access a directory with limited permissions
Former-commit-id: d0ec9fcc1d155c11c4c4cee86ba13815ccf06d2b [formerly 1860edaccf]
Former-commit-id: e94a9e94804fccea66d9f57673c26ac54dd0e13d
2022-06-20 02:11:33 -04:00
RandyTheSilly 2e2404636b Corrected installed size for Debian/Termux packages
Former-commit-id: 6b15b2962add508a3e52e4301080143188641a7c [formerly abe9fed749]
Former-commit-id: 76bbde9f50cbf2bb662d93c537dee25ad6b03c64
2022-06-20 02:02:07 -04:00
RandyTheSilly 6cb5bd405f Update README.md
Former-commit-id: 38d003983687f031ef2dc50122db52429d0cd340 [formerly 71662a53f1]
Former-commit-id: cb658bef3fdf54ed6dfb546468368113a4660518
2022-06-20 01:12:47 -04:00
RandyTheSilly c93965c9a5 Clarify FreeBSD support in version screen
Former-commit-id: 92ef1fe11f9c5818e7356f475b93ade6af37e4b2 [formerly 99282ea5b0]
Former-commit-id: d072d2719fc308239efde87f0547548e568ccd1c
2022-06-20 00:31:08 -04:00
RandyTheSilly d685e07d32 Clarify that the Fedora package must be built using Fedora
Former-commit-id: 872539a685e693ad39e98dc7147fb03b14b03799 [formerly 4b77990d97]
Former-commit-id: fb405f8b9845c1b14def2e4be7a865e158937042
2022-06-20 00:26:21 -04:00
RandyTheSilly 192f58fef5 Replace claims of Red Hat support with Fedora, as testing is not done with other Red Hat distributions
Former-commit-id: 8b8a719d2ab61fb3071d7977876edb406a6de322 [formerly afe05cf76f]
Former-commit-id: d5e6f980a9f354d2202ae5c9cfa275eca3eb337d
2022-06-20 00:16:06 -04:00
RandyTheSilly 106f22f757 Cleaned up ascii art in banner
Former-commit-id: 3738bcb955c614a67f95c459888d8f3dfdd20444 [formerly f2d704a447]
Former-commit-id: f10b328ca54dc3114f3c1611a59da6bb52247a24
2022-06-19 23:28:46 -04:00
RandyTheSilly ae414dadda Added banner to README.md
Former-commit-id: 02625dc2573dc43cceab4a5d8aba597f64f39039 [formerly 3e8ab76db7]
Former-commit-id: 1c20fe718096e7b8106b42c4ebe687d77c004582
2022-06-19 23:11:56 -04:00
RandyTheSilly c9e99732a2 Replaced 100h mascot with banner
Former-commit-id: 7334c3e7b066816a68858f051781a4c80b02b99c [formerly be0c226e15]
Former-commit-id: bad996992a2b239424cffd8bd1649d638082e229
2022-06-19 23:06:36 -04:00
RandyTheSilly fc37368447 Replaced 400h mascot image with 100h mascot image
Former-commit-id: b6a210e20f3c04806775cabd9abde4fe9a9506aa [formerly 61525bd81e]
Former-commit-id: 98835f143f3857377a8df2899d0123e5e8053fdd
2022-06-19 22:21:01 -04:00
RandyTheSilly ca2bc98735 Added 400 pixel tall version of sshyp mascot image
Former-commit-id: 157fdf477353d9134c8a80efbcfc1fd769c0c484 [formerly 21205f48dd]
Former-commit-id: 4fc37ca74a4c4ac1cc8f11edd1e1595c9b0e6253
2022-06-19 22:19:20 -04:00
RandyTheSilly f44391612d Added full-resolution mascot image
Former-commit-id: 86c57c8f87
2022-06-19 22:12:44 -04:00
RandyTheSilly 8c0e9eb6df Update README.md 2022-06-17 03:19:21 -04:00
RandyTheSilly c03e818560 Update documentation 2022-06-17 03:16:01 -04:00
RandyTheSilly 0b653000ef Increased visual density of entry list 2022-06-17 02:41:50 -04:00
RandyTheSilly 9f89dce42b Update rename function to new entry name fetcher 2022-06-17 02:33:26 -04:00
RandyTheSilly e7b2e19039 Updated input text for adding an entry 2022-06-17 02:24:53 -04:00
RandyTheSilly 80b6b4abd2 Restored custom input prompts, fixed "add folder" not using new entry name fetcher, made all input prompts serve entry list 2022-06-17 02:18:23 -04:00
RandyTheSilly 758e9f331c Added entry name fetching function to get user input with a cleaner method 2022-06-17 01:50:06 -04:00
RandyTheSilly ba14c0e74b Optimized argument parsing 2022-06-16 17:11:02 -04:00
RandyTheSilly 1991672618 Initial FreeBSD packaging support 2022-06-16 16:11:24 -04:00
RandyTheSilly 9b600dabbf Decrypt lock file to /dev/null 2022-06-12 03:23:22 -04:00
RandyTheSilly e42641079d Added error message for failed decryption 2022-06-12 02:40:24 -04:00
RandyTheSilly 7c6cbaec35 Fixes for Red Hat packaging 2022-06-11 21:42:23 -04:00
RandyTheSilly cb441933db Initial Red Hat packaging support 2022-06-11 20:48:27 -04:00
RandyTheSilly dad1a34575 Added a check to ensure ssh and syncing support are properly configured (also disabled syncing support if not properly configured, acting as a form of offline mode) 2022-06-05 21:27:02 -04:00
RandyTheSilly 3a30812de5 Properly handled exception for unfinished configuration files 2022-05-30 16:51:47 -04:00
RandyTheSilly e1930f9457 Various visual consistency updates 2022-05-30 16:48:18 -04:00
RandyTheSilly 05df3dd903 Updated missing config files message to be in-line with new error message styling 2022-05-30 15:45:07 -04:00
RandyTheSilly 5c1195f42d Updated password length limit message to be in-line with new error message styling 2022-05-30 15:40:10 -04:00
RandyTheSilly 30aa3e2438 Further improvements to visual consistency of errors 2022-05-30 15:33:37 -04:00
RandyTheSilly a8ea1eb444 Fix for occasional IndexError exceptions with new argument system 2022-05-30 15:10:47 -04:00
RandyTheSilly 8e053f25b8 More styling consistency changes 2022-05-30 14:48:30 -04:00
RandyTheSilly a175a270e0 Updated entry reader with more consistent color styling 2022-05-30 14:35:43 -04:00
RandyTheSilly d116582144 Improved argument system to more accurately handle incorrect user inputs 2022-05-30 02:38:18 -04:00
RandyTheSilly f760b5420c Reduced visual complexity of help screens 2022-05-26 05:32:46 -04:00
RandyTheSilly 6498a076f2 Overhauled version screen w/ascii art 2022-05-26 05:05:25 -04:00
RandyTheSilly f4a0c52ca8 Update documentation 2022-05-23 02:17:42 -04:00
RandyTheSilly ffafbd2b91 Improved entry exists checks when reading entry 2022-05-23 00:28:44 -04:00
RandyTheSilly d7bf7da177 Added exception for renaming something that doesn't exist 2022-05-23 00:00:45 -04:00
RandyTheSilly 13d466bb21 Reduced lines used for KeyboardInterrupt exception 2022-05-22 23:43:34 -04:00
RandyTheSilly 7aa9ea63e2 Addressed line-length warnings 2022-05-22 23:18:33 -04:00
RandyTheSilly 208bd8707b Error messages are now more consistent and informative 2022-05-22 22:41:05 -04:00
RandyTheSilly fb398333a6 Added error messages for trying to read entries that don't exist 2022-05-22 22:28:17 -04:00
RandyTheSilly b369f9a530 Added script for optimizing and re-encrypting entries 2022-05-22 21:39:51 -04:00
RandyTheSilly 747f83819d Change version to be more in-line with semantic versioning 2022-05-22 20:27:36 -04:00
RandyTheSilly 2f1e693991 Add conversion script for converting to the sshyp v1.0.0 entry format 2022-05-22 20:12:58 -04:00
RandyTheSilly dd811cbe35 Fix for reading an entry from the entry list using the old entry readout 2022-05-20 03:46:23 -04:00
RandyTheSilly 87dee4f197 Move documentation for Haiku packaging 2022-05-20 03:29:20 -04:00
RandyTheSilly bf86d72472 Fixes needed for Haiku packaging to succeed 2022-05-20 03:18:45 -04:00
RandyTheSilly a3722e3c29 Correct typo 2022-05-20 03:02:42 -04:00
RandyTheSilly 1f4d5b0591 Added Haiku support to packaging script 2022-05-20 02:59:18 -04:00
RandyTheSilly e21faa8bbb Update documentation 2022-05-19 22:46:35 -04:00
RandyTheSilly 309a471e77 Shorten /usr/bin to /bin for Haiku server compatibility 2022-05-19 17:10:51 -04:00
RandyTheSilly 968a7322f8 Changed shade of gray used in entry list to be more neutral 2022-05-19 16:55:20 -04:00
RandyTheSilly 75e152ebfe Changed shade of gray used in entry list to be more neutral 2022-05-19 16:50:22 -04:00
RandyTheSilly 15204fb0e9 Improved entry list readability in terminals with white backgrounds 2022-05-19 16:18:58 -04:00
RandyTheSilly 5977367f28 Replace remaining sftp commands with scp -s 2022-05-19 15:37:46 -04:00
RandyTheSilly 96eb80226f sshyp server no longer makes copies of libraries in ~/ 2022-05-19 15:13:02 -04:00
RandyTheSilly 9ede33d3d8 Update README.md 2022-05-17 03:13:45 -04:00
RandyTheSilly 4093c36d48 Update README.md 2022-05-17 03:12:25 -04:00
RandyTheSilly 947754f87c Update README.md 2022-05-17 03:09:31 -04:00
RandyTheSilly 84bfefb7b1 Fixed skipped lines and extra blank lines in the notes field of the entry reader 2022-05-16 12:57:35 -04:00
RandyTheSilly 7ac5cd723e New entry format (for GNU pass compatibility) 2022-05-16 03:24:18 -04:00
RandyTheSilly 68aa5eee04 Overhauled entry readout (when reading/previewing) 2022-05-16 01:43:02 -04:00
RandyTheSilly f869e3b45d Reduced lines used for clipboard clearing 2022-05-16 00:23:03 -04:00
RandyTheSilly 551f1e8f50 Reduce clipboard timeout to 30 seconds 2022-05-16 00:16:45 -04:00
RandyTheSilly 1687d9e1e2 Removed unused import statement 2022-05-15 23:53:52 -04:00
RandyTheSilly 930595ecad Clipboard now clears after 45 seconds 2022-05-15 23:53:01 -04:00
RandyTheSilly 2d00da0e18 Implemented link to /tmp for Haiku 2022-05-15 18:13:07 -04:00
RandyTheSilly c84d52fb8d Restored support for openssh versions prior to 9.0 2022-05-15 18:03:38 -04:00
RandyTheSilly 88fd9e77a9 Move gpg variable declaration to happen before configuration (fixes gpg setup on Haiku) 2022-05-15 17:53:56 -04:00
RandyTheSilly 4258ad85ab Added ssh support for Haiku 2022-05-15 17:42:14 -04:00
RandyTheSilly 337e68d088 Added gpg support for Haiku 2022-05-15 17:32:33 -04:00
RandyTheSilly fb8c5be284 Added clipboard support for Haiku 2022-05-15 17:07:26 -04:00
RandyTheSilly 0293d273a7 Corrected typo causing maximum password length to be 800, rather than 840 2022-05-15 03:58:40 -04:00
RandyTheSilly 40a43ed86d Added generated password limit of 840 characters (to avoid recursion limit) 2022-05-15 03:57:03 -04:00
RandyTheSilly 18c78743ca Addressed line-length warnings 2022-05-15 03:47:47 -04:00
RandyTheSilly 2f5080fec0 Fixed user being served complexity prompts multiple times when password generation is attempted more than once 2022-05-15 03:42:16 -04:00
RandyTheSilly 99e0d5f666 Added EOF return code 2022-04-20 21:00:15 -04:00
RandyTheSilly be19e271c5 Added return codes 2022-04-20 20:57:59 -04:00
RandyTheSilly 20d2de338f Silenced gpg output 2022-04-19 19:10:38 -04:00
RandyTheSilly e830d8486b Decryption is no longer necessary for previews when creating/editing entries 2022-04-19 18:57:27 -04:00
RandyTheSilly 5fc74ac2b3 Improved minimum quality of generated passwords 2022-04-19 16:43:30 -04:00
RandyTheSilly 24acd1cb87 Old files are now deleted from the server when renaming 2022-04-19 15:48:27 -04:00
RandyTheSilly 0079934354 Renamed folders are now created on the server 2022-04-19 15:27:06 -04:00
RandyTheSilly 399e291902 Optimize rename function and allow for renaming folders 2022-04-19 15:18:34 -04:00
RandyTheSilly 66a026e327 Added new, colored syncing operation messages 2022-04-19 01:55:12 -04:00
RandyTheSilly b5f4e776e5 Removed file extension from sshync messages 2022-04-19 01:18:44 -04:00
RandyTheSilly 0056f60af1 Moved password generator to new function 2022-04-19 01:14:20 -04:00
RandyTheSilly 41aa093685 Updated roadmap 2022-04-19 00:54:32 -04:00
RandyTheSilly 30034be36f Updated help text 2022-04-19 00:43:50 -04:00
RandyTheSilly a43530d34f Corrected typo in manpage 2022-04-19 00:20:18 -04:00
RandyTheSilly 7d14c49490 Updated manpage 2022-04-19 00:10:59 -04:00
RandyTheSilly 462ba05833 Fix syncing with multi-word entries 2022-04-18 23:47:59 -04:00
RandyTheSilly e89bf06d9a Made entry list monochrome 2022-04-18 22:54:33 -04:00
RandyTheSilly d33d07894f Reverted accidental change from last commit 2022-04-16 19:12:48 -04:00
RandyTheSilly cade83a0f0 Added ability to pass entry names as arguments to most sshyp functions 2022-04-16 19:07:48 -04:00
RandyTheSilly 100edd07ea Addressed line-length warnings 2022-04-09 17:02:35 -04:00
RandyTheSilly d19651819a Use 'if __name__ == "__main__":' convention 2022-04-09 16:52:12 -04:00
RandyTheSilly d951284bcd Switch to scp via sftp for changes in openssh 9.0 2022-04-08 16:16:17 -04:00
RandyTheSilly 3c9b80ec80 Corrected copyright date in help menu 2022-04-08 14:52:49 -04:00
RandyTheSilly 0f3d9854b7 Optimized argument parsing 2022-04-08 14:50:36 -04:00
RandyTheSilly 0c52149c40 Correct misinformation in packaging script 2022-03-16 03:36:59 -04:00
RandyTheSilly f838af0b4e Updated license 2022-03-16 03:25:47 -04:00
RandyTheSilly 72f126d21d Removed unnecessary blank line in entry list 2022-03-02 08:14:06 -05:00
RandyTheSilly 2385f669f8 Alphabetized import statements 2022-03-02 05:45:01 -05:00
RandyTheSilly b8896a6b58 Abbreviated Python declarations 2022-03-02 05:36:21 -05:00
RandyTheSilly 51ec2143e3 Properly handle empty root directory 2022-03-02 04:42:42 -05:00
RandyTheSilly 4c1989287a Added exception handling for entry list generation with an empty directory 2022-03-02 04:28:05 -05:00
RandyTheSilly daba737ca6 Folders are now sorted alphabetically in the entry list 2022-03-02 04:20:30 -05:00
RandyTheSilly 8cac27c6f6 Increased text wrapping safety tolerance 2022-03-02 03:53:36 -05:00
RandyTheSilly 19d37dfdb6 Entry list is now generated alphabetically 2022-03-02 03:50:20 -05:00
RandyTheSilly 87a56a80bd Switched to horizontal view for entry list 2022-03-02 03:30:33 -05:00
RandyTheSilly 5aaa284cbf Initial implementation of new entry list 2022-03-02 00:37:55 -05:00
RandyTheSilly a6aa0561b4 Updated roadmap for future releases 2022-02-16 18:24:22 -05:00
RandyTheSilly b08456e873 Updated documentation for release fr4.7 2022-02-16 16:24:11 -05:00
RandyTheSilly ef828b88a0 Added user-facing messages when deleting via sync 2022-02-16 16:10:37 -05:00
RandyTheSilly bde243c644 Continuation of recursive fix 2022-02-16 15:59:11 -05:00
RandyTheSilly 894f406fd2 Fix recursive folder syncing reporting incorrect directories 2022-02-16 15:57:23 -05:00
RandyTheSilly 00b935f1bb Allow for recursive folder syncing 2022-02-16 15:43:33 -05:00
RandyTheSilly 49608cb839 Updated changelog for fr4.6 2022-02-16 13:51:12 -05:00
RandyTheSilly a417478aa0 Fixed critical typo preventing folder syncing from working 2022-02-16 13:46:42 -05:00
13 changed files with 1184 additions and 592 deletions
+72
View File
@@ -0,0 +1,72 @@
# For most projects, this workflow file will not need changing; you simply need
# to commit it to your repository.
#
# You may wish to alter this file to override the set of languages analyzed,
# or to provide custom queries or build logic.
#
# ******** NOTE ********
# We have attempted to detect the languages in your repository. Please check
# the `language` matrix defined below to confirm you have the correct set of
# supported CodeQL languages.
#
name: "CodeQL"
on:
push:
branches: [ "main" ]
pull_request:
# The branches below must be a subset of the branches above
branches: [ "main" ]
schedule:
- cron: '34 22 * * 5'
jobs:
analyze:
name: Analyze
runs-on: ubuntu-latest
permissions:
actions: read
contents: read
security-events: write
strategy:
fail-fast: false
matrix:
language: [ 'python' ]
# CodeQL supports [ 'cpp', 'csharp', 'go', 'java', 'javascript', 'python', 'ruby' ]
# Learn more about CodeQL language support at https://aka.ms/codeql-docs/language-support
steps:
- name: Checkout repository
uses: actions/checkout@v3
# Initializes the CodeQL tools for scanning.
- name: Initialize CodeQL
uses: github/codeql-action/init@v2
with:
languages: ${{ matrix.language }}
# If you wish to specify custom queries, you can do so here or in a config file.
# By default, queries listed here will override any specified in a config file.
# Prefix the list here with "+" to use these queries and those in the config file.
# Details on CodeQL's query packs refer to : https://docs.github.com/en/code-security/code-scanning/automatically-scanning-your-code-for-vulnerabilities-and-errors/configuring-code-scanning#using-queries-in-ql-packs
# queries: security-extended,security-and-quality
# Autobuild attempts to build any compiled languages (C/C++, C#, or Java).
# If this step fails, then you should remove it and run the build manually (see below)
- name: Autobuild
uses: github/codeql-action/autobuild@v2
# ️ Command-line programs to run using the OS shell.
# 📚 See https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idstepsrun
# If the Autobuild fails above, remove it and uncomment the following three lines.
# modify them (or add more) to build your code if your project, please refer to the EXAMPLE below for guidance.
# - run: |
# echo "Run, Build Application using script"
# ./location_of_script_within_repo/buildscript.sh
- name: Perform CodeQL Analysis
uses: github/codeql-action/analyze@v2
+31 -40
View File
@@ -1,8 +1,16 @@
# sshyp ![sshyp](https://github.com/rwinkhart/sshyp/blob/main/extra/sshyp-linux-banner.png)
A very simple self-hosted, synchronized password manager. Alternative to GNU pass.
"sshyp" stands for "sshync passwords", or "ssh sync passwords". [![CodeQL](https://github.com/rwinkhart/sshyp/actions/workflows/codeql-analysis.yml/badge.svg?branch=main)](https://github.com/rwinkhart/sshyp/actions/workflows/codeql-analysis.yml)
"sshync" is the custom syncing backend (based on sftp) used by "sshyp".
sshyp is a very simple self-hosted, synchronized password manager for UNIX(-like) systems (currently Haiku/FreeBSD/Linux).
sshyp is compatible with entries created by pass/password-store, as its original goal was to be like pass/password-store, but far more user-friendly to synchronize with a self-hosted server.
sshyp is (as of writing) the only password-store compatible CLI password manager available for Haiku.
sshyp makes use of a custom sftp wrapper, called sshync (ssh+sync), to reliably sync user entries with a local or remote server.
The name "sshyp" is a combination of its syncing library, "sshync", and "passwords".
# WARNING # WARNING
It is your responsibility to assess the security and stability of "sshyp" before using it and ensure it meets your needs. It is your responsibility to assess the security and stability of "sshyp" before using it and ensure it meets your needs.
@@ -16,33 +24,25 @@ What sshyp can do:
- securely manage a collection of encrypted passwords and notes via CLI - securely manage a collection of encrypted passwords and notes via CLI
- generate new, secure passwords to the user's choice in length and complexity - generate new, secure passwords to the user's choice in length and complexity
- securely sync said passwords and notes seamlessly between multiple POSIX compliant Unix devices - securely sync said passwords and notes seamlessly between devices
- everything above with entries created by pass/password-store!
- everything above on Haiku, FreeBSD, Linux, and Termux (an Android terminal emulator)!
What sshyp will do: What sshyp will likely do:
- everything it already does, but also in a GUI for Linux/Android - (planned v1.1.0) 2FA/MFA management (beneficial for reducing phone usage)
- have a distinct retro theme - (planned v1.2.0) everything it already does, but also in a GUI for Linux/Haiku
- receive many usability enhancements
What sshyp definitely won't do: What sshyp definitely won't do:
- 2FA/MFA (for security purposes, this should not be handled by your password manager) - Non-UNIX(-like) support, e.g. Windows (I'd be happy to link to third-party ports, if someone were to make them)
- Windows support (I don't use Windows and I have no interest in developing for it)
# Installation # Installation
Arch Linux (all ISAs) Please see the [installation guide](https://github.com/rwinkhart/sshyp/wiki/Installation) in the sshyp wiki for directions specific to your distribution/OS.
sshyp releases are available in the Arch User Repository as 'sshyp'. Pre-built packages exist for Haiku, FreeBSD, Arch Linux, Debian/Ubuntu Linux, Fedora Linux, and Termux. These can be downloaded from the releases page.
Install with your preferred AUR helper or use: Requests for additional distribution/OS support can be filed as issues.
```
git clone https://aur.archlinux.org/sshyp.git
cd sshyp
makepkg -si
```
Pre-built packages exist for Arch, Debian, and Termux. These can be downloaded from the releases page.
# Building # Building
Since sshyp is written entirely in Python, it doesn't need to be compiled. It does, however, need to be packaged for installation. Since sshyp is written entirely in Python, it doesn't need to be compiled. It does, however, need to be packaged for installation.
@@ -55,11 +55,13 @@ cd sshyp
./package.sh ./package.sh
``` ```
The packaging script has been tested on Arch Linux with dpkg as a dependency for Debian and Termux packaging. The packaging script has been tested on Arch Linux with "dpkg" as a dependency for Debian/Ubuntu and Termux packaging and "freebsd-pkg" as a dependency for FreeBSD packaging.
Haiku and Fedora packaging must be done on their own respective distributions.
The AUR version and the packages attatched to the release tags were already packaged using this script. The AUR version and the packages attatched to the release tags were already packaged using this script.
Currently, the script can create packages for Arch (PKGBUILD), Debian, Termux, and generic. Packaging for other distributions coming soon. Currently, the script can create packages for Haiku, FreeBSD, Arch Linux (PKGBUILD), Debian/Ubuntu Linux, Fedora Linux, Termux, and generic.
# Usage # Usage
Upon initial installation (on both the server and client devices), be sure to run: Upon initial installation (on both the server and client devices), be sure to run:
@@ -68,8 +70,7 @@ Upon initial installation (on both the server and client devices), be sure to ru
sshyp tweak sshyp tweak
``` ```
This command will allow you to configure the settings necessary for sshyp to function. This command will allow you to configure the settings necessary for sshyp to function. To ensure configuration compatibility, it is a good idea to run 'sshyp tweak' after each major update.
As of right now, sshyp is rapidly changing, and as such, it is a good idea to run "sshyp tweak" after each update.
Please note that decrypting and reading entries is disabled on server devices for security reasons. Only devices configured as clients can use the gpg key to decrypt entries. Please note that decrypting and reading entries is disabled on server devices for security reasons. Only devices configured as clients can use the gpg key to decrypt entries.
@@ -79,7 +80,7 @@ All available options can be found with:
sshyp --help sshyp --help
``` ```
Or alternatively, in the new manpage: Or alternatively, in the manpage:
``` ```
man sshyp man sshyp
@@ -88,20 +89,10 @@ man sshyp
# Roadmap # Roadmap
Short-term Goals: Short-term Goals:
- create new file list w/color and w/o file extensions - 2FA/MFA management
- overhaul argument system - create minimal GUI apps (Linux x86_64, Linux aarch64, Haiku x86_64)
- fix lots of bugs! - various optimizations/bug fixes
- make lots of optimizations!
Medium-term Goals:
- create minimal GUI apps (Linux x86_64, Linux aarch64)
- auto-completion on tab for CLI version
Long-term Goals: Long-term Goals:
- seize the thrones, shear the humans - seize the thrones, shear the humans
# Known Issues
Currently, the entry list displays each entry with the file extension ".gpg" visible (which you do not type when reading, modifying, or creating an entry). This will be corrected when the new entry list is added.
+23 -25
View File
@@ -1,13 +1,11 @@
#!/usr/bin/python3 #!/bin/python3
# sshync 2022.01.17.unreleased13
# external modules # external modules
from os import path, system, walk from os import path, system, walk
from os.path import getmtime, join, expanduser from os.path import expanduser, getmtime, join
from sys import exit as s_exit
from pathlib import Path from pathlib import Path
from sys import exit as s_exit
# utility functions # utility functions
@@ -29,13 +27,13 @@ def get_titles_mods(_directory, _destination, _user_data):
open(expanduser('~/.config/sshync/database'), 'a').write(str(_mod) + '\n') open(expanduser('~/.config/sshync/database'), 'a').write(str(_mod) + '\n')
# remote fetching # remote fetching
if _destination == 'r': if _destination == 'r':
system(f"ssh -i '{_user_data[5]}' -p {_user_data[2]} {_user_data[0]}@{_user_data[1]} \"python -c 'import sshync" system(f"ssh -i '{_user_data[5]}' -p {_user_data[2]} {_user_data[0]}@{_user_data[1]} \"cd /bin; python -c 'impo"
f"; sshync.get_titles_mods(\"'\"{_user_data[4]}\"'\", \"'\"l\"'\", \"'\"{_user_data}\"'\")'\"") f"rt sshync; sshync.get_titles_mods(\"'\"{_user_data[4]}\"'\", \"'\"l\"'\", \"'\"{_user_data}\"'\")'\"")
system(f"sftp -i '{_user_data[5]}' -P {_user_data[2]} {_user_data[0]}@{_user_data[1]}:" system(f"scp -pqs -P {_user_data[2]} -i '{_user_data[5]}' {_user_data[0]}@{_user_data[1]}:"
f"'{expanduser(f'/home/{_user_data[0]}/.config/sshync/database')}' '{expanduser('~/.config/sshync/')}'") f"'/home/{_user_data[0]}/.config/sshync/database' '{expanduser('~/.config/sshync/')}'")
_titles, _sep, _mods = ' '.join(open(expanduser('~/.config/sshync/database')).readlines()).replace('\n', '')\ _titles, _sep, _mods = '*&^'.join(open(expanduser('~/.config/sshync/database')).readlines()).replace('\n', '')\
.partition('^&*') .partition('^&*')
_title_list, _mod_list = _titles.split(' ')[:-1], _mods.split(' ')[1:] _title_list, _mod_list = _titles.split('*&^')[:-1], _mods.split('*&^')[1:]
return _title_list, _mod_list return _title_list, _mod_list
@@ -63,9 +61,9 @@ def get_profile(_profile_dir):
try: try:
_profile_data = open(_profile_dir).readlines() _profile_data = open(_profile_dir).readlines()
except (FileNotFoundError, IndexError): except (FileNotFoundError, IndexError):
print('\nEither the profile does not exist, or it is corrupted.\n') print('\n\u001b[38;5;9merror: the profile does not exist or is corrupted.\u001b[0m\n')
_profile_data = None _profile_data = None
s_exit() s_exit(1)
# extract data from profile # extract data from profile
_user = _profile_data[0].replace('\n', '') _user = _profile_data[0].replace('\n', '')
_ip = _profile_data[1].replace('\n', '') _ip = _profile_data[1].replace('\n', '')
@@ -87,19 +85,19 @@ def run_profile(_profile_dir):
if _title in _index_r[0]: if _title in _index_r[0]:
# compare mod times and sync # compare mod times and sync
if int(_index_l[1][_i]) > int(_index_r[1][_i]): if int(_index_l[1][_i]) > int(_index_r[1][_i]):
print(f"[{_title}] Local is newer, uploading...") print(f"\u001b[38;5;4m{_title[:-4]}\u001b[0m is newer locally, uploading...")
system(f"sftp -p -q -i '{_user_data[5]}' -P {_user_data[2]} {_user_data[0]}@{_user_data[1]}:" system(f"scp -pqs -P {_user_data[2]} -i '{_user_data[5]}' '{_user_data[3]}{_title}' "
f"{_user_data[4]}{'/'.join(_title.split('/')[:-1]) + '/'} <<< $'put {_user_data[3]}{_title}'") f"'{_user_data[0]}@{_user_data[1]}:{_user_data[4]}{'/'.join(_title.split('/')[:-1]) + '/'}'")
elif int(_index_l[1][_i]) < int(_index_r[1][_i]): elif int(_index_l[1][_i]) < int(_index_r[1][_i]):
print(f"[{_title}] Remote is newer, downloading...") print(f"\u001b[38;5;2m{_title[:-4]}\u001b[0m is newer remotely, downloading...")
system(f"sftp -p -q -i '{_user_data[5]}' -P {_user_data[2]} {_user_data[0]}@{_user_data[1]}:" system(f"scp -pqs -P {_user_data[2]} -i '{_user_data[5]}' '{_user_data[0]}@{_user_data[1]}:"
f"'{_user_data[4]}'{_title} {_user_data[3]}{'/'.join(_title.split('/')[:-1]) + '/'}") f"{_user_data[4]}{_title}' '{_user_data[3]}{'/'.join(_title.split('/')[:-1]) + '/'}'")
else: else:
print(f"[{_title}] Not on remote server, uploading...") print(f"\u001b[38;5;4m{_title[:-4]}\u001b[0m is not on remote server, uploading...")
system(f"sftp -p -q -i '{_user_data[5]}' -P {_user_data[2]} {_user_data[0]}@{_user_data[1]}:{_user_data[4]}" system(f"scp -pqs -P {_user_data[2]} -i '{_user_data[5]}' '{_user_data[3]}{_title}' "
f"{'/'.join(_title.split('/')[:-1]) + '/'} <<< $'put {_user_data[3]}{_title}'") f"'{_user_data[0]}@{_user_data[1]}:{_user_data[4]}{'/'.join(_title.split('/')[:-1]) + '/'}'")
for _title in _index_r[0]: for _title in _index_r[0]:
if _title not in _index_l[0]: if _title not in _index_l[0]:
print(f"[{_title}] Not in local directory, downloading...") print(f"\u001b[38;5;2m{_title[:-4]}\u001b[0m is not in local directory, downloading...")
system(f"sftp -p -q -i '{_user_data[5]}' -P {_user_data[2]} {_user_data[0]}@{_user_data[1]}:" system(f"scp -pqs -P {_user_data[2]} -i '{_user_data[5]}' '{_user_data[0]}@{_user_data[1]}:"
f"'{_user_data[4]}{_title}' {_user_data[3]}{'/'.join(_title.split('/')[:-1]) + '/'}") f"{_user_data[4]}{_title}' '{_user_data[3]}{'/'.join(_title.split('/')[:-1]) + '/'}'")
+504 -317
View File
File diff suppressed because it is too large Load Diff
+10 -9
View File
@@ -1,9 +1,9 @@
#!/usr/bin/python3 #!/bin/python3
# external modules # external modules
from os import remove, listdir from os import listdir, remove, walk
from os.path import expanduser, isdir, join from os.path import expanduser
from shutil import rmtree from shutil import rmtree
@@ -14,12 +14,12 @@ def delete(_file_path):
try: try:
rmtree(f"{expanduser('~/.password-pasture/')}{_file_path}") rmtree(f"{expanduser('~/.password-pasture/')}{_file_path}")
except FileNotFoundError: except FileNotFoundError:
print('\nFolder does not exist remotely.') print('folder does not exist remotely')
else: else:
try: try:
remove(f"{expanduser('~/.password-pasture/')}{_file_path}.gpg") remove(f"{expanduser('~/.password-pasture/')}{_file_path}.gpg")
except FileNotFoundError: except FileNotFoundError:
print('\nFile does not exist remotely.') print('file does not exist remotely')
for _device_name in listdir(expanduser('~/.config/sshyp/devices')): for _device_name in listdir(expanduser('~/.config/sshyp/devices')):
open(f"{expanduser('~/.config/sshyp/deleted/')}{_file_path.replace('/', '@')}^&*{_device_name}", 'w') open(f"{expanduser('~/.config/sshyp/deleted/')}{_file_path.replace('/', '@')}^&*{_device_name}", 'w')
@@ -38,7 +38,8 @@ def deletion_check(_client_device_name):
def folder_check(): def folder_check():
open(expanduser('~/.config/sshyp/deletion_database'), 'w').write('') open(expanduser('~/.config/sshyp/folder_database'), 'w').write('')
for _file in listdir(expanduser('~/.password-pasture')): for _root, _directories, _files in walk(expanduser('~/.password-pasture')):
if isdir(join('~/.config/sshyp/deletion_database/', _file)): for _dir in _directories:
open(expanduser('~/.config/sshyp/folder_database'), 'a').write(_file + '\n') open(expanduser('~/.config/sshyp/folder_database'), 'a')\
.write(f"{_root.replace(expanduser('~'), '')}/{_dir}\n")
+255 -118
View File
@@ -1,3 +1,142 @@
sshyp v1.0.1
The Polished Trotters Update - Patch 1
This is a hotfix for the Haiku decryption bug.
Changes:
- subprocess.Popen has been replaced with subprocess.run where applicable
- stdout is no longer captured with any subprocess.Popen or subprocess.run usages
^ this fixes decryption on Haiku
<><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><>
sshyp v1.0.0
The Polished Trotters Update
This release brings 'sshyp' in line with the original goals of the project.
As such, it is being crowned "v1.0.0", and is considered a stable base for future expansions.
Features:
- sshyp has been modified to run on Haiku, an open-source re-implementation of BeOS
^ new package formats have been added for Haiku, FreeBSD, and Fedora Linux
- the entry format has been changed to support entries created in pass/password-store
^ this change requires existing entry libraries to be converted - see the sshyp v1.0.0 release page on GitHub for a conversion script
- majorly overhauled visual experience for sshyp
^ this includes a new entry list, a new entry readout, colored output, ascii art, and more!
- entries can now optionally be passed as arguments, directly
^ as opposed to the user being prompted for an entry name after running a command
Changes:
- corrected outdated licensing and copyright information
- 'if __name__=="__main__":' convention is now used
- help screens have been overhauled
- improved password generator to guarantee more secure results
- fixed errors when trying to sync with a multi-word entry on the server
- sshync now uses 'scp' (via the sftp protocol), rather than 'sftp'
- rename function now properly allows for renaming folders
- renaming an entry/folder will now properly delete the old entry/folder from the server
- entry previews at the time of entry creation/editing no longer require entering the gpg password more times than necessary
- entries will no longer be overwritten if attempting to create a new entry that uses an already existing name
- the clipboard now automatically clears after 30 seconds
- sshyp server no longer needs to create copies of its libraries in ~/
- added more and improved existing exceptions
- the lock file is now decrypted to /dev/null
- ...and lots of minor (under the hood) changes!
<><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><>
sshyp 2022.02.16.fr4.7
The High-Tech Shears Update - Patch 7
This release enables recursive folder syncing.
Note: Upgrading from releases older than fr4.7 requires the configuration ("sshyp tweak") to be re-done, as the configuration process has changed.
Changes:
- re-wrote folder checking function to fetch subdirectories recursively
- added in user-facing messages for when folders are being synced or entries are being removed
- fixed a typo preventing folder syncing from working (actually tested this time)
&&
Planned for next major update (fr5, The sshyp Doing a Split Update):
sshyp:
- sshyp has recieved a major visual overhaul
^ this includes the new file list and thematic text art
sshync:
- sshync has been split into a separate package and now has standalone functionality as a backup/syncing utility
^ more details will be available in the sshync repo, once it is created
&&
Planned for next, next major update (fr6, The Farmer Shearing the sshyp Update):
- imporove password generator to guarantee more secure results
- enforce permissions on the server-side
- allow for copying entire notes (not just first line)
- ability to pass entries as arguments for more functions
&&
Backlog:
- create separate gui frontend targetting mobile and desktop Linux
- auto-completion on tab (currently unsure of best way to make this work)
<><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><>
sshyp 2022.02.16.fr4.6
The High-Tech Shears Update - Patch 6
This release addresses a critical typo.
Note: Upgrading from releases older than fr4.6 requires the configuration ("sshyp tweak") to be re-done, as the configuration process has changed.
Changes:
- corrected a typo error causing folder syncing issues
&&
Planned for next major update (fr5, The sshyp Doing a Split Update):
sshyp:
- sshyp has recieved a major visual overhaul
^ this includes the new file list and thematic text art
sshync:
- sshync has been split into a separate package and now has standalone functionality as a backup/syncing utility
^ more details will be available in the sshync repo, once it is created
&&
Planned for next, next major update (fr6, The Farmer Shearing the sshyp Update):
- when syncing, a check is made to see if any folders are not on all devices - if the check comes back true, it is corrected (in sshyp)
- imporove password generator to guarantee more secure results
- enforce permissions on the server-side
- allow for copying entire notes (not just first line)
- ability to pass entries as arguments for more functions
&&
Backlog:
- create separate gui frontend targetting mobile and desktop Linux
- auto-completion on tab (currently unsure of best way to make this work)
<><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><>
sshyp 2022.02.16.fr4.5 sshyp 2022.02.16.fr4.5
The High-Tech Shears Update - Patch 5 The High-Tech Shears Update - Patch 5
@@ -15,29 +154,29 @@ Changes:
Planned for next major update (fr5, The sshyp Doing a Split Update): Planned for next major update (fr5, The sshyp Doing a Split Update):
sshyp: sshyp:
** sshyp has recieved a major visual overhaul - sshyp has recieved a major visual overhaul
^ this includes the new file list and thematic text art ^ this includes the new file list and thematic text art
sshync: sshync:
** sshync has been split into a separate package and now has standalone functionality as a backup/syncing utility - sshync has been split into a separate package and now has standalone functionality as a backup/syncing utility
^ more details will be available in the sshync repo, once it is created ^ more details will be available in the sshync repo, once it is created
&& &&
Planned for next, next major update (fr6, The Farmer Shearing the sshyp Update): Planned for next, next major update (fr6, The Farmer Shearing the sshyp Update):
** when syncing, a check is made to see if any folders are not on all devices - if the check comes back true, it is corrected (in sshyp) - when syncing, a check is made to see if any folders are not on all devices - if the check comes back true, it is corrected (in sshyp)
** imporove password generator to guarantee more secure results - imporove password generator to guarantee more secure results
** enforce permissions on the server-side - enforce permissions on the server-side
** allow for copying entire notes (not just first line) - allow for copying entire notes (not just first line)
** ability to pass entries as arguments for more functions - ability to pass entries as arguments for more functions
&& &&
Backlog: Backlog:
** create separate gui frontend targetting mobile and desktop Linux - create separate gui frontend targetting mobile and desktop Linux
** auto-completion on tab (currently unsure of best way to make this work) - auto-completion on tab (currently unsure of best way to make this work)
<><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><> <><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><>
@@ -62,29 +201,29 @@ Changes:
Planned for next major update (fr5, The sshyp Doing a Split Update): Planned for next major update (fr5, The sshyp Doing a Split Update):
sshyp: sshyp:
** sshyp has recieved a major visual overhaul - sshyp has recieved a major visual overhaul
^ this includes the new file list and thematic text art ^ this includes the new file list and thematic text art
sshync: sshync:
** sshync has been split into a separate package and now has standalone functionality as a backup/syncing utility - sshync has been split into a separate package and now has standalone functionality as a backup/syncing utility
^ more details will be available in the sshync repo, once it is created ^ more details will be available in the sshync repo, once it is created
&& &&
Planned for next, next major update (fr6, The Farmer Shearing the sshyp Update): Planned for next, next major update (fr6, The Farmer Shearing the sshyp Update):
** when syncing, a check is made to see if any folders are not on all devices - if the check comes back true, it is corrected (in sshyp) - when syncing, a check is made to see if any folders are not on all devices - if the check comes back true, it is corrected (in sshyp)
** imporove password generator to guarantee more secure results - imporove password generator to guarantee more secure results
** enforce permissions on the server-side - enforce permissions on the server-side
** allow for copying entire notes (not just first line) - allow for copying entire notes (not just first line)
** ability to pass entries as arguments for more functions - ability to pass entries as arguments for more functions
&& &&
Backlog: Backlog:
** create separate gui frontend targetting mobile and desktop Linux - create separate gui frontend targetting mobile and desktop Linux
** auto-completion on tab (currently unsure of best way to make this work) - auto-completion on tab (currently unsure of best way to make this work)
<><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><> <><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><>
@@ -105,29 +244,29 @@ Changes:
Planned for next major update (fr5, The sshyp Doing a Split Update): Planned for next major update (fr5, The sshyp Doing a Split Update):
sshyp: sshyp:
** sshyp has recieved a major visual overhaul - sshyp has recieved a major visual overhaul
^ this includes the new file list and thematic text art ^ this includes the new file list and thematic text art
sshync: sshync:
** sshync has been split into a separate package and now has standalone functionality as a backup/syncing utility - sshync has been split into a separate package and now has standalone functionality as a backup/syncing utility
^ more details will be available in the sshync repo, once it is created ^ more details will be available in the sshync repo, once it is created
&& &&
Planned for next, next major update (fr6, The Farmer Shearing the sshyp Update): Planned for next, next major update (fr6, The Farmer Shearing the sshyp Update):
** when syncing, a check is made to see if any folders are not on all devices - if the check comes back true, it is corrected (in sshyp) - when syncing, a check is made to see if any folders are not on all devices - if the check comes back true, it is corrected (in sshyp)
** imporove password generator to guarantee more secure results - imporove password generator to guarantee more secure results
** enforce permissions on the server-side - enforce permissions on the server-side
** allow for copying entire notes (not just first line) - allow for copying entire notes (not just first line)
** ability to pass entries as arguments for more functions - ability to pass entries as arguments for more functions
&& &&
Backlog: Backlog:
** create separate gui frontend targetting mobile and desktop Linux - create separate gui frontend targetting mobile and desktop Linux
** auto-completion on tab (currently unsure of best way to make this work) - auto-completion on tab (currently unsure of best way to make this work)
<><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><> <><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><>
@@ -149,29 +288,29 @@ Changes:
Planned for next major update (fr5, The sshyp Doing a Split Update): Planned for next major update (fr5, The sshyp Doing a Split Update):
sshyp: sshyp:
** sshyp has recieved a major visual overhaul - sshyp has recieved a major visual overhaul
^ this includes the new file list and thematic text art ^ this includes the new file list and thematic text art
sshync: sshync:
** sshync has been split into a separate package and now has standalone functionality as a backup/syncing utility - sshync has been split into a separate package and now has standalone functionality as a backup/syncing utility
^ more details will be available in the sshync repo, once it is created ^ more details will be available in the sshync repo, once it is created
&& &&
Planned for next, next major update (fr6, The Farmer Shearing the sshyp Update): Planned for next, next major update (fr6, The Farmer Shearing the sshyp Update):
** when syncing, a check is made to see if any folders are not on all devices - if the check comes back true, it is corrected (in sshyp) - when syncing, a check is made to see if any folders are not on all devices - if the check comes back true, it is corrected (in sshyp)
** imporove password generator to guarantee more secure results - imporove password generator to guarantee more secure results
** enforce permissions on the server-side - enforce permissions on the server-side
** allow for copying entire notes (not just first line) - allow for copying entire notes (not just first line)
** ability to pass entries as arguments for more functions - ability to pass entries as arguments for more functions
&& &&
Backlog: Backlog:
** create separate gui frontend targetting mobile and desktop Linux - create separate gui frontend targetting mobile and desktop Linux
** auto-completion on tab (currently unsure of best way to make this work) - auto-completion on tab (currently unsure of best way to make this work)
<><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><> <><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><>
@@ -193,29 +332,29 @@ Changes:
Planned for next major update (fr5, The sshyp Doing a Split Update): Planned for next major update (fr5, The sshyp Doing a Split Update):
sshyp: sshyp:
** sshyp has recieved a major visual overhaul - sshyp has recieved a major visual overhaul
^ this includes the new file list and thematic text art ^ this includes the new file list and thematic text art
sshync: sshync:
** sshync has been split into a separate package and now has standalone functionality as a backup/syncing utility - sshync has been split into a separate package and now has standalone functionality as a backup/syncing utility
^ more details will be available in the sshync repo, once it is created ^ more details will be available in the sshync repo, once it is created
&& &&
Planned for next, next major update (fr6, The Farmer Shearing the sshyp Update): Planned for next, next major update (fr6, The Farmer Shearing the sshyp Update):
** when syncing, a check is made to see if any folders are not on all devices - if the check comes back true, it is corrected (in sshyp) - when syncing, a check is made to see if any folders are not on all devices - if the check comes back true, it is corrected (in sshyp)
** imporove password generator to guarantee more secure results - imporove password generator to guarantee more secure results
** enforce permissions on the server-side - enforce permissions on the server-side
** allow for copying entire notes (not just first line) - allow for copying entire notes (not just first line)
** ability to pass entries as arguments for more functions - ability to pass entries as arguments for more functions
&& &&
Backlog: Backlog:
** create separate gui frontend targetting mobile and desktop Linux - create separate gui frontend targetting mobile and desktop Linux
** auto-completion on tab (currently unsure of best way to make this work) - auto-completion on tab (currently unsure of best way to make this work)
<><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><> <><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><>
@@ -244,29 +383,29 @@ Changes:
Planned for next major update (fr5, The sshyp Doing a Split Update): Planned for next major update (fr5, The sshyp Doing a Split Update):
sshyp: sshyp:
** sshyp has recieved a major visual overhaul - sshyp has recieved a major visual overhaul
^ this includes the new file list and thematic text art ^ this includes the new file list and thematic text art
sshync: sshync:
** sshync has been split into a separate package and now has standalone functionality as a backup/syncing utility - sshync has been split into a separate package and now has standalone functionality as a backup/syncing utility
^ more details will be available in the sshync repo, once it is created ^ more details will be available in the sshync repo, once it is created
&& &&
Planned for next, next major update (fr6, The Farmer Shearing the sshyp Update): Planned for next, next major update (fr6, The Farmer Shearing the sshyp Update):
** when syncing, a check is made to see if any folders are not on all devices - if the check comes back true, it is corrected (in sshyp) - when syncing, a check is made to see if any folders are not on all devices - if the check comes back true, it is corrected (in sshyp)
** imporove password generator to guarantee more secure results - imporove password generator to guarantee more secure results
** enforce permissions on the server-side - enforce permissions on the server-side
** allow for copying entire notes (not just first line) - allow for copying entire notes (not just first line)
** ability to pass entries as arguments for more functions - ability to pass entries as arguments for more functions
&& &&
Backlog: Backlog:
** create separate gui frontend targetting mobile and desktop Linux - create separate gui frontend targetting mobile and desktop Linux
** auto-completion on tab (currently unsure of best way to make this work) - auto-completion on tab (currently unsure of best way to make this work)
<><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><> <><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><>
@@ -287,30 +426,30 @@ Changes:
Planned for next major update (fr4, The sshyp Doing a Split Update): Planned for next major update (fr4, The sshyp Doing a Split Update):
sshyp: sshyp:
** sshyp has recieved a major visual overhaul - sshyp has recieved a major visual overhaul
^ this includes the new file list and thematic text art ^ this includes the new file list and thematic text art
sshync: sshync:
** sshync has been split into a separate package and now has standalone functionality as a backup/syncing utility - sshync has been split into a separate package and now has standalone functionality as a backup/syncing utility
^ more details will be available in the sshync repo, once it is created ^ more details will be available in the sshync repo, once it is created
&& &&
Planned for next, next major update (fr5, The Farmer Shearing the sshyp Update): Planned for next, next major update (fr5, The Farmer Shearing the sshyp Update):
** allow for multi-client deletion... somehow (in sshync) - allow for multi-client deletion... somehow (in sshync)
** when syncing, a check is made to see if any folders are not on all devices - if the check comes back true, it is corrected (in sshyp) - when syncing, a check is made to see if any folders are not on all devices - if the check comes back true, it is corrected (in sshyp)
** imporove password generator to guarantee more secure results - imporove password generator to guarantee more secure results
** enforce permissions on the server-side - enforce permissions on the server-side
** allow for copying entire notes (not just first line) - allow for copying entire notes (not just first line)
** ability to pass entries as arguments for more functions - ability to pass entries as arguments for more functions
&& &&
Backlog: Backlog:
** create separate gui frontend targetting mobile and desktop Linux - create separate gui frontend targetting mobile and desktop Linux
** auto-completion on tab (currently unsure of best way to make this work) - auto-completion on tab (currently unsure of best way to make this work)
<><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><> <><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><>
@@ -331,39 +470,39 @@ Changes:
Additions planned for minor releases: Additions planned for minor releases:
** updated the manpage with more information regarding how sshyp works and how to set it up - updated the manpage with more information regarding how sshyp works and how to set it up
** ensured that it is now impossible for ghosts of entires to remain in /dev/shm - ensured that it is now impossible for ghosts of entires to remain in /dev/shm
** reduced total lines of code with small optimizations - reduced total lines of code with small optimizations
&& &&
Planned for next major update (fr4, The sshyp Doing a Split Update): Planned for next major update (fr4, The sshyp Doing a Split Update):
sshyp: sshyp:
** sshyp has recieved a major visual overhaul - sshyp has recieved a major visual overhaul
^ this includes the new file list and thematic text art ^ this includes the new file list and thematic text art
sshync: sshync:
** sshync has been split into a separate package and now has standalone functionality as a backup/syncing utility - sshync has been split into a separate package and now has standalone functionality as a backup/syncing utility
^ more details will be available in the sshync repo, once it is created ^ more details will be available in the sshync repo, once it is created
&& &&
Planned for next, next major update (fr5, The Farmer Shearing the sshyp Update): Planned for next, next major update (fr5, The Farmer Shearing the sshyp Update):
** allow for multi-client deletion... somehow (in sshync) - allow for multi-client deletion... somehow (in sshync)
** when syncing, a check is made to see if any folders are not on all devices - if the check comes back true, it is corrected (in sshyp) - when syncing, a check is made to see if any folders are not on all devices - if the check comes back true, it is corrected (in sshyp)
** imporove password generator to guarantee more secure results - imporove password generator to guarantee more secure results
** enforce permissions on the server-side - enforce permissions on the server-side
** allow for copying entire notes (not just first line) - allow for copying entire notes (not just first line)
** ability to pass entries as arguments for more functions - ability to pass entries as arguments for more functions
&& &&
Backlog: Backlog:
** create separate gui frontend targetting mobile and desktop Linux - create separate gui frontend targetting mobile and desktop Linux
** auto-completion on tab (currently unsure of best way to make this work) - auto-completion on tab (currently unsure of best way to make this work)
<><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><> <><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><>
@@ -381,39 +520,39 @@ Changes:
Additions planned for minor releases: Additions planned for minor releases:
** updated the manpage with more information regarding how sshyp works and how to set it up - updated the manpage with more information regarding how sshyp works and how to set it up
** ensured that it is now impossible for ghosts of entires to remain in /dev/shm - ensured that it is now impossible for ghosts of entires to remain in /dev/shm
** reduced total lines of code with small optimizations - reduced total lines of code with small optimizations
&& &&
Planned for next major update (fr4, The sshyp Doing a Split Update): Planned for next major update (fr4, The sshyp Doing a Split Update):
sshyp: sshyp:
** sshyp has recieved a major visual overhaul - sshyp has recieved a major visual overhaul
^ this includes the new file list and thematic text art ^ this includes the new file list and thematic text art
sshync: sshync:
** sshync has been split into a separate package and now has standalone functionality as a backup/syncing utility - sshync has been split into a separate package and now has standalone functionality as a backup/syncing utility
^ more details will be available in the sshync repo, once it is created ^ more details will be available in the sshync repo, once it is created
&& &&
Planned for next, next major update (fr5, The Farmer Shearing the sshyp Update): Planned for next, next major update (fr5, The Farmer Shearing the sshyp Update):
** allow for multi-client deletion... somehow (in sshync) - allow for multi-client deletion... somehow (in sshync)
** when syncing, a check is made to see if any folders are not on all devices - if the check comes back true, it is corrected (in sshyp) - when syncing, a check is made to see if any folders are not on all devices - if the check comes back true, it is corrected (in sshyp)
** imporove password generator to guarantee more secure results - imporove password generator to guarantee more secure results
** enforce permissions on the server-side - enforce permissions on the server-side
** allow for copying entire notes (not just first line) - allow for copying entire notes (not just first line)
** ability to pass entries as arguments for more functions - ability to pass entries as arguments for more functions
&& &&
Backlog: Backlog:
** create separate gui frontend targetting mobile and desktop Linux - create separate gui frontend targetting mobile and desktop Linux
** auto-completion on tab (currently unsure of best way to make this work) - auto-completion on tab (currently unsure of best way to make this work)
<><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><> <><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><>
@@ -432,39 +571,39 @@ Changes:
Additions planned for minor releases: Additions planned for minor releases:
** updated the manpage with more information regarding how sshyp works and how to set it up - updated the manpage with more information regarding how sshyp works and how to set it up
** ensured that it is now impossible for ghosts of entires to remain in /dev/shm - ensured that it is now impossible for ghosts of entires to remain in /dev/shm
** reduced total lines of code with small optimizations - reduced total lines of code with small optimizations
&& &&
Planned for next major update (fr4, The sshyp Doing a Split Update): Planned for next major update (fr4, The sshyp Doing a Split Update):
sshyp: sshyp:
** sshyp has recieved a major visual overhaul - sshyp has recieved a major visual overhaul
^ this includes the new file list and thematic text art ^ this includes the new file list and thematic text art
sshync: sshync:
** sshync has been split into a separate package and now has standalone functionality as a backup/syncing utility - sshync has been split into a separate package and now has standalone functionality as a backup/syncing utility
^ more details will be available in the sshync repo, once it is created ^ more details will be available in the sshync repo, once it is created
&& &&
Planned for next, next major update (fr5, The Farmer Shearing the sshyp Update): Planned for next, next major update (fr5, The Farmer Shearing the sshyp Update):
** allow for multi-client deletion... somehow (in sshync) - allow for multi-client deletion... somehow (in sshync)
** when syncing, a check is made to see if any folders are not on all devices - if the check comes back true, it is corrected (in sshyp) - when syncing, a check is made to see if any folders are not on all devices - if the check comes back true, it is corrected (in sshyp)
** imporove password generator to guarantee more secure results - imporove password generator to guarantee more secure results
** enforce permissions on the server-side - enforce permissions on the server-side
** allow for copying entire notes (not just first line) - allow for copying entire notes (not just first line)
** ability to pass entries as arguments for more functions - ability to pass entries as arguments for more functions
&& &&
Backlog: Backlog:
** create separate gui frontend targetting mobile and desktop Linux - create separate gui frontend targetting mobile and desktop Linux
** auto-completion on tab (currently unsure of best way to make this work) - auto-completion on tab (currently unsure of best way to make this work)
<><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><> <><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><>
@@ -487,39 +626,39 @@ Changes:
Additions planned for minor releases: Additions planned for minor releases:
** updated the manpage with more information regarding how sshyp works and how to set it up - updated the manpage with more information regarding how sshyp works and how to set it up
** ensured that it is now impossible for ghosts of entires to remain in /dev/shm - ensured that it is now impossible for ghosts of entires to remain in /dev/shm
** reduced total lines of code with small optimizations - reduced total lines of code with small optimizations
&& &&
Planned for next major update (fr4, The sshyp Doing a Split Update): Planned for next major update (fr4, The sshyp Doing a Split Update):
sshyp: sshyp:
** sshyp has recieved a major visual overhaul - sshyp has recieved a major visual overhaul
^ this includes the new file list and thematic text art ^ this includes the new file list and thematic text art
sshync: sshync:
** sshync has been split into a separate package and now has standalone functionality as a backup/syncing utility - sshync has been split into a separate package and now has standalone functionality as a backup/syncing utility
^ more details will be available in the sshync repo, once it is created ^ more details will be available in the sshync repo, once it is created
&& &&
Planned for next, next major update (fr5, The Farmer Shearing the sshyp Update): Planned for next, next major update (fr5, The Farmer Shearing the sshyp Update):
** allow for multi-client deletion... somehow (in sshync) - allow for multi-client deletion... somehow (in sshync)
** when syncing, a check is made to see if any folders are not on all devices - if the check comes back true, it is corrected (in sshyp) - when syncing, a check is made to see if any folders are not on all devices - if the check comes back true, it is corrected (in sshyp)
** imporove password generator to guarantee more secure results - imporove password generator to guarantee more secure results
** enforce permissions on the server-side - enforce permissions on the server-side
** allow for copying entire notes (not just first line) - allow for copying entire notes (not just first line)
** ability to pass entries as arguments for more functions - ability to pass entries as arguments for more functions
&& &&
Backlog: Backlog:
** create separate gui frontend targetting mobile and desktop Linux - create separate gui frontend targetting mobile and desktop Linux
** auto-completion on tab (currently unsure of best way to make this work) - auto-completion on tab (currently unsure of best way to make this work)
<><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><> <><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><>
@@ -1034,5 +1173,3 @@ What is currently functional:
- sort notes and passwords into folders - sort notes and passwords into folders
- gpg encryption - gpg encryption
- edit password/note entries - edit password/note entries
<><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><>
+17 -29
View File
@@ -1,6 +1,6 @@
.TH sshyp 1 "16 February 2022" "2022.02.16.fr4.5" "sshyp man page" .TH sshyp 1 "20 June 2022" "v1.0.0" "sshyp man page"
.SH NAME .SH NAME
sshyp \- A very simple self-hosted, synchronized password manager. Alternative to GNU pass. sshyp \- A very simple self-hosted, synchronized password manager for UNIX(-like) systems. Alternative to (and compatible with) pass/password-store.
.SH SYNOPSIS .SH SYNOPSIS
sshyp [OPTION] [[FLAG]] [/<entry name>] sshyp [OPTION] [[FLAG]] [/<entry name>]
.SH DESCRIPTION .SH DESCRIPTION
@@ -8,40 +8,33 @@ sshyp is a lightweight password and note management program written in Python. s
.SH EXAMPLES .SH EXAMPLES
Setting up sshyp for the first time or altering its configuration (also recommended after major updates): Setting up sshyp for the first time or altering its configuration (also recommended after major updates):
sshyp tweak sshyp tweak
*follow the prompts
Viewing the entry database:
sshyp
Reading an existing entry saved as ~/.password-pasture/development/github.gpg: Reading an existing entry saved as ~/.password-pasture/development/github.gpg:
sshyp /development/github sshyp /development/github
Copying the password of an existing entry saved as ~/.password-pasture/financial/bank.gpg: Copying the password of an existing entry saved as ~/.password-pasture/financial/bank.gpg:
sshyp copy -p sshyp copy -p /financial/bank
*answer the prompt with "/financial/bank"
*enter decryption password
Editing the username of an existing entry saved as ~/.password-pasture/game.gpg: Editing the username of an existing entry saved as ~/.password-pasture/game.gpg:
sshyp edit -u sshyp edit -u game
*answer the first prompt with "game"
*follow the prompts
Making a new entry using the built-in password generator: Making a new entry saved as ~/.password-pasture/school/university.gpg using the built-in password generator:
sshyp gen sshyp gen /school/university
*follow the prompts
Creating a note-only entry: Creating a note-only entry saved as ~/.password-pasture/notes/testNote.gpg:
sshyp add -n sshyp add -n /notes/testNote
*follow the prompts
Syncing entries with the server: Manually syncing entries with the server:
sshyp sync sshyp sync
Removing an existing folder saved as ~/.password-pasture/social: Removing an existing folder saved as ~/.password-pasture/social:
sshyp shear sshyp shear social/
*when prompted for what to delete, since you are deleting a folder, be sure to enter your choice with a following "/", e.g. "social/" or "/social/"
.SH OPTIONS .SH OPTIONS
In order to quickly read an existing entry, just run "sshyp </entry name>". USAGE: sshyp [OPTION [FLAG] [<entry name>]] | [/<entry name>]
Options for other operations are as follows:
help/--help/-h bring up the help menu help/--help/-h bring up the help menu
version/-v display sshyp version info version/-v display sshyp version info
@@ -71,20 +64,16 @@ copy:
gen: gen:
update/-u generate a password for an existing entry update/-u generate a password for an existing entry
.SH LIMITATIONS .SH LIMITATIONS
The following limitations will be corrected in future updates:
Currently, the entry list displays each entry with the file extension ".gpg" visible (which you do not type when reading, modifying, or creating an entry). This will be corrected when the new entry list is added.
The following characters/character sequences are not supported in entry/folder titles: The following characters/character sequences are not supported in entry/folder titles:
@ ^&* @ ^&* *&^
.SH SETUP .SH SETUP
sshyp operates on a client-server model, and thus requires you to have access to your own server (whether it be a physical home server or a cloud rental) with remote access via SSH. sshyp operates on a client-server model, and thus requires you to have access to your own server (whether it be a physical home server or a cloud rental) with remote access via SSH.
The sshyp package includes modes for operating on both client and server devices, so only one package is necessary. The sshyp package includes modes for operating on both client and server devices, so only one package is necessary.
Server setup: Server setup:
Configure an openssh server (if sshyp was installed from the Debian package, the ssh server was not installed as a dependency and needs to be installed manually) Configure an OpenSSH server (if sshyp was installed from the Debian package, the ssh server was not installed as a dependency and needs to be installed manually)
Allow remote access to the SSH server w/public key authentication (disabling password-only authentication recommended) Allow remote access to the SSH server w/public key authentication (disabling password-only authentication recommended)
Install sshyp Install sshyp
Run "sshyp tweak" and set the device type as server Run "sshyp tweak" and set the device type as server
@@ -93,8 +82,7 @@ Server setup:
Client setup: Client setup:
Install sshyp Install sshyp
Run "sshyp tweak" and follow the prompts Run "sshyp tweak" and follow the prompts
Copy the generated public SSH key to the server using preferred method (manually adding to authorized_keys, ssh-copy-id, etc.) Copy the generated public SSH key (located at ~/.ssh/sshyp.pub) to the server using preferred method (manually adding to authorized_keys, ssh-copy-id, etc.)
**this step will be automated in the future: if an entry library already exists on the server, make sure to manually recreate any folders that exist on the server in the ~/.password-pasture directory
If you already have entries on the server, sync them using "sshyp sync" If you already have entries on the server, sync them using "sshyp sync"
Done! Done!
+48
View File
@@ -0,0 +1,48 @@
#!/bin/python3
from os import path, remove, system, walk
from pathlib import Path
from shutil import move, rmtree
if __name__ == "__main__":
gpg_id = input('\nWhat is the ID of the GPG key you would like to use for re-encryption?\n\nID: ')
pasture = path.expanduser('~/.password-pasture')
if Path(f"{pasture}.new").exists():
rmtree(f"{pasture}.new")
if Path(f"{pasture}.old").exists():
rmtree(f"{pasture}.old")
if path.isdir(pasture):
for dirPath, dirNames, filenames in walk(pasture):
for filename in sorted(filenames):
Path(dirPath.replace(pasture, pasture + '.new')).mkdir(0o700, parents=True, exist_ok=True)
system(f"gpg -d '{dirPath}/{filename}' "
f"> '{dirPath.replace(pasture, pasture + '.new')}/{filename[:-4]}'")
_old_contents, _new_contents = \
open(f"{dirPath.replace(pasture, pasture + '.new')}/{filename[:-4]}", 'r').readlines(), ''
for _num in range(len(_old_contents)):
if _num == 0:
try:
_new_contents += _old_contents[1]
except IndexError:
_new_contents += '\n'
elif _num == 1:
_new_contents += _old_contents[0]
elif _num == 3:
if _old_contents[_num] == ' ' or _old_contents[_num] == '\n':
pass
else:
_new_contents += _old_contents[_num]
else:
_new_contents += _old_contents[_num]
for _num in reversed(range(len(_new_contents))):
if _new_contents[_num] == '\n' or _new_contents[_num] == '':
_new_contents = _new_contents[:-1]
else:
break
open(f"{dirPath.replace(pasture, pasture + '.new')}/{filename[:-4]}", 'w').writelines(_new_contents)
system(f"gpg -qr {str(gpg_id)} -e '{dirPath.replace(pasture, pasture + '.new')}/{filename[:-4]}'")
remove(f"{dirPath.replace(pasture, pasture + '.new')}/{filename[:-4]}")
else:
print(f"\nError: no entry folder ({pasture}) found\n")
move(pasture, f"{pasture}.old")
move(f"{pasture}.new", pasture)
@@ -0,0 +1 @@
af6236472791614ed41bf13318a2d1c41228855c
+41
View File
@@ -0,0 +1,41 @@
#!/bin/python3
from os import path, remove, system, walk
from pathlib import Path
from shutil import move, rmtree
if __name__ == "__main__":
gpg_id = input('\nWhat is the ID of the GPG key you would like to use for re-encryption?\n\nID: ')
pasture = path.expanduser('~/.password-pasture')
if Path(f"{pasture}.new").exists():
rmtree(f"{pasture}.new")
if Path(f"{pasture}.old").exists():
rmtree(f"{pasture}.old")
if path.isdir(pasture):
for dirPath, dirNames, filenames in walk(pasture):
for filename in sorted(filenames):
Path(dirPath.replace(pasture, pasture + '.new')).mkdir(0o700, parents=True, exist_ok=True)
system(f"gpg -d '{dirPath}/{filename}' "
f"> '{dirPath.replace(pasture, pasture + '.new')}/{filename[:-4]}'")
_old_contents, _new_contents = \
open(f"{dirPath.replace(pasture, pasture + '.new')}/{filename[:-4]}", 'r').readlines(), ''
for _num in range(len(_old_contents)):
if _num == 3:
if _old_contents[_num] == ' ' or _old_contents[_num] == '\n':
pass
else:
_new_contents += _old_contents[_num]
else:
_new_contents += _old_contents[_num]
for _num in reversed(range(len(_new_contents))):
if _new_contents[_num] == '\n' or _new_contents[_num] == '':
_new_contents = _new_contents[:-1]
else:
break
open(f"{dirPath.replace(pasture, pasture + '.new')}/{filename[:-4]}", 'w').writelines(_new_contents)
system(f"gpg -qr {str(gpg_id)} -e '{dirPath.replace(pasture, pasture + '.new')}/{filename[:-4]}'")
remove(f"{dirPath.replace(pasture, pasture + '.new')}/{filename[:-4]}")
else:
print(f"\nError: no entry folder ({pasture}) found\n")
move(pasture, f"{pasture}.old")
move(f"{pasture}.new", pasture)
+143 -22
View File
@@ -1,15 +1,14 @@
#!/bin/bash #!/bin/bash
# This script packages sshyp (from source) for various Linux environments. # This script packages sshyp (from source) for various UNIX(-like) environments.
# Dependencies (Arch Linux): dpkg (packaging for Debian/Termux), freebsd-pkg (packaging for FreeBSD)
# Dependencies (Fedora) (can only package for self): rpmdevtools
# NOTE It is recommended to instead use the latest officially packaged and tagged release. # NOTE It is recommended to instead use the latest officially packaged and tagged release.
# NOTE If using Arch, it is recommended to install from the AUR or from the PKGBUILD attatched to the latest official release.
# NOTE As of release fr4, sshync will become a separate package and thus a dependency for sshyp. sshync is automatically installed with the PKGBUILD version.
echo -e '\nOptions (please enter the number only):' echo -e '\nOptions (please enter the number only):'
echo -e '\nDistribution Packages:\n\n1. Debian\n2. Termux\n3. Generic (used for PKGBUILD/APKBUILD)' echo -e '\nPackage Formats:\n\n1. Haiku\n2. Debian&Ubuntu Linux\n3. Fedora Linux\n4. FreeBSD\n5. Termux\n6. Generic (used for PKGBUILD/APKBUILD)'
echo -e '\nBuild Scripts:\n\n4. Alpine Linux (APKBUILD)\n5. Arch Linux (PKGBUILD, also builds local generic package)' echo -e '\nBuild Scripts:\n\n7. Arch Linux (PKGBUILD)'
echo -e '\nOther:\n\n6. All (generates all distribution packages and build scripts)\n' echo -e '\nOther:\n\n8. All (generates all distribution packages (excluding Haiku and Fedora, as these must be packaged on their respective distributions) and build scripts)\n'
read -n 1 -r -p "Distribution: " distro read -n 1 -r -p "Distribution: " distro
echo -e '\n\nThe value entered in this field will only affect the version reported to the package manager. The latest source is used regardless.\n' echo -e '\n\nThe value entered in this field will only affect the version reported to the package manager. The latest source is used regardless.\n'
@@ -18,7 +17,7 @@ read -r -p "Version number: " version
echo -e '\nThe value entered in this field will only affect the revision number for build scripts.\n' echo -e '\nThe value entered in this field will only affect the revision number for build scripts.\n'
read -r -p "Revision number: " revision read -r -p "Revision number: " revision
if [ "$distro" == "4" ] || [ "$distro" == "5" ] || [ "$distro" == "6" ]; then if [ "$distro" == "7" ] || [ "$distro" == "8" ]; then
echo -e '\nOptions (please enter the number only):' echo -e '\nOptions (please enter the number only):'
echo -e '\n1. GitHub Release Tag\n2. Local\n' echo -e '\n1. GitHub Release Tag\n2. Local\n'
read -r -p "Source (for build scripts): " source read -r -p "Source (for build scripts): " source
@@ -32,10 +31,53 @@ fi
mkdir -p packages mkdir -p packages
if [ "$distro" == "1" ] || [ "$distro" == "6" ]; then if [ "$distro" == "1" ]; then
echo -e '\nPackaging for Haiku...\n'
mkdir -p packages/haikutemp/documentation/{man/man1,packages/sshyp}
echo "name sshyp
version "$version"-"$revision"
architecture any
summary \"A light-weight, self-hosted, synchronized password manager\"
description \"sshyp is the only password-store compatible CLI password manager available for Haiku - it is also available on Linux/Android (via Termux) so that you can sync your entries across all of your devices.\"
packager \"Randall Winkhart <idgr at tutanota dot com>\"
vendor \"Randall Winkhart\"
licenses {
\"GNU GPL v3\"
}
copyrights {
\"2021-2022 Randall Winkhart\"
}
provides {
sshyp = "$version"
cmd:sshyp
}
requires {
gnupg
openssh
python3
nano
}
urls {
\"https://github.com/rwinkhart/sshyp\"
}
" > packages/haikutemp/.PackageInfo
cp -r bin packages/haikutemp/
cp -r share/doc/sshyp/ packages/haikutemp/documentation/packages/
cp -r share/licenses/sshyp/ packages/haikutemp/documentation/packages/
cp extra/manpage packages/haikutemp/documentation/man/man1/sshyp.1
gzip packages/haikutemp/documentation/man/man1/sshyp.1
cd packages/haikutemp
package create -b sshyp-"$version"-"$revision"_all.hpkg
package add sshyp-"$version"-"$revision"_all.hpkg bin documentation
cd ../..
mv packages/haikutemp/sshyp-"$version"-"$revision"_all.hpkg packages/
rm -rf packages/haikutemp
echo -e "\nHaiku packaging complete.\n"
fi
if [ "$distro" == "2" ] || [ "$distro" == "8" ]; then
echo -e '\nPackaging for Debian...\n' echo -e '\nPackaging for Debian...\n'
mkdir -p packages/debiantemp/sshyp_"$version"-"$revision"_all/{DEBIAN,usr} mkdir -p packages/debiantemp/sshyp_"$version"-"$revision"_all/{DEBIAN,usr/share/man/man1}
mkdir -p packages/debiantemp/sshyp_"$version"-"$revision"_all/usr/share/man/man1
echo "Package: sshyp echo "Package: sshyp
Version: $version Version: $version
Section: utils Section: utils
@@ -44,7 +86,7 @@ Maintainer: Randall Winkhart <idgr at tutanota dot com>
Description: A light-weight, self-hosted, synchronized password manager Description: A light-weight, self-hosted, synchronized password manager
Depends: python3, gnupg, openssh-client, nano, xclip, wl-clipboard Depends: python3, gnupg, openssh-client, nano, xclip, wl-clipboard
Priority: optional Priority: optional
Installed-Size: 35 Installed-Size: 185
" > packages/debiantemp/sshyp_"$version"-"$revision"_all/DEBIAN/control " > packages/debiantemp/sshyp_"$version"-"$revision"_all/DEBIAN/control
cp -r bin packages/debiantemp/sshyp_"$version"-"$revision"_all/usr/ cp -r bin packages/debiantemp/sshyp_"$version"-"$revision"_all/usr/
cp -r share packages/debiantemp/sshyp_"$version"-"$revision"_all/usr/ cp -r share packages/debiantemp/sshyp_"$version"-"$revision"_all/usr/
@@ -56,7 +98,7 @@ Installed-Size: 35
echo -e "\nDebian packaging complete.\n" echo -e "\nDebian packaging complete.\n"
fi fi
if [ "$distro" == "2" ] || [ "$distro" == "6" ]; then if [ "$distro" == "5" ] || [ "$distro" == "8" ]; then
echo -e '\nPackaging for Termux...\n' echo -e '\nPackaging for Termux...\n'
mkdir -p packages/termuxtemp/sshyp_"$version"-"$revision"_all_termux/{data,DEBIAN} mkdir -p packages/termuxtemp/sshyp_"$version"-"$revision"_all_termux/{data,DEBIAN}
mkdir -p packages/termuxtemp/sshyp_"$version"-"$revision"_all_termux/data/data/com.termux/files/usr/share/man/man1 mkdir -p packages/termuxtemp/sshyp_"$version"-"$revision"_all_termux/data/data/com.termux/files/usr/share/man/man1
@@ -68,7 +110,7 @@ Maintainer: Randall Winkhart <idgr at tutanota dot com>
Description: A light-weight, self-hosted, synchronized password manager Description: A light-weight, self-hosted, synchronized password manager
Depends: python, gnupg, openssh, nano, termux-api, termux-am Depends: python, gnupg, openssh, nano, termux-api, termux-am
Priority: optional Priority: optional
Installed-Size: 35 Installed-Size: 185
" > packages/termuxtemp/sshyp_"$version"-"$revision"_all_termux/DEBIAN/control " > packages/termuxtemp/sshyp_"$version"-"$revision"_all_termux/DEBIAN/control
cp -r bin packages/termuxtemp/sshyp_"$version"-"$revision"_all_termux/data/data/com.termux/files/usr/ cp -r bin packages/termuxtemp/sshyp_"$version"-"$revision"_all_termux/data/data/com.termux/files/usr/
cp -r share packages/termuxtemp/sshyp_"$version"-"$revision"_all_termux/data/data/com.termux/files/usr/ cp -r share packages/termuxtemp/sshyp_"$version"-"$revision"_all_termux/data/data/com.termux/files/usr/
@@ -80,12 +122,11 @@ Installed-Size: 35
echo -e "\nTermux packaging complete.\n" echo -e "\nTermux packaging complete.\n"
fi fi
if [ "$distro" == "3" ] || [ "$distro" == "5" ] || [ "$distro" == "6" ]; then if [ "$distro" == "3" ] || [ "$distro" == "4" ] || [ "$distro" == "6" ] || [ "$distro" == "7" ] || [ "$distro" == "8" ]; then
echo -e '\nPackaging as generic...\n' echo -e '\nPackaging as generic...\n'
mkdir -p packages/archtemp/usr mkdir -p packages/archtemp/usr/share/man/man1
cp -r bin packages/archtemp/usr/ cp -r bin packages/archtemp/usr/
cp -r share packages/archtemp/usr/ cp -r share packages/archtemp/usr/
mkdir -p packages/archtemp/usr/share/man/man1
cp extra/manpage packages/archtemp/usr/share/man/man1/sshyp.1 cp extra/manpage packages/archtemp/usr/share/man/man1/sshyp.1
gzip packages/archtemp/usr/share/man/man1/sshyp.1 gzip packages/archtemp/usr/share/man/man1/sshyp.1
tar -C packages/archtemp -cvf packages/sshyp-"$version".tar.xz usr/ tar -C packages/archtemp -cvf packages/sshyp-"$version".tar.xz usr/
@@ -95,7 +136,91 @@ if [ "$distro" == "3" ] || [ "$distro" == "5" ] || [ "$distro" == "6" ]; then
echo -e "\nGeneric packaging complete.\n" echo -e "\nGeneric packaging complete.\n"
fi fi
if [ "$distro" == "5" ] || [ "$distro" == "6" ]; then if [ "$distro" == "3" ]; then
echo -e '\nPackaging for Fedora...\n'
rm -rf ~/rpmbuild
rpmdev-setuptree
cp packages/sshyp-"$version".tar.xz ~/rpmbuild/SOURCES
echo "Name: sshyp
Version: "$version"
Release: "$revision"
Summary: A light-weight, self-hosted, synchronized password manager
BuildArch: noarch
License: GPL3
URL: https://github.com/rwinkhart/sshyp
Source0: sshyp-"$version".tar.xz
Requires: python gnupg openssh nano wl-clipboard
%description
sshyp is a password-store compatible CLI password manager available for UNIX(-like) systems - its primary goal is to make syncing passwords and notes across devices as easy as possible via CLI.
%install
tar xf %{_sourcedir}/sshyp-"$version".tar.xz -C %{_sourcedir}
cp -r %{_sourcedir}/usr %{buildroot}
%files
/usr/bin/sshyp
/usr/bin/sshync.py
/usr/bin/sshypRemote.py
%license /usr/share/licenses/sshyp/license
%doc /usr/share/doc/sshyp/changelog
%doc /usr/share/man/man1/sshyp.1.gz
" > ~/rpmbuild/SPECS/sshyp.spec
rpmbuild -bb ~/rpmbuild/SPECS/sshyp.spec
mv ~/rpmbuild/RPMS/noarch/* packages/
rm -rf ~/rpmbuild
echo -e "\nFedora packaging complete.\n"
fi
if [ "$distro" == "4" ] || [ "$distro" == "8" ]; then
echo -e '\nPackaging for FreeBSD...\n'
mkdir -p packages/FreeBSDtemp/bin
tar xf packages/sshyp-"$version".tar.xz -C packages/FreeBSDtemp
ln -s /usr/local/bin/python3 packages/FreeBSDtemp/bin/python3
echo "name: sshyp
version: \""$version"\"
abi = \"FreeBSD:13:*\";
arch = \"freebsd:13:*\";
origin: security/sshyp
comment: \"a password manager\"
desc: \"a light-weight, self-hosted, synchronized password manager\"
maintainer: <idgr at tutanota dot com>
www: https://github.com/rwinkhart/sshyp
prefix: /
\"deps\" : {
\"python\" : {
\"origin\" : \"lang/python\"
},
\"gnupg\" : {
\"origin\" : \"security/gnupg\"
},
\"nano\" : {
\"origin\" : \"editors/nano\"
},
\"xclip\" : {
\"origin\" : \"x11/xclip\"
},
\"wl-clipboard\" : {
\"origin\" : \"x11/wl-clipboard\"
},
},
" > packages/FreeBSDtemp/+MANIFEST
echo "/bin/python3
/usr/bin/sshync.py
/usr/bin/sshyp
/usr/bin/sshypRemote.py
/usr/share/doc/sshyp/changelog
/usr/share/licenses/sshyp/license
/usr/share/man/man1/sshyp.1.gz
" > packages/FreeBSDtemp/plist
pkg create -m packages/FreeBSDtemp/ -r packages/FreeBSDtemp/ -p packages/FreeBSDtemp/plist -o packages/
rm -rf packages/FreeBSDtemp
echo -e "\nFreeBSD packaging complete.\n"
fi
if [ "$distro" == "7" ] || [ "$distro" == "8" ]; then
echo -e '\nGenerating PKGBUILD...' echo -e '\nGenerating PKGBUILD...'
echo "# Maintainer: Randall Winkhart <idgr at tutanota dot com> echo "# Maintainer: Randall Winkhart <idgr at tutanota dot com>
@@ -119,7 +244,3 @@ package() {
" > packages/PKGBUILD " > packages/PKGBUILD
echo -e "\nPKGBUILD generated.\n" echo -e "\nPKGBUILD generated.\n"
fi fi
if [ "$distro" == "4" ]; then
echo -e '\nThis packaging format is not yet supported, but will be in the near future!\n'
fi
+37 -30
View File
@@ -1,43 +1,52 @@
sshyp 2022.02.16.fr4.5 sshyp v1.0.1
The High-Tech Shears Update - Patch 5 The Polished Trotters Update - Patch 1
This release addresses a critical syntax error. This is a hotfix for the Haiku decryption bug.
Note: Upgrading from releases older than fr4.5 requires the configuration ("sshyp tweak") to be re-done, as the configuration process has changed.
Changes: Changes:
- corrected a syntax error causing critical functionality issues - subprocess.Popen has been replaced with subprocess.run where applicable
- stdout is no longer captured with any subprocess.Popen or subprocess.run usages
^ this fixes decryption on Haiku
&& <><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><>
sshyp v1.0.0
Planned for next major update (fr5, The sshyp Doing a Split Update): The Polished Trotters Update
sshyp: This release brings 'sshyp' in line with the original goals of the project.
** sshyp has recieved a major visual overhaul As such, it is being crowned "v1.0.0", and is considered a stable base for future expansions.
^ this includes the new file list and thematic text art
sshync: Features:
** sshync has been split into a separate package and now has standalone functionality as a backup/syncing utility
^ more details will be available in the sshync repo, once it is created
&& - sshyp has been modified to run on Haiku, an open-source re-implementation of BeOS
^ new package formats have been added for Haiku, FreeBSD, and Fedora Linux
- the entry format has been changed to support entries created in pass/password-store
^ this change requires existing entry libraries to be converted - see the sshyp v1.0.0 release page on GitHub for a conversion script
- majorly overhauled visual experience for sshyp
^ this includes a new entry list, a new entry readout, colored output, ascii art, and more!
- entries can now optionally be passed as arguments, directly
^ as opposed to the user being prompted for an entry name after running a command
Planned for next, next major update (fr6, The Farmer Shearing the sshyp Update): Changes:
** when syncing, a check is made to see if any folders are not on all devices - if the check comes back true, it is corrected (in sshyp) - corrected outdated licensing and copyright information
** imporove password generator to guarantee more secure results - 'if __name__=="__main__":' convention is now used
** enforce permissions on the server-side - help screens have been overhauled
** allow for copying entire notes (not just first line) - improved password generator to guarantee more secure results
** ability to pass entries as arguments for more functions - fixed errors when trying to sync with a multi-word entry on the server
- sshync now uses 'scp' (via the sftp protocol), rather than 'sftp'
&& - rename function now properly allows for renaming folders
- renaming an entry/folder will now properly delete the old entry/folder from the server
Backlog: - entry previews at the time of entry creation/editing no longer require entering the gpg password more times than necessary
- entries will no longer be overwritten if attempting to create a new entry that uses an already existing name
** create separate gui frontend targetting mobile and desktop Linux - the clipboard now automatically clears after 30 seconds
** auto-completion on tab (currently unsure of best way to make this work) - sshyp server no longer needs to create copies of its libraries in ~/
- added more and improved existing exceptions
- the lock file is now decrypted to /dev/null
- ...and lots of minor (under the hood) changes!
<><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><> <><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><>
@@ -46,7 +55,5 @@ https://raw.githubusercontent.com/rwinkhart/sshyp/main/extra/changelog-total
Legend: Legend:
** = feature/change not yet finished/implemented
- = feature/change implemented and pushed upstream - = feature/change implemented and pushed upstream
^ = note regarding the above feature/change ^ = note regarding the above feature/change
&& = visual separater for patch notes for different planned major version releases
+2 -2
View File
@@ -1,5 +1,5 @@
sshyp is a FOSS password manager that takes advantage of rsync sshyp is a FOSS password manager that uses an sftp-based syncing back-end.
Copyright (C) 2021 Randall Winkhart idgr@tutanota.com Copyright (C) 2022 Randall Winkhart idgr@tutanota.com
This program is free software: you can redistribute it and/or modify This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by it under the terms of the GNU General Public License as published by