2023-11-29 21:19:53 +09:00
# include <stdio.h>
# include <string.h>
2023-11-29 23:25:41 +09:00
# include <stdlib.h>
2023-11-29 21:19:53 +09:00
# include <stdbool.h>
# include <gpgme.h>
2023-11-30 00:27:53 +09:00
# include "initpass.h"
2023-11-29 21:19:53 +09:00
# include "showpass.h"
# include "yankpass.h"
2023-11-29 23:26:26 +09:00
# include "listpass.h"
2023-11-29 21:19:53 +09:00
# include "addpass.h"
2023-11-29 22:16:09 +09:00
# include "delpass.h"
2023-11-29 23:26:26 +09:00
# include "genpass.h"
2023-12-01 02:25:27 +09:00
# include "otppass.h"
2023-11-29 21:19:53 +09:00
const char * sofname = " sp " ;
2024-02-01 16:01:25 +09:00
const char * version = " 1.2.0 " ;
2023-11-29 21:19:53 +09:00
void helpme ( ) {
2024-02-01 17:01:15 +09:00
printf ( " 0 7 6 %s %s - シンプルなパスワードマネージャー\n " , sofname , version ) ;
printf ( " https://076.moe/ | https://gitler.moe/suwako/%s \n \n " , sofname ) ;
2024-02-02 12:15:58 +09:00
puts ( " 使い方: " ) ;
2023-11-30 00:27:53 +09:00
printf ( " %s -i <gpg-id> : GPGと使ってパスワードストレージを初期設定 \n " , sofname ) ;
2023-11-29 23:26:26 +09:00
printf ( " %s -s <パスワード名> :パスワードを表示 \n " , sofname ) ;
printf ( " %s -y <パスワード名> :パスワードを表示せずクリップボードにコピーする \n " , sofname ) ;
printf ( " %s -l :パスワード一覧を表示 \n " , sofname ) ;
printf ( " %s -a <パスワード名> :パスワードを追加 \n " , sofname ) ;
printf ( " %s -d <パスワード名> :パスワードを削除 \n " , sofname ) ;
2024-02-01 17:01:15 +09:00
printf ( " %s -e <パスワード名> :パスワードを変更 \n " , sofname ) ;
2023-11-29 23:26:26 +09:00
printf ( " %s -g <文字数> [risk|secure] : 希望文字数でパスワードをランダムに作成する。risk= 英数字のみ(不安)、secure= 英数字+ 特別文字(デフォルト)を使用 \n " , sofname ) ;
2024-02-02 12:15:58 +09:00
printf ( " %s -o <パスワード名> : ワンタイムパスワード(TOTP)を表示。存在しなければ、創作する \n " , sofname ) ;
2023-11-29 23:26:26 +09:00
printf ( " %s -h :ヘルプを表示 \n " , sofname ) ;
printf ( " %s -v :バージョンを表示 \n " , sofname ) ;
2023-11-29 21:19:53 +09:00
}
2024-02-02 12:15:58 +09:00
void helpme_en ( ) {
printf ( " 076 %s %s - Simple Password Manager \n " , sofname , version ) ;
printf ( " https://076.moe/ | https://gitler.moe/suwako/%s \n " , sofname ) ;
puts ( " When reporting issues, please report in Japanese. \n " ) ;
puts ( " Usage: " ) ;
printf ( " %s -i <gpg-id> : First setting for using GPG and password storage \n " , sofname ) ;
printf ( " %s -s <Password name> : Show password \n " , sofname ) ;
printf ( " %s -y <Password name> : Copy password to clipboard without show \n " , sofname ) ;
printf ( " %s -l : Show me list of password \n " , sofname ) ;
printf ( " %s -a <Password name> : Add password \n " , sofname ) ;
printf ( " %s -d <Password name> : Delete password \n " , sofname ) ;
printf ( " %s -e <Password name> : Edit password \n " , sofname ) ;
printf ( " %s -g <Characters amount> [risk|secure] : Randomly make password with hoped amount. Using risk = only english letter and number (abnoxious), secure = english letter and digit + special character (default) \n " , sofname ) ;
printf ( " %s -o <Password name> : Show one time password. If not exist, construct \n " , sofname ) ;
printf ( " %s -h : Show help \n " , sofname ) ;
printf ( " %s -v : Show version \n " , sofname ) ;
}
2023-11-29 21:19:53 +09:00
int main ( int argc , char * argv [ ] ) {
2024-02-02 12:15:58 +09:00
char * lang = getenv ( " SP_LANG " ) ;
2023-11-29 21:19:53 +09:00
if ( argc < 2 ) {
2024-02-02 12:15:58 +09:00
if ( lang ! = NULL & & strncmp ( lang , " en " , 2 ) = = 0 ) helpme_en ( ) ;
else helpme ( ) ;
2023-11-30 00:10:25 +09:00
return 0 ;
2023-11-29 21:19:53 +09:00
}
2023-11-30 00:27:53 +09:00
if ( argc = = 3 & & strcmp ( argv [ 1 ] , " -i " ) = = 0 ) initpass ( argv [ 2 ] ) ;
2023-11-29 21:19:53 +09:00
else if ( argc = = 3 & & strcmp ( argv [ 1 ] , " -s " ) = = 0 ) showpass ( argv [ 2 ] ) ;
else if ( argc = = 3 & & strcmp ( argv [ 1 ] , " -y " ) = = 0 ) yankpass ( argv [ 2 ] ) ;
2023-11-29 23:25:41 +09:00
else if ( argc = = 2 & & strcmp ( argv [ 1 ] , " -l " ) = = 0 ) {
char basePath [ 512 ] ;
char * homedir = getenv ( " HOME " ) ;
if ( homedir = = NULL ) {
2024-02-02 12:15:58 +09:00
if ( lang ! = NULL & & strncmp ( lang , " en " , 2 ) = = 0 ) perror ( " Failed to getting home directory " ) ;
else perror ( " ホームディレクトリを受取に失敗 " ) ;
2023-11-29 23:25:41 +09:00
return - 1 ;
}
char * basedir = " /.local/share/sp/ " ;
snprintf ( basePath , sizeof ( basePath ) , " %s%s " , homedir , basedir ) ;
listpass ( basePath , 0 ) ;
}
2023-11-29 21:19:53 +09:00
else if ( argc = = 3 & & strcmp ( argv [ 1 ] , " -a " ) = = 0 ) addpass ( argv [ 2 ] ) ;
2024-02-01 17:01:15 +09:00
else if ( argc = = 3 & & strcmp ( argv [ 1 ] , " -d " ) = = 0 ) delpass ( argv [ 2 ] , 0 ) ;
else if ( argc = = 3 & & strcmp ( argv [ 1 ] , " -e " ) = = 0 ) {
delpass ( argv [ 2 ] , 1 ) ;
addpass ( argv [ 2 ] ) ;
}
2023-11-29 23:26:26 +09:00
else if ( strcmp ( argv [ 1 ] , " -g " ) = = 0 ) {
if ( argc = = 3 ) genpass ( atoi ( argv [ 2 ] ) , true ) ;
else if ( argc = = 4 & & strcmp ( argv [ 3 ] , " risk " ) = = 0 ) genpass ( atoi ( argv [ 2 ] ) , false ) ;
else if ( argc = = 4 & & strcmp ( argv [ 3 ] , " secure " ) = = 0 ) genpass ( atoi ( argv [ 2 ] ) , true ) ;
2024-02-02 12:15:58 +09:00
else {
if ( lang ! = NULL & & strncmp ( lang , " en " , 2 ) = = 0 ) helpme_en ( ) ;
else helpme ( ) ;
}
2023-11-29 23:26:26 +09:00
}
2024-02-01 16:01:25 +09:00
else if ( argc = = 3 & & strcmp ( argv [ 1 ] , " -o " ) = = 0 ) {
char fullPath [ 512 ] ;
char * homedir = getenv ( " HOME " ) ;
if ( homedir = = NULL ) {
2024-02-02 12:15:58 +09:00
if ( lang ! = NULL & & strncmp ( lang , " en " , 2 ) = = 0 ) perror ( " Failed to getting home directory " ) ;
else perror ( " ホームディレクトリを受取に失敗 " ) ;
2024-02-01 16:01:25 +09:00
return - 1 ;
}
char * basedir = " /.local/share/sp/ " ;
snprintf ( fullPath , sizeof ( fullPath ) , " %s%s%s.gpg " , homedir , basedir , argv [ 2 ] ) ;
otppass ( fullPath ) ;
}
2023-11-29 21:19:53 +09:00
else if ( argc = = 2 & & strcmp ( argv [ 1 ] , " -v " ) = = 0 ) printf ( " %s-%s \n " , sofname , version ) ;
2024-02-02 12:15:58 +09:00
else {
if ( lang ! = NULL & & strncmp ( lang , " en " , 2 ) = = 0 ) helpme_en ( ) ;
else helpme ( ) ;
}
2023-11-29 21:19:53 +09:00
return 0 ;
}