SVNからのミラー
This commit is contained in:
189
src/editpass.cc
Normal file
189
src/editpass.cc
Normal file
@@ -0,0 +1,189 @@
|
||||
#include "common.hh"
|
||||
#include "editpass.hh"
|
||||
#include "delpass.hh"
|
||||
#include "addpass.hh"
|
||||
#include "../main.hh"
|
||||
|
||||
#include <FL/Fl_Window.H>
|
||||
#include <FL/fl_ask.H>
|
||||
|
||||
#include <string>
|
||||
#include <unistd.h>
|
||||
#include <vector>
|
||||
|
||||
Editpass edit;
|
||||
|
||||
struct InputData {
|
||||
Fl_Input *txtin;
|
||||
Fl_Secret_Input *pass1;
|
||||
Fl_Secret_Input *pass2;
|
||||
Fl_Window *dialog;
|
||||
};
|
||||
|
||||
void Editpass::setFile(std::string &f) {
|
||||
edit.file = f;
|
||||
}
|
||||
|
||||
std::string Editpass::getFile() {
|
||||
return file;
|
||||
}
|
||||
|
||||
bool Editpass::exec(const std::string &file, const std::string &pass) {
|
||||
std::string lang = Common::getlang();
|
||||
|
||||
Common c;
|
||||
c.tmpcopy(file, "/tmp/simpas-tmp.gpg");
|
||||
|
||||
Delpass d;
|
||||
bool isdel = d.exec(file, true);
|
||||
if (!isdel) {
|
||||
std::string err =
|
||||
(lang.compare(0, 2, "en") == 0 ? "Failed to edit." : "編集に失敗。");
|
||||
fl_alert("%s", err.c_str());
|
||||
return false;
|
||||
}
|
||||
|
||||
Addpass a;
|
||||
bool isadd = a.exec(file, pass, true);
|
||||
if (!isadd) {
|
||||
std::string err =
|
||||
(lang.compare(0, 2, "en") == 0 ? "Failed to edit." : "編集に失敗。");
|
||||
fl_alert("%s", err.c_str());
|
||||
// TODO: うまく動いているかの確認。それは次のバージョンから・・・
|
||||
/* std::vector<std::string> tokens = Common::explode(file, '/'); */
|
||||
/* std::string passpath = tokens[0]; */
|
||||
|
||||
/* for (size_t i = 1; i < tokens.size(); ++i) { */
|
||||
/* if (i == tokens.size() - 1) continue; */
|
||||
/* passpath += "/" + tokens[i]; */
|
||||
/* } */
|
||||
|
||||
/* for (int i = tokens.size() - 1; i >= 0; ++i) { */
|
||||
/* if (c.mkdir_r(passpath, 0755) == -1) break; */
|
||||
|
||||
/* size_t last_slash = passpath.find_last_of('/'); */
|
||||
/* if (last_slash != std::string::npos) passpath.erase(last_slash); */
|
||||
/* } */
|
||||
c.tmpcopy("/tmp/simpas-tmp.gpg", file);
|
||||
unlink("/tmp/simpas-tmp.gpg");
|
||||
return false;
|
||||
}
|
||||
|
||||
std::string msg =
|
||||
(lang.compare(0, 2, "en") == 0 ? "Edit success." : "編集に成功。");
|
||||
fl_alert("%s", msg.c_str());
|
||||
unlink("/tmp/simpas-tmp.gpg");
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
void Editpass::edit_cb(Fl_Widget *, void *data) {
|
||||
InputData *inputs = (InputData *)data;
|
||||
std::string lang = Common::getlang();
|
||||
|
||||
if (inputs) {
|
||||
file = inputs->txtin->value();
|
||||
if (file.empty()) {
|
||||
std::string err =
|
||||
(lang.compare(0, 2, "en") == 0 ?
|
||||
"Please fill in the path." :
|
||||
"パスをご入力下さい。");
|
||||
fl_alert("%s", err.c_str());
|
||||
return;
|
||||
}
|
||||
inputpass1 = inputs->pass1->value();
|
||||
if (inputpass1.empty()) {
|
||||
std::string err =
|
||||
(lang.compare(0, 2, "en") == 0 ?
|
||||
"Please fill in the password." :
|
||||
"パスワードをご入力下さい。");
|
||||
fl_alert("%s", err.c_str());
|
||||
return;
|
||||
}
|
||||
inputpass2 = inputs->pass2->value();
|
||||
if (inputpass2.empty()) {
|
||||
std::string err =
|
||||
(lang.compare(0, 2, "en") == 0 ?
|
||||
"Please fill in the password (confirm)." :
|
||||
"パスワード (確認)をご入力下さい。");
|
||||
fl_alert("%s", err.c_str());
|
||||
return;
|
||||
}
|
||||
|
||||
if (inputpass1 != inputpass2) {
|
||||
std::string err =
|
||||
(lang.compare(0, 2, "en") == 0 ?
|
||||
"Password does not match." :
|
||||
"パスワードが一致していません。");
|
||||
fl_alert("%s", err.c_str());
|
||||
return;
|
||||
}
|
||||
|
||||
if (exec(file, inputpass1)) {
|
||||
inputs->dialog->hide();
|
||||
}
|
||||
} else {
|
||||
std::string err =
|
||||
(lang.compare(0, 2, "en") == 0 ?
|
||||
"Please fill in all the fields." :
|
||||
"全てのフィールドをご入力下さい。");
|
||||
fl_alert("%s", err.c_str());
|
||||
}
|
||||
}
|
||||
|
||||
void Editpass::dialog_cb(Fl_Widget *w, void *data) {
|
||||
(void)w;
|
||||
(void)data;
|
||||
std::string lang = Common::getlang();
|
||||
Fl_Window *dialog = new Fl_Window(400, 160,
|
||||
(lang.compare(0, 2, "en") == 0 ? "Edit password" : "パスワードの編集"));
|
||||
|
||||
Fl_Input *txtin = new Fl_Input(150, 20, 180, 30,
|
||||
(lang.compare(0, 2, "en") == 0 ? "Path:" : "パス:"));
|
||||
Fl_Secret_Input *pass1 = new Fl_Secret_Input(150, 20, 180, 30,
|
||||
(lang.compare(0, 2, "en") == 0 ? "Password:" : "パスワード:"));
|
||||
Fl_Secret_Input *pass2 = new Fl_Secret_Input(150, 60, 180, 30,
|
||||
(lang.compare(0, 2, "en") == 0 ? "Password (confirm):" : "パスワード (確認):"));
|
||||
dialog->add(pass1);
|
||||
dialog->add(pass2);
|
||||
txtin->hide();
|
||||
txtin->value(edit.getFile().c_str());
|
||||
|
||||
InputData *inputs = new InputData();
|
||||
inputs->txtin = txtin;
|
||||
inputs->pass1 = pass1;
|
||||
inputs->pass2 = pass2;
|
||||
inputs->dialog = dialog;
|
||||
|
||||
Fl_Button *okbtn = new Fl_Button(60, 110, 80, 30, "OK");
|
||||
Fl_Button *cancelbtn = new Fl_Button(160, 110, 80, 30,
|
||||
(lang.compare(0, 2, "en") == 0 ? "Cancel" : "キャンセル"));
|
||||
|
||||
okbtn->callback(static_ok_cb, inputs);
|
||||
cancelbtn->callback(static_cancel_cb, dialog);
|
||||
|
||||
dialog->add(okbtn);
|
||||
dialog->add(cancelbtn);
|
||||
|
||||
dialog->end();
|
||||
dialog->set_modal();
|
||||
dialog->show();
|
||||
}
|
||||
|
||||
void Editpass::static_ok_cb(Fl_Widget *w, void *data) {
|
||||
(void)w;
|
||||
InputData *inputs = (InputData *)data;
|
||||
|
||||
edit.edit_cb(nullptr, inputs);
|
||||
std::vector<std::string> fpaths;
|
||||
std::string rdir = Common::getbasedir(false);
|
||||
std::string curpath = inputs->txtin->value();
|
||||
clearpaths(false, curpath);
|
||||
scandir(rdir, rdir, fpaths);
|
||||
updatelist();
|
||||
browse(curpath, false);
|
||||
}
|
||||
|
||||
void Editpass::static_cancel_cb(Fl_Widget *w, void *data) {
|
||||
((Editpass *)data)->cancel_cb(w, data);
|
||||
}
|
||||
Reference in New Issue
Block a user