0.9.6claws74
[claws.git] / src / pgpmime.c
index b1c76d02a47b0be4cd49d95cc86729c56d52ef90..3719895c2f66144a0bcafeb80fed898c408a4188 100644 (file)
@@ -32,6 +32,7 @@
 #include "procmime.h"
 #include "pgpmime.h"
 #include "sgpgme.h"
+#include "prefs_common.h"
 
 typedef struct _PrivacyDataPGP PrivacyDataPGP;
 
@@ -47,6 +48,8 @@ struct _PrivacyDataPGP
 
 static PrivacySystem pgpmime_system;
 
+static gint pgpmime_check_signature(MimeInfo *mimeinfo);
+
 static PrivacyDataPGP *pgpmime_new_privacydata()
 {
        PrivacyDataPGP *data;
@@ -112,6 +115,9 @@ static gboolean pgpmime_is_signed(MimeInfo *mimeinfo)
        }
        data->done_sigtest = TRUE;
        data->is_signed = TRUE;
+
+       if (prefs_common.auto_check_signatures)
+               pgpmime_check_signature(mimeinfo);
        
        return TRUE;
 }
@@ -172,8 +178,6 @@ static gint pgpmime_check_signature(MimeInfo *mimeinfo)
        gpgme_data_release(textdata);
        g_string_free(textstr, TRUE);
        
-       printf("result: %d\n", data->sigstatus);
-       
        return 0;
 }
 
@@ -195,6 +199,43 @@ static gchar *pgpmime_get_sig_info_short(MimeInfo *mimeinfo)
        return sgpgme_sigstat_info_short(data->ctx, data->sigstatus);
 }
 
+static gchar *pgpmime_get_sig_info_full(MimeInfo *mimeinfo)
+{
+       PrivacyDataPGP *data = (PrivacyDataPGP *) mimeinfo->privacy;
+       
+       g_return_val_if_fail(data != NULL, g_strdup("Error"));
+
+       return sgpgme_sigstat_info_full(data->ctx, data->sigstatus);
+}
+
+static gboolean pgpmime_is_encrypted(MimeInfo *mimeinfo)
+{
+       MimeInfo *tmpinfo;
+       
+       if (mimeinfo->type != MIMETYPE_MULTIPART)
+               return FALSE;
+       if (g_strcasecmp(mimeinfo->subtype, "encrypted"))
+               return FALSE;
+       if (g_strcasecmp(procmime_mimeinfo_get_parameter(mimeinfo, "protocol"), "application/pgp-encrypted"))
+               return FALSE;
+       if (g_node_n_children(mimeinfo->node) != 2)
+               return FALSE;
+       
+       tmpinfo = (MimeInfo *) g_node_nth_child(mimeinfo->node, 0)->data;
+       if (tmpinfo->type != MIMETYPE_APPLICATION)
+               return FALSE;
+       if (g_strcasecmp(tmpinfo->subtype, "pgp-encrypted"))
+               return FALSE;
+       
+       tmpinfo = (MimeInfo *) g_node_nth_child(mimeinfo->node, 1)->data;
+       if (tmpinfo->type != MIMETYPE_APPLICATION)
+               return FALSE;
+       if (g_strcasecmp(tmpinfo->subtype, "octet-stream"))
+               return FALSE;
+       
+       return TRUE;
+}
+
 static PrivacySystem pgpmime_system = {
        "PGP/Mime",                     /* name */
 
@@ -204,10 +245,10 @@ static PrivacySystem pgpmime_system = {
        pgpmime_check_signature,        /* check_signature(MimeInfo *) */
        pgpmime_get_sig_status,         /* get_sig_status(MimeInfo *) */
        pgpmime_get_sig_info_short,     /* get_sig_info_short(MimeInfo *) */
-       NULL,                           /* get_sig_info_full(MimeInfo *) */
+       pgpmime_get_sig_info_full,      /* get_sig_info_full(MimeInfo *) */
 
        /* NOT YET */
-       NULL,                           /* is_encrypted(MimeInfo *) */
+       pgpmime_is_encrypted,           /* is_encrypted(MimeInfo *) */
        NULL,                           /* decrypt(MimeInfo *) */
 };