]> diplodocus.org Git - nmh/blobdiff - uip/mhlogin.c
fdcompare.c: Move interface to own file.
[nmh] / uip / mhlogin.c
index 6ce414f201c1853e1404c57e8e4112d5d7556d5a..72a90b72f00f1cd1e26aac44f0fb004d913daf03 100644 (file)
@@ -1,5 +1,4 @@
-/*
- * mhlogin.c -- login to external (OAuth) services
+/* mhlogin.c -- login to external (OAuth) services
  *
  * This code is Copyright (c) 2014, by the authors of nmh.  See the
  * COPYRIGHT file in the root directory of the nmh distribution for
@@ -10,8 +9,15 @@
 #include <stdio.h>
 #include <string.h>
 
-#include <h/mh.h>
-#include <h/oauth.h>
+#include "h/mh.h"
+#include "sbr/ambigsw.h"
+#include "sbr/print_version.h"
+#include "sbr/print_help.h"
+#include "sbr/error.h"
+#include "h/done.h"
+#include "h/utils.h"
+#include "h/oauth.h"
+#include "sbr/lock_file.h"
 
 #define MHLOGIN_SWITCHES \
     X("user username", 0, USERSW) \
@@ -35,13 +41,12 @@ DEFINE_SWITCH_ARRAY(MHLOGIN, switches);
 static char *
 geta (void)
 {
-    char *cp;
     static char line[BUFSIZ];
 
     if (fgets(line, sizeof(line), stdin) == NULL)
        done (1);
-    if ((cp = strchr(line, '\n')))
-       *cp = 0;
+    trim_suffix_c(line, '\n');
+
     return line;
 }
 
@@ -56,25 +61,25 @@ do_login(const char *svc, const char *user, const char *browser, int snoop)
     const char *url;
 
     if (svc == NULL) {
-        adios(NULL, "missing -authservice switch");
+        die("missing -authservice switch");
     }
 
     if (user == NULL) {
-        adios(NULL, "missing -user switch");
+        die("missing -user switch");
     }
 
     if (!mh_oauth_new(&ctx, svc)) {
-        adios(NULL, mh_oauth_get_err_string(ctx));
+        die("%s", mh_oauth_get_err_string(ctx));
     }
 
     if (snoop) {
         mh_oauth_log_to(stderr, ctx);
     }
 
-    fn = getcpy(mh_oauth_cred_fn(ctx));
+    fn = mh_oauth_cred_fn(svc);
 
     if ((url = mh_oauth_get_authorize_url(ctx)) == NULL) {
-      adios(NULL, mh_oauth_get_err_string(ctx));
+      die("%s", mh_oauth_get_err_string(ctx));
     }
 
     if (browser) {
@@ -97,20 +102,20 @@ do_login(const char *svc, const char *user, const char *browser, int snoop)
                " to access %s:\n\n%s\n\n",
                mh_oauth_svc_display_name(ctx), url);
     }
-    printf("Enter the authorization code: ");
+    fputs("Enter the authorization code: ", stdout);
     fflush(stdout);
     code = geta();
 
-    while (strlen(code) == 0 ||
+    while (!*code ||
            ((cred = mh_oauth_authorize(code, ctx)) == NULL
             && mh_oauth_get_err_code(ctx) == MH_OAUTH_BAD_GRANT)) {
-      printf(strlen(code) == 0  ?  "Empty code; try again? "  :  "Code rejected; try again? ");
+      printf(!*code  ?  "Empty code; try again? "  :  "Code rejected; try again? ");
       fflush(stdout);
       code = geta();
     }
     if (cred == NULL) {
-      advise(NULL, "error exchanging code for OAuth2 token");
-      adios(NULL, mh_oauth_get_err_string(ctx));
+      inform("error exchanging code for OAuth2 token");
+      die("%s", mh_oauth_get_err_string(ctx));
     }
 
     cred_file = lkfopendata(fn, "r+", &failed_to_lock);
@@ -121,7 +126,7 @@ do_login(const char *svc, const char *user, const char *browser, int snoop)
       adios(fn, "oops");
     }
     if (!mh_oauth_cred_save(cred_file, cred, user)) {
-      adios(NULL, mh_oauth_get_err_string(ctx));
+      die("%s", mh_oauth_get_err_string(ctx));
     }
     if (lkfclosedata(cred_file, fn) != 0) {
       adios (fn, "oops");
@@ -142,7 +147,7 @@ main(int argc, char **argv)
     const char *user = NULL, *saslmech = NULL, *svc = NULL, *browser = NULL;
     int snoop = 0;
 
-    if (nmh_init(argv[0], 1)) { return 1; }
+    if (nmh_init(argv[0], true, true)) { return 1; }
 
     arguments = getarguments (invo_name, argc, argv, 1);
     argp = arguments;
@@ -155,7 +160,7 @@ main(int argc, char **argv)
                ambigsw (cp, switches);
                done (1);
            case UNKWNSW:
-               adios (NULL, "-%s unknown", cp);
+               die("-%s unknown", cp);
 
            case HELPSW:
                snprintf(help, sizeof(help), "%s [switches]",
@@ -168,22 +173,22 @@ main(int argc, char **argv)
 
            case USERSW:
                if (!(user = *argp++) || *user == '-')
-                   adios (NULL, "missing argument to %s", argp[-2]);
+                   die("missing argument to %s", argp[-2]);
                continue;
 
            case SASLMECHSW:
                if (!(saslmech = *argp++) || *saslmech == '-')
-                   adios (NULL, "missing argument to %s", argp[-2]);
+                   die("missing argument to %s", argp[-2]);
                continue;
 
            case AUTHSERVICESW:
                 if (!(svc = *argp++) || *svc == '-')
-                    adios (NULL, "missing argument to %s", argp[-2]);
+                    die("missing argument to %s", argp[-2]);
                 continue;
 
            case BROWSERSW:
                 if (!(browser = *argp++) || *browser == '-')
-                    adios (NULL, "missing argument to %s", argp[-2]);
+                    die("missing argument to %s", argp[-2]);
                 continue;
 
             case SNOOPSW:
@@ -191,12 +196,12 @@ main(int argc, char **argv)
                 continue;
            }
        }
-        adios(NULL, "extraneous arguments");
+        die("extraneous arguments");
     }
 
     if (saslmech  &&  strcasecmp(saslmech, "xoauth2")) {
         /* xoauth is assumed */
-        adios(NULL, "only -saslmech xoauth2 is supported");
+        die("only -saslmech xoauth2 is supported");
     }
     free(arguments);
 
@@ -206,7 +211,7 @@ main(int argc, char **argv)
     NMH_UNUSED(svc);
     NMH_UNUSED(browser);
     NMH_UNUSED(snoop);
-    adios(NULL, "not built with OAuth support");
+    die("not built with OAuth support");
     return 1;
 #endif
 }