diff options
author | Sven Moritz Hallberg <sm@khjk.org> | 2008-02-10 18:56:59 +0100 |
---|---|---|
committer | Sven Moritz Hallberg <sm@khjk.org> | 2008-02-10 18:56:59 +0100 |
commit | 94e7eb3aaefc753ea81ea8c9e38570407d4c9790 (patch) | |
tree | f30ecaa837ec76c14066591abf6f51eba9a74fe8 | |
parent | 8521b02a157c92b9f6cddca043d30f7659ec2c25 (diff) |
add 'otr keygen' command
-rw-r--r-- | otr.c | 35 | ||||
-rw-r--r-- | query.c | 10 |
2 files changed, 37 insertions, 8 deletions
@@ -52,6 +52,7 @@ void cmd_otr_disconnect(irc_t *irc, char **args); void cmd_otr_smp(irc_t *irc, char **args); void cmd_otr_trust(irc_t *irc, char **args); void cmd_otr_info(irc_t *irc, char **args); +void cmd_otr_keygen(irc_t *irc, char **args); /* void cmd_otr_forget(irc_t *irc, char **args); */ const command_t otr_commands[] = { @@ -60,6 +61,7 @@ const command_t otr_commands[] = { { "smp", 2, &cmd_otr_smp, 0 }, { "trust", 6, &cmd_otr_trust, 0 }, { "info", 0, &cmd_otr_info, 0 }, + { "keygen", 1, &cmd_otr_keygen, 0 }, /* { "forget", 1, &cmd_otr_forget, 0 }, */ @@ -770,6 +772,32 @@ void cmd_otr_info(irc_t *irc, char **args) } } +void cmd_otr_keygen(irc_t *irc, char **args) +{ + int i, n; + account_t *a; + + n = atoi(args[1]); + if(n<0 || (!n && strcmp(args[1], "0"))) { + irc_usermsg(irc, "%s: invalid account number", args[1]); + return; + } + + a = irc->accounts; + for(i=0; i<n && a; i++, a=a->next); + if(!a) { + irc_usermsg(irc, "%s: no such account", args[1]); + return; + } + + if(otrl_privkey_find(irc->otr_us, a->user, a->prpl->name)) { + char *s = g_strdup_printf("account %d already has a key, replace it?", n); + query_add(irc, a->ic, s, yes_keygen, no_keygen, a); + } else { + otr_keygen(irc, a->user, a->prpl->name); + } +} + /*** local helpers / subroutines: ***/ @@ -1219,13 +1247,8 @@ void no_keygen(gpointer w, void *data) { account_t *acc = (account_t *)data; - irc_usermsg(acc->irc, "proceeding without key, otr inoperable on %s/%s", + irc_usermsg(acc->irc, "keygen cancelled for %s/%s", acc->user, acc->prpl->name); - /* TODO: - irc_usermsg(acc->irc, "setting otr policy for %s/%s to \"never\"", - acc->user, acc->prpl->name); - set_setstr(acc->set, "otr_policy", "never"); - */ } @@ -139,12 +139,18 @@ void query_answer( irc_t *irc, query_t *q, int ans ) } if( ans ) { - imcb_log( q->ic, "Accepted: %s", q->question ); + if(q->ic) + imcb_log( q->ic, "Accepted: %s", q->question ); + else + irc_usermsg( irc, "Accepted: %s", q->question ); q->yes( NULL, q->data ); } else { - imcb_log( q->ic, "Rejected: %s", q->question ); + if(q->ic) + imcb_log( q->ic, "Rejected: %s", q->question ); + else + irc_usermsg( irc, "Rejected: %s", q->question ); q->no( NULL, q->data ); } q->data = NULL; |