]> Nishi Git Mirror - sp.git/commitdiff
初期設定
author諏訪子 <suwako@076.moe>
Wed, 29 Nov 2023 15:27:53 +0000 (00:27 +0900)
committer諏訪子 <suwako@076.moe>
Wed, 29 Nov 2023 15:27:53 +0000 (00:27 +0900)
Makefile
addpass.h
initpass.c [new file with mode: 0644]
initpass.h [new file with mode: 0644]
main.c
showpass.c

index 41e2fc4f358bc11bacca70748547f5de83677b89..88af5a591332490141244c94f453c4d279ae3793 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -3,7 +3,7 @@ VERSION=1.0.0
 # Linux、Haiku、かIllumos = /usr、FreeBSDかOpenBSD = /usr/local、NetBSD = /usr/pkg
 PREFIX=/usr
 CC=cc
-FILES=main.c showpass.c yankpass.c addpass.c delpass.c listpass.c genpass.c
+FILES=main.c showpass.c yankpass.c addpass.c delpass.c listpass.c genpass.c initpass.c
 CFLAGS=-Wall -Wextra -g
 LDFLAGS=-lgpgme
 
index 2fdff4f90f42b5580b6b4fa1e36fb2af3b869cf0..8aca69dc2ee0d4bf3e1996a7bf6fb14f5024b6d7 100644 (file)
--- a/addpass.h
+++ b/addpass.h
@@ -1,6 +1,9 @@
 #ifndef ADDPASS_H
 #define ADDPASS_H
 
+#include <sys/stat.h>
+
+int mkdir_r(const char *path, mode_t mode);
 void addpass(char* file);
 
 #endif
diff --git a/initpass.c b/initpass.c
new file mode 100644 (file)
index 0000000..6a5679d
--- /dev/null
@@ -0,0 +1,50 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <sys/stat.h>
+#include <string.h>
+#include <errno.h>
+
+#include "initpass.h"
+#include "addpass.h"
+
+void initpass(char* gpgid) {
+  char* homedir = getenv("HOME");
+  if (homedir == NULL) {
+    perror("ホームディレクトリを受取に失敗。");
+    return;
+  }
+
+  char* basedir = "/.local/share/sp/";
+  char dirpath[256];
+  snprintf(dirpath, sizeof(dirpath), "%s%s", homedir, basedir);
+
+  if (mkdir_r(dirpath, 0755) != 0 && errno != EEXIST) {
+    perror("ディレクトリを作成に失敗。");
+    return;
+  }
+
+  char gpgidpath[512];
+  snprintf(gpgidpath, sizeof(gpgidpath), "%s/.gpg-id", dirpath);
+
+  struct stat statbuf;
+  if (stat(gpgidpath, &statbuf) == 0) {
+    fprintf(stderr, ".gpg-idファイルは既に存在します。\n");
+    return;
+  }
+
+  FILE* gpgidfile = fopen(gpgidpath, "w");
+  if (gpgidfile == NULL) {
+    perror(".gpg-idファイルを書き込めません。");
+    fclose(gpgidfile);
+    return;
+  }
+
+  if (fputs(gpgid, gpgidfile) == EOF) {
+    fprintf(stderr, ".gpg-idファイルへの書き込みに失敗しました。\n");
+    fclose(gpgidfile);
+    return;
+  }
+
+  fclose(gpgidfile);
+  printf("初期設定に完了しました。");
+}
diff --git a/initpass.h b/initpass.h
new file mode 100644 (file)
index 0000000..38cd2d5
--- /dev/null
@@ -0,0 +1,6 @@
+#ifndef INITPASS_H
+#define INITPASS_H
+
+void initpass(char* gpgid);
+
+#endif
diff --git a/main.c b/main.c
index d2f8682bc4f11a8e1ab073ccf909a9900089a054..719a0eef1b4f5c96593cc644990a941ce91f17d6 100644 (file)
--- a/main.c
+++ b/main.c
@@ -5,7 +5,7 @@
 
 #include <gpgme.h>
 
-void initpass(char* gpgid);
+#include "initpass.h"
 #include "showpass.h"
 #include "yankpass.h"
 #include "listpass.h"
@@ -20,7 +20,7 @@ const char* version = "1.0.0";
 
 void helpme() {
   printf("使い方:\n");
-  /* printf("%s -i <gpg-id>               :GPGと使ってパスワードストレージを初期設定\n", sofname); */
+  printf("%s -i <gpg-id>               :GPGと使ってパスワードストレージを初期設定\n", sofname);
   printf("%s -s <パスワード名>         :パスワードを表示\n", sofname);
   printf("%s -y <パスワード名>         :パスワードを表示せずクリップボードにコピーする\n", sofname);
   printf("%s -l                        :パスワード一覧を表示\n", sofname);
@@ -38,7 +38,7 @@ int main (int argc, char* argv[]) {
     return 0;
   }
 
-  if (argc == 3 && strcmp(argv[1], "-i") == 0) printf("TODO: 初期設定\n");
+  if (argc == 3 && strcmp(argv[1], "-i") == 0) initpass(argv[2]);
   else if (argc == 3 && strcmp(argv[1], "-s") == 0) showpass(argv[2]);
   else if (argc == 3 && strcmp(argv[1], "-y") == 0) yankpass(argv[2]);
   else if (argc == 2 && strcmp(argv[1], "-l") == 0) {
index e9a01d4822c5fe0a56ce5b87a5577618be255f12..9cebc97058f93c5ed02c2b1a5e2b5422dad4cde0 100644 (file)
@@ -87,7 +87,6 @@ void showpass(char* file) {
     buffer[read_bytes] = '\0';
     printf("%s", buffer);
   }
-  puts("");
 
   // 掃除
   clean_up(ctx, in, out, gpgfile, gpgpath);