sp/main.c

118 行
5.2 KiB
C
Raw 通常表示 履歴

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-03 00:17:50 +09:00
const char* version = "1.3.0";
2023-11-29 21:19:53 +09:00
void helpme() {
printf(" %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);
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]);
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;
}