ThisAddIn.cs
author Dean Looyengoed
Tue, 29 Mar 2016 22:23:56 +0200
changeset 738 ac649e82fd98
parent 726 43961a95cb75
child 743 5bad37bca12f
permissions -rw-r--r--
Create and save the sent mail item exactly the same as how it was composed. This will then be stored encrypted or unencrypted based on account trust.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
155
cda43d18bcd3 Add state to handshake form and decouple it from the encryption status panel
Dean Looyengoed
parents: 144
diff changeset
     1
using Microsoft.Win32;
cda43d18bcd3 Add state to handshake form and decouple it from the encryption status panel
Dean Looyengoed
parents: 144
diff changeset
     2
using pEpCOMServerAdapterLib;
cda43d18bcd3 Add state to handshake form and decouple it from the encryption status panel
Dean Looyengoed
parents: 144
diff changeset
     3
using System;
0
6dfec3b090d6 initial commit
vb
parents:
diff changeset
     4
using System.Collections.Generic;
155
cda43d18bcd3 Add state to handshake form and decouple it from the encryption status panel
Dean Looyengoed
parents: 144
diff changeset
     5
using System.Globalization;
0
6dfec3b090d6 initial commit
vb
parents:
diff changeset
     6
using System.Runtime.InteropServices;
714
761f853c4c0f For all Myself identities, calculate user ID using a hash of the windows Environment.UserName;
Dean Looyengoed
parents: 686
diff changeset
     7
using System.Security.Cryptography;
761f853c4c0f For all Myself identities, calculate user ID using a hash of the windows Environment.UserName;
Dean Looyengoed
parents: 686
diff changeset
     8
using System.Text;
0
6dfec3b090d6 initial commit
vb
parents:
diff changeset
     9
using System.Threading;
47
d3b5164cc922 read in extra keys
Volker Birk <vb@pep-project.org>
parents: 46
diff changeset
    10
using System.Windows.Forms;
714
761f853c4c0f For all Myself identities, calculate user ID using a hash of the windows Environment.UserName;
Dean Looyengoed
parents: 686
diff changeset
    11
using Office = Microsoft.Office.Core;
0
6dfec3b090d6 initial commit
vb
parents:
diff changeset
    12
using Outlook = Microsoft.Office.Interop.Outlook;
6dfec3b090d6 initial commit
vb
parents:
diff changeset
    13
6dfec3b090d6 initial commit
vb
parents:
diff changeset
    14
namespace pEp
6dfec3b090d6 initial commit
vb
parents:
diff changeset
    15
{
6dfec3b090d6 initial commit
vb
parents:
diff changeset
    16
    public partial class ThisAddIn
6dfec3b090d6 initial commit
vb
parents:
diff changeset
    17
    {
190
a685c30e07d2 Refactor/comment/partial rewrite of the ThisAddIn class.
Dean Looyengoed
parents: 168
diff changeset
    18
        #region VSTO generated code
a685c30e07d2 Refactor/comment/partial rewrite of the ThisAddIn class.
Dean Looyengoed
parents: 168
diff changeset
    19
a685c30e07d2 Refactor/comment/partial rewrite of the ThisAddIn class.
Dean Looyengoed
parents: 168
diff changeset
    20
        /// <summary>
a685c30e07d2 Refactor/comment/partial rewrite of the ThisAddIn class.
Dean Looyengoed
parents: 168
diff changeset
    21
        /// Required method for Designer support - do not modify
a685c30e07d2 Refactor/comment/partial rewrite of the ThisAddIn class.
Dean Looyengoed
parents: 168
diff changeset
    22
        /// the contents of this method with the code editor.
a685c30e07d2 Refactor/comment/partial rewrite of the ThisAddIn class.
Dean Looyengoed
parents: 168
diff changeset
    23
        /// </summary>
a685c30e07d2 Refactor/comment/partial rewrite of the ThisAddIn class.
Dean Looyengoed
parents: 168
diff changeset
    24
        private void InternalStartup()
a685c30e07d2 Refactor/comment/partial rewrite of the ThisAddIn class.
Dean Looyengoed
parents: 168
diff changeset
    25
        {
a685c30e07d2 Refactor/comment/partial rewrite of the ThisAddIn class.
Dean Looyengoed
parents: 168
diff changeset
    26
            this.Startup += new System.EventHandler(ThisAddIn_Startup);
a685c30e07d2 Refactor/comment/partial rewrite of the ThisAddIn class.
Dean Looyengoed
parents: 168
diff changeset
    27
            this.Shutdown += new System.EventHandler(ThisAddIn_Shutdown);
a685c30e07d2 Refactor/comment/partial rewrite of the ThisAddIn class.
Dean Looyengoed
parents: 168
diff changeset
    28
        }
201
9e0548fa3942 Code reformatting.
Markus Schaber <markus@pep-security.net>
parents: 191
diff changeset
    29
190
a685c30e07d2 Refactor/comment/partial rewrite of the ThisAddIn class.
Dean Looyengoed
parents: 168
diff changeset
    30
        #endregion
a685c30e07d2 Refactor/comment/partial rewrite of the ThisAddIn class.
Dean Looyengoed
parents: 168
diff changeset
    31
451
7dd0bb192256 Standardize all option names and implement subject encryption option.
Dean Looyengoed
parents: 450
diff changeset
    32
        private const string REG_KEY_SOFTWARE                         = "Software";
7dd0bb192256 Standardize all option names and implement subject encryption option.
Dean Looyengoed
parents: 450
diff changeset
    33
        private const string REG_KEY_PEP                              = "pEp";
515
ed828de6d215 Read IsTNEFDisabled from the registry and display as read-only in options.
Dean Looyengoed
parents: 513
diff changeset
    34
        private const string REG_KEY_MICROSOFT_OFFICE                 = "Microsoft\\Office";
588
2d12fb5ee4fc Add developer mode to config and options state.
Dean Looyengoed
parents: 587
diff changeset
    35
        private const string REG_KEY_ENCRYPTED_ACCOUNTS_LIST          = "EncryptedAccountsList";
649
ad161bea020a Add AccountWhitelist and read from registry.
Dean Looyengoed
parents: 640
diff changeset
    36
        private const string REG_NAME_ACCOUNT_WHITELIST               = "AccountWhitelist";
453
4b8c31936610 Add crash report config options and read from registry.
Dean Looyengoed
parents: 452
diff changeset
    37
        private const string REG_NAME_CRASH_REPORT_SEND_ADDRESS       = "CrashReportSendAddress";
451
7dd0bb192256 Standardize all option names and implement subject encryption option.
Dean Looyengoed
parents: 450
diff changeset
    38
        private const string REG_NAME_EXTRA_KEYS                      = "ExtraKeys";
611
70127a03488a Alphabetize order of properties.
Dean Looyengoed
parents: 608
diff changeset
    39
        private const string REG_NAME_IS_CRASH_REPORT_VISIBLE         = "IsCrashReportVisible";
70127a03488a Alphabetize order of properties.
Dean Looyengoed
parents: 608
diff changeset
    40
        private const string REG_NAME_IS_DEVELOPER_MODE_ENABLED       = "IsDeveloperModeEnabled";
70127a03488a Alphabetize order of properties.
Dean Looyengoed
parents: 608
diff changeset
    41
        private const string REG_NAME_IS_ENCRYPT_ALL_ACCOUNTS_ENABLED = "IsEncryptAllAccountsEnabled";
70127a03488a Alphabetize order of properties.
Dean Looyengoed
parents: 608
diff changeset
    42
        private const string REG_NAME_IS_KEY_SERVER_USED              = "IsKeyServerUsed";
70127a03488a Alphabetize order of properties.
Dean Looyengoed
parents: 608
diff changeset
    43
        private const string REG_NAME_IS_PASSIVE_MODE_ENABLED         = "IsPassiveModeEnabled";
70127a03488a Alphabetize order of properties.
Dean Looyengoed
parents: 608
diff changeset
    44
        private const string REG_NAME_IS_TNEF_DISABLED                = "DisableTNEF"; // Name defined by Microsoft
70127a03488a Alphabetize order of properties.
Dean Looyengoed
parents: 608
diff changeset
    45
        private const string REG_NAME_IS_UNENCRYPTED_SUBJECT_ENABLED  = "IsUnencryptedSubjectEnabled";
70127a03488a Alphabetize order of properties.
Dean Looyengoed
parents: 608
diff changeset
    46
        private const string REG_NAME_IS_VERBOSE_LOGGING_ENABLED      = "IsVerboseLoggingEnabled";
206
630f24c2cd54 Add constants for pEp registry entry names and keys.
Dean Looyengoed
parents: 203
diff changeset
    47
660
e5346cda03ff Merge GlobalConst and GlobalExceptionHandler into only one Global class.
Dean Looyengoed
parents: 659
diff changeset
    48
        private string[]                 _AccountWhitelist            = Global.HARDCODED_ACCOUNT_WHITELIST;
e5346cda03ff Merge GlobalConst and GlobalExceptionHandler into only one Global class.
Dean Looyengoed
parents: 659
diff changeset
    49
        private string                   _CrashReportSendAddress      = Global.CRASH_REPORT_SEND_ADDRESS_DEFAULT;
451
7dd0bb192256 Standardize all option names and implement subject encryption option.
Dean Looyengoed
parents: 450
diff changeset
    50
        private Dictionary<string, bool> _EncryptedAccountsList       = new Dictionary<string, bool>();
611
70127a03488a Alphabetize order of properties.
Dean Looyengoed
parents: 608
diff changeset
    51
        private string[]                 _ExtraKeys                   = null;
660
e5346cda03ff Merge GlobalConst and GlobalExceptionHandler into only one Global class.
Dean Looyengoed
parents: 659
diff changeset
    52
        private bool                     _IsCrashReportVisible        = Global.IS_CRASH_REPORT_VISIBLE_DEFAULT;
e5346cda03ff Merge GlobalConst and GlobalExceptionHandler into only one Global class.
Dean Looyengoed
parents: 659
diff changeset
    53
        private bool                     _IsDeveloperModeEnabled      = Global.IS_DEVELOPER_MODE_ENABLED_DEFAULT;
e5346cda03ff Merge GlobalConst and GlobalExceptionHandler into only one Global class.
Dean Looyengoed
parents: 659
diff changeset
    54
        private bool                     _IsEncryptAllAccountsEnabled = Global.IS_ENCRYPT_ALL_ACCOUNTS_ENABLED_DEFAULT;
e5346cda03ff Merge GlobalConst and GlobalExceptionHandler into only one Global class.
Dean Looyengoed
parents: 659
diff changeset
    55
        private bool                     _IsKeyServerUsed             = Global.IS_KEY_SERVER_USED_DEFAULT;
e5346cda03ff Merge GlobalConst and GlobalExceptionHandler into only one Global class.
Dean Looyengoed
parents: 659
diff changeset
    56
        private bool                     _IsPassiveModeEnabled        = Global.IS_PASSIVE_MODE_ENABLED_DEFAULT;
e5346cda03ff Merge GlobalConst and GlobalExceptionHandler into only one Global class.
Dean Looyengoed
parents: 659
diff changeset
    57
        private bool                     _IsTNEFDisabled              = Global.IS_TNEF_DISABLED_DEFAULT;
e5346cda03ff Merge GlobalConst and GlobalExceptionHandler into only one Global class.
Dean Looyengoed
parents: 659
diff changeset
    58
        private bool                     _IsUnencryptedSubjectEnabled = Global.IS_UNENCRYPTED_SUBJECT_ENABLED_DEFAULT;
e5346cda03ff Merge GlobalConst and GlobalExceptionHandler into only one Global class.
Dean Looyengoed
parents: 659
diff changeset
    59
        private bool                     _IsVerboseLoggingEnabled     = Global.IS_VERBOSE_LOGGING_ENABLED_DEFAULT;
611
70127a03488a Alphabetize order of properties.
Dean Looyengoed
parents: 608
diff changeset
    60
        private static pEpEngine         _pEp                         = null;
451
7dd0bb192256 Standardize all option names and implement subject encryption option.
Dean Looyengoed
parents: 450
diff changeset
    61
        private Outlook.Folder           _TempFolder                  = null;
64
5111a11eed7f replacing TextMessage object with struct
Volker Birk <vb@pep-project.org>
parents: 61
diff changeset
    62
608
38ba4b8308f2 Update GetUserID method to cache IDs, skip Exchange servers and create new contacts if necessary.
Dean Looyengoed
parents: 607
diff changeset
    63
        private bool                       initialized      = false;
38ba4b8308f2 Update GetUserID method to cache IDs, skip Exchange servers and create new contacts if necessary.
Dean Looyengoed
parents: 607
diff changeset
    64
        private FormOptions.State          lastOptionsState = null;
38ba4b8308f2 Update GetUserID method to cache IDs, skip Exchange servers and create new contacts if necessary.
Dean Looyengoed
parents: 607
diff changeset
    65
        private List<string>               doNotProcessList = new List<string>();
38ba4b8308f2 Update GetUserID method to cache IDs, skip Exchange servers and create new contacts if necessary.
Dean Looyengoed
parents: 607
diff changeset
    66
        private Dictionary<string, string> userIDCache      = new Dictionary<string, string>();
190
a685c30e07d2 Refactor/comment/partial rewrite of the ThisAddIn class.
Dean Looyengoed
parents: 168
diff changeset
    67
a685c30e07d2 Refactor/comment/partial rewrite of the ThisAddIn class.
Dean Looyengoed
parents: 168
diff changeset
    68
        /**************************************************************
a685c30e07d2 Refactor/comment/partial rewrite of the ThisAddIn class.
Dean Looyengoed
parents: 168
diff changeset
    69
         * 
a685c30e07d2 Refactor/comment/partial rewrite of the ThisAddIn class.
Dean Looyengoed
parents: 168
diff changeset
    70
         * Property Accessors
a685c30e07d2 Refactor/comment/partial rewrite of the ThisAddIn class.
Dean Looyengoed
parents: 168
diff changeset
    71
         * 
a685c30e07d2 Refactor/comment/partial rewrite of the ThisAddIn class.
Dean Looyengoed
parents: 168
diff changeset
    72
         *************************************************************/
a685c30e07d2 Refactor/comment/partial rewrite of the ThisAddIn class.
Dean Looyengoed
parents: 168
diff changeset
    73
a685c30e07d2 Refactor/comment/partial rewrite of the ThisAddIn class.
Dean Looyengoed
parents: 168
diff changeset
    74
        /// <summary>
650
568a3a9c2d33 Add account whitelist property and trim when making the list.
Dean Looyengoed
parents: 649
diff changeset
    75
        /// Gets the account whitelist as the combination of hardcoded and registry values.
568a3a9c2d33 Add account whitelist property and trim when making the list.
Dean Looyengoed
parents: 649
diff changeset
    76
        /// </summary>
568a3a9c2d33 Add account whitelist property and trim when making the list.
Dean Looyengoed
parents: 649
diff changeset
    77
        public string[] AccountWhitelist
568a3a9c2d33 Add account whitelist property and trim when making the list.
Dean Looyengoed
parents: 649
diff changeset
    78
        {
568a3a9c2d33 Add account whitelist property and trim when making the list.
Dean Looyengoed
parents: 649
diff changeset
    79
            get { return (this._AccountWhitelist); }
568a3a9c2d33 Add account whitelist property and trim when making the list.
Dean Looyengoed
parents: 649
diff changeset
    80
        }
568a3a9c2d33 Add account whitelist property and trim when making the list.
Dean Looyengoed
parents: 649
diff changeset
    81
568a3a9c2d33 Add account whitelist property and trim when making the list.
Dean Looyengoed
parents: 649
diff changeset
    82
        /// <summary>
611
70127a03488a Alphabetize order of properties.
Dean Looyengoed
parents: 608
diff changeset
    83
        /// Gets the email address to send any crash report to.
70127a03488a Alphabetize order of properties.
Dean Looyengoed
parents: 608
diff changeset
    84
        /// Can only be set from the registry.
70127a03488a Alphabetize order of properties.
Dean Looyengoed
parents: 608
diff changeset
    85
        /// </summary>
70127a03488a Alphabetize order of properties.
Dean Looyengoed
parents: 608
diff changeset
    86
        public string CrashReportSendAddress
70127a03488a Alphabetize order of properties.
Dean Looyengoed
parents: 608
diff changeset
    87
        {
70127a03488a Alphabetize order of properties.
Dean Looyengoed
parents: 608
diff changeset
    88
            get { return (this._CrashReportSendAddress); }
70127a03488a Alphabetize order of properties.
Dean Looyengoed
parents: 608
diff changeset
    89
        }
70127a03488a Alphabetize order of properties.
Dean Looyengoed
parents: 608
diff changeset
    90
70127a03488a Alphabetize order of properties.
Dean Looyengoed
parents: 608
diff changeset
    91
        /// <summary>
203
44dac4bb337a Complete the state management in both the options form and this add-in.
Dean Looyengoed
parents: 201
diff changeset
    92
        /// Gets the encrypted accounts list (as a dictionary) used to show which accounts are encrypted.
44dac4bb337a Complete the state management in both the options form and this add-in.
Dean Looyengoed
parents: 201
diff changeset
    93
        /// This is only those accounts which existed already in the registry plus any added 
44dac4bb337a Complete the state management in both the options form and this add-in.
Dean Looyengoed
parents: 201
diff changeset
    94
        /// from saving the options form.
44dac4bb337a Complete the state management in both the options form and this add-in.
Dean Looyengoed
parents: 201
diff changeset
    95
        /// </summary>
44dac4bb337a Complete the state management in both the options form and this add-in.
Dean Looyengoed
parents: 201
diff changeset
    96
        public Dictionary<string, bool> EncryptedAccountsList
44dac4bb337a Complete the state management in both the options form and this add-in.
Dean Looyengoed
parents: 201
diff changeset
    97
        {
44dac4bb337a Complete the state management in both the options form and this add-in.
Dean Looyengoed
parents: 201
diff changeset
    98
            get { return (this._EncryptedAccountsList); }
44dac4bb337a Complete the state management in both the options form and this add-in.
Dean Looyengoed
parents: 201
diff changeset
    99
        }
44dac4bb337a Complete the state management in both the options form and this add-in.
Dean Looyengoed
parents: 201
diff changeset
   100
44dac4bb337a Complete the state management in both the options form and this add-in.
Dean Looyengoed
parents: 201
diff changeset
   101
        /// <summary>
611
70127a03488a Alphabetize order of properties.
Dean Looyengoed
parents: 608
diff changeset
   102
        /// Gets any extra encryption keys that were loaded from the registry.
70127a03488a Alphabetize order of properties.
Dean Looyengoed
parents: 608
diff changeset
   103
        /// Can only be set from the registry.
70127a03488a Alphabetize order of properties.
Dean Looyengoed
parents: 608
diff changeset
   104
        /// </summary>
70127a03488a Alphabetize order of properties.
Dean Looyengoed
parents: 608
diff changeset
   105
        public string[] ExtraKeys
70127a03488a Alphabetize order of properties.
Dean Looyengoed
parents: 608
diff changeset
   106
        {
70127a03488a Alphabetize order of properties.
Dean Looyengoed
parents: 608
diff changeset
   107
            get { return (this._ExtraKeys); }
70127a03488a Alphabetize order of properties.
Dean Looyengoed
parents: 608
diff changeset
   108
        }
70127a03488a Alphabetize order of properties.
Dean Looyengoed
parents: 608
diff changeset
   109
70127a03488a Alphabetize order of properties.
Dean Looyengoed
parents: 608
diff changeset
   110
        /// <summary>
70127a03488a Alphabetize order of properties.
Dean Looyengoed
parents: 608
diff changeset
   111
        /// Gets whether the crash report window is visible to the user.
70127a03488a Alphabetize order of properties.
Dean Looyengoed
parents: 608
diff changeset
   112
        /// Can only be set from the registry.
70127a03488a Alphabetize order of properties.
Dean Looyengoed
parents: 608
diff changeset
   113
        /// </summary>
70127a03488a Alphabetize order of properties.
Dean Looyengoed
parents: 608
diff changeset
   114
        public bool IsCrashReportVisible
70127a03488a Alphabetize order of properties.
Dean Looyengoed
parents: 608
diff changeset
   115
        {
70127a03488a Alphabetize order of properties.
Dean Looyengoed
parents: 608
diff changeset
   116
            get { return (this._IsCrashReportVisible); }
70127a03488a Alphabetize order of properties.
Dean Looyengoed
parents: 608
diff changeset
   117
        }
70127a03488a Alphabetize order of properties.
Dean Looyengoed
parents: 608
diff changeset
   118
70127a03488a Alphabetize order of properties.
Dean Looyengoed
parents: 608
diff changeset
   119
        /// <summary>
70127a03488a Alphabetize order of properties.
Dean Looyengoed
parents: 608
diff changeset
   120
        /// Gets whether developer mode is enabled.
70127a03488a Alphabetize order of properties.
Dean Looyengoed
parents: 608
diff changeset
   121
        /// Can only be set from the registry.
70127a03488a Alphabetize order of properties.
Dean Looyengoed
parents: 608
diff changeset
   122
        /// </summary>
70127a03488a Alphabetize order of properties.
Dean Looyengoed
parents: 608
diff changeset
   123
        public bool IsDeveloperModeEnabled
70127a03488a Alphabetize order of properties.
Dean Looyengoed
parents: 608
diff changeset
   124
        {
70127a03488a Alphabetize order of properties.
Dean Looyengoed
parents: 608
diff changeset
   125
            get { return (this._IsDeveloperModeEnabled); }
70127a03488a Alphabetize order of properties.
Dean Looyengoed
parents: 608
diff changeset
   126
        }
70127a03488a Alphabetize order of properties.
Dean Looyengoed
parents: 608
diff changeset
   127
70127a03488a Alphabetize order of properties.
Dean Looyengoed
parents: 608
diff changeset
   128
        /// <summary>
451
7dd0bb192256 Standardize all option names and implement subject encryption option.
Dean Looyengoed
parents: 450
diff changeset
   129
        /// Gets or sets whether data should be stored encrypted for all accounts.
7dd0bb192256 Standardize all option names and implement subject encryption option.
Dean Looyengoed
parents: 450
diff changeset
   130
        /// </summary>
7dd0bb192256 Standardize all option names and implement subject encryption option.
Dean Looyengoed
parents: 450
diff changeset
   131
        public bool IsEncryptAllAccountsEnabled
7dd0bb192256 Standardize all option names and implement subject encryption option.
Dean Looyengoed
parents: 450
diff changeset
   132
        {
7dd0bb192256 Standardize all option names and implement subject encryption option.
Dean Looyengoed
parents: 450
diff changeset
   133
            get { return (this._IsEncryptAllAccountsEnabled); }
7dd0bb192256 Standardize all option names and implement subject encryption option.
Dean Looyengoed
parents: 450
diff changeset
   134
            set { this._IsEncryptAllAccountsEnabled = value; }
7dd0bb192256 Standardize all option names and implement subject encryption option.
Dean Looyengoed
parents: 450
diff changeset
   135
        }
7dd0bb192256 Standardize all option names and implement subject encryption option.
Dean Looyengoed
parents: 450
diff changeset
   136
7dd0bb192256 Standardize all option names and implement subject encryption option.
Dean Looyengoed
parents: 450
diff changeset
   137
        /// <summary>
7dd0bb192256 Standardize all option names and implement subject encryption option.
Dean Looyengoed
parents: 450
diff changeset
   138
        /// Gets or sets whether to use a key server.
7dd0bb192256 Standardize all option names and implement subject encryption option.
Dean Looyengoed
parents: 450
diff changeset
   139
        /// When set, this also updates the pEp engine.
7dd0bb192256 Standardize all option names and implement subject encryption option.
Dean Looyengoed
parents: 450
diff changeset
   140
        /// </summary>
7dd0bb192256 Standardize all option names and implement subject encryption option.
Dean Looyengoed
parents: 450
diff changeset
   141
        public bool IsKeyServerUsed
190
a685c30e07d2 Refactor/comment/partial rewrite of the ThisAddIn class.
Dean Looyengoed
parents: 168
diff changeset
   142
        {
451
7dd0bb192256 Standardize all option names and implement subject encryption option.
Dean Looyengoed
parents: 450
diff changeset
   143
            get { return (this._IsKeyServerUsed); }
7dd0bb192256 Standardize all option names and implement subject encryption option.
Dean Looyengoed
parents: 450
diff changeset
   144
            set
7dd0bb192256 Standardize all option names and implement subject encryption option.
Dean Looyengoed
parents: 450
diff changeset
   145
            {
7dd0bb192256 Standardize all option names and implement subject encryption option.
Dean Looyengoed
parents: 450
diff changeset
   146
                this._IsKeyServerUsed = value;
7dd0bb192256 Standardize all option names and implement subject encryption option.
Dean Looyengoed
parents: 450
diff changeset
   147
7dd0bb192256 Standardize all option names and implement subject encryption option.
Dean Looyengoed
parents: 450
diff changeset
   148
                // Start/stop key server
7dd0bb192256 Standardize all option names and implement subject encryption option.
Dean Looyengoed
parents: 450
diff changeset
   149
                if (this._IsKeyServerUsed)
7dd0bb192256 Standardize all option names and implement subject encryption option.
Dean Looyengoed
parents: 450
diff changeset
   150
                {
7dd0bb192256 Standardize all option names and implement subject encryption option.
Dean Looyengoed
parents: 450
diff changeset
   151
                    ThisAddIn.pEp.start_keyserver_lookup();
7dd0bb192256 Standardize all option names and implement subject encryption option.
Dean Looyengoed
parents: 450
diff changeset
   152
                }
7dd0bb192256 Standardize all option names and implement subject encryption option.
Dean Looyengoed
parents: 450
diff changeset
   153
                else
7dd0bb192256 Standardize all option names and implement subject encryption option.
Dean Looyengoed
parents: 450
diff changeset
   154
                {
7dd0bb192256 Standardize all option names and implement subject encryption option.
Dean Looyengoed
parents: 450
diff changeset
   155
                    ThisAddIn.pEp.stop_keyserver_lookup();
7dd0bb192256 Standardize all option names and implement subject encryption option.
Dean Looyengoed
parents: 450
diff changeset
   156
                }
7dd0bb192256 Standardize all option names and implement subject encryption option.
Dean Looyengoed
parents: 450
diff changeset
   157
            }
190
a685c30e07d2 Refactor/comment/partial rewrite of the ThisAddIn class.
Dean Looyengoed
parents: 168
diff changeset
   158
        }
a685c30e07d2 Refactor/comment/partial rewrite of the ThisAddIn class.
Dean Looyengoed
parents: 168
diff changeset
   159
a685c30e07d2 Refactor/comment/partial rewrite of the ThisAddIn class.
Dean Looyengoed
parents: 168
diff changeset
   160
        /// <summary>
598
e1ff494dc53b Implement passive mode which can only be enabled from the registry.
Dean Looyengoed
parents: 597
diff changeset
   161
        /// Gets or sets whether passive mode is enabled.
e1ff494dc53b Implement passive mode which can only be enabled from the registry.
Dean Looyengoed
parents: 597
diff changeset
   162
        /// When set, this also updates the pEp engine.
e1ff494dc53b Implement passive mode which can only be enabled from the registry.
Dean Looyengoed
parents: 597
diff changeset
   163
        /// Passive mode will not attach keys unless keys are received.
452
9be34118b38f Add IsSendWithoutKeyEnabled config option and read from registry.
Dean Looyengoed
parents: 451
diff changeset
   164
        /// </summary>
598
e1ff494dc53b Implement passive mode which can only be enabled from the registry.
Dean Looyengoed
parents: 597
diff changeset
   165
        public bool IsPassiveModeEnabled
452
9be34118b38f Add IsSendWithoutKeyEnabled config option and read from registry.
Dean Looyengoed
parents: 451
diff changeset
   166
        {
598
e1ff494dc53b Implement passive mode which can only be enabled from the registry.
Dean Looyengoed
parents: 597
diff changeset
   167
            get { return (this._IsPassiveModeEnabled); }
e1ff494dc53b Implement passive mode which can only be enabled from the registry.
Dean Looyengoed
parents: 597
diff changeset
   168
            set
e1ff494dc53b Implement passive mode which can only be enabled from the registry.
Dean Looyengoed
parents: 597
diff changeset
   169
            {
e1ff494dc53b Implement passive mode which can only be enabled from the registry.
Dean Looyengoed
parents: 597
diff changeset
   170
                this._IsPassiveModeEnabled = value;
e1ff494dc53b Implement passive mode which can only be enabled from the registry.
Dean Looyengoed
parents: 597
diff changeset
   171
                ThisAddIn.pEp.passive_mode(this._IsPassiveModeEnabled);
e1ff494dc53b Implement passive mode which can only be enabled from the registry.
Dean Looyengoed
parents: 597
diff changeset
   172
            }
452
9be34118b38f Add IsSendWithoutKeyEnabled config option and read from registry.
Dean Looyengoed
parents: 451
diff changeset
   173
        }
9be34118b38f Add IsSendWithoutKeyEnabled config option and read from registry.
Dean Looyengoed
parents: 451
diff changeset
   174
9be34118b38f Add IsSendWithoutKeyEnabled config option and read from registry.
Dean Looyengoed
parents: 451
diff changeset
   175
        /// <summary>
611
70127a03488a Alphabetize order of properties.
Dean Looyengoed
parents: 608
diff changeset
   176
        /// Gets or sets whether TNEF/RTF format is forcefully disabled in the registry.
588
2d12fb5ee4fc Add developer mode to config and options state.
Dean Looyengoed
parents: 587
diff changeset
   177
        /// </summary>
611
70127a03488a Alphabetize order of properties.
Dean Looyengoed
parents: 608
diff changeset
   178
        public bool IsTNEFDisabled
588
2d12fb5ee4fc Add developer mode to config and options state.
Dean Looyengoed
parents: 587
diff changeset
   179
        {
611
70127a03488a Alphabetize order of properties.
Dean Looyengoed
parents: 608
diff changeset
   180
            get { return (this._IsTNEFDisabled); }
70127a03488a Alphabetize order of properties.
Dean Looyengoed
parents: 608
diff changeset
   181
            set { this._IsTNEFDisabled = value; }
453
4b8c31936610 Add crash report config options and read from registry.
Dean Looyengoed
parents: 452
diff changeset
   182
        }
4b8c31936610 Add crash report config options and read from registry.
Dean Looyengoed
parents: 452
diff changeset
   183
4b8c31936610 Add crash report config options and read from registry.
Dean Looyengoed
parents: 452
diff changeset
   184
        /// <summary>
611
70127a03488a Alphabetize order of properties.
Dean Looyengoed
parents: 608
diff changeset
   185
        /// Gets or sets whether to enable encryption of message subjects.
70127a03488a Alphabetize order of properties.
Dean Looyengoed
parents: 608
diff changeset
   186
        /// When set, this also updates the pEp engine.
453
4b8c31936610 Add crash report config options and read from registry.
Dean Looyengoed
parents: 452
diff changeset
   187
        /// </summary>
611
70127a03488a Alphabetize order of properties.
Dean Looyengoed
parents: 608
diff changeset
   188
        public bool IsUnencryptedSubjectEnabled
453
4b8c31936610 Add crash report config options and read from registry.
Dean Looyengoed
parents: 452
diff changeset
   189
        {
611
70127a03488a Alphabetize order of properties.
Dean Looyengoed
parents: 608
diff changeset
   190
            get { return (this._IsUnencryptedSubjectEnabled); }
70127a03488a Alphabetize order of properties.
Dean Looyengoed
parents: 608
diff changeset
   191
            set
70127a03488a Alphabetize order of properties.
Dean Looyengoed
parents: 608
diff changeset
   192
            {
70127a03488a Alphabetize order of properties.
Dean Looyengoed
parents: 608
diff changeset
   193
                this._IsUnencryptedSubjectEnabled = value;
70127a03488a Alphabetize order of properties.
Dean Looyengoed
parents: 608
diff changeset
   194
                ThisAddIn.pEp.unencrypted_subject(this._IsUnencryptedSubjectEnabled);
70127a03488a Alphabetize order of properties.
Dean Looyengoed
parents: 608
diff changeset
   195
            }
453
4b8c31936610 Add crash report config options and read from registry.
Dean Looyengoed
parents: 452
diff changeset
   196
        }
4b8c31936610 Add crash report config options and read from registry.
Dean Looyengoed
parents: 452
diff changeset
   197
4b8c31936610 Add crash report config options and read from registry.
Dean Looyengoed
parents: 452
diff changeset
   198
        /// <summary>
611
70127a03488a Alphabetize order of properties.
Dean Looyengoed
parents: 608
diff changeset
   199
        /// Gets or sets whether verbose logging is enabled.
70127a03488a Alphabetize order of properties.
Dean Looyengoed
parents: 608
diff changeset
   200
        /// When set, this also updates the pEp engine.
190
a685c30e07d2 Refactor/comment/partial rewrite of the ThisAddIn class.
Dean Looyengoed
parents: 168
diff changeset
   201
        /// </summary>
611
70127a03488a Alphabetize order of properties.
Dean Looyengoed
parents: 608
diff changeset
   202
        public bool IsVerboseLoggingEnabled
190
a685c30e07d2 Refactor/comment/partial rewrite of the ThisAddIn class.
Dean Looyengoed
parents: 168
diff changeset
   203
        {
611
70127a03488a Alphabetize order of properties.
Dean Looyengoed
parents: 608
diff changeset
   204
            get { return (this._IsVerboseLoggingEnabled); }
70127a03488a Alphabetize order of properties.
Dean Looyengoed
parents: 608
diff changeset
   205
            set
70127a03488a Alphabetize order of properties.
Dean Looyengoed
parents: 608
diff changeset
   206
            {
70127a03488a Alphabetize order of properties.
Dean Looyengoed
parents: 608
diff changeset
   207
                this._IsVerboseLoggingEnabled = value;
70127a03488a Alphabetize order of properties.
Dean Looyengoed
parents: 608
diff changeset
   208
                ThisAddIn.pEp.verbose_logging(this._IsVerboseLoggingEnabled);
70127a03488a Alphabetize order of properties.
Dean Looyengoed
parents: 608
diff changeset
   209
            }
190
a685c30e07d2 Refactor/comment/partial rewrite of the ThisAddIn class.
Dean Looyengoed
parents: 168
diff changeset
   210
        }
a685c30e07d2 Refactor/comment/partial rewrite of the ThisAddIn class.
Dean Looyengoed
parents: 168
diff changeset
   211
a685c30e07d2 Refactor/comment/partial rewrite of the ThisAddIn class.
Dean Looyengoed
parents: 168
diff changeset
   212
        /// <summary>
a685c30e07d2 Refactor/comment/partial rewrite of the ThisAddIn class.
Dean Looyengoed
parents: 168
diff changeset
   213
        /// Gets the pEp engine which is static.
a685c30e07d2 Refactor/comment/partial rewrite of the ThisAddIn class.
Dean Looyengoed
parents: 168
diff changeset
   214
        /// </summary>
64
5111a11eed7f replacing TextMessage object with struct
Volker Birk <vb@pep-project.org>
parents: 61
diff changeset
   215
        public static pEpEngine pEp
5111a11eed7f replacing TextMessage object with struct
Volker Birk <vb@pep-project.org>
parents: 61
diff changeset
   216
        {
5111a11eed7f replacing TextMessage object with struct
Volker Birk <vb@pep-project.org>
parents: 61
diff changeset
   217
            get
5111a11eed7f replacing TextMessage object with struct
Volker Birk <vb@pep-project.org>
parents: 61
diff changeset
   218
            {
5111a11eed7f replacing TextMessage object with struct
Volker Birk <vb@pep-project.org>
parents: 61
diff changeset
   219
                if (_pEp == null)
5111a11eed7f replacing TextMessage object with struct
Volker Birk <vb@pep-project.org>
parents: 61
diff changeset
   220
                {
5111a11eed7f replacing TextMessage object with struct
Volker Birk <vb@pep-project.org>
parents: 61
diff changeset
   221
                    try
5111a11eed7f replacing TextMessage object with struct
Volker Birk <vb@pep-project.org>
parents: 61
diff changeset
   222
                    {
5111a11eed7f replacing TextMessage object with struct
Volker Birk <vb@pep-project.org>
parents: 61
diff changeset
   223
                        _pEp = new pEpEngine();
5111a11eed7f replacing TextMessage object with struct
Volker Birk <vb@pep-project.org>
parents: 61
diff changeset
   224
                    }
467
aeb05f7b2704 Finish initial implementation of global exception handler and sending crash report.
Dean Looyengoed
parents: 465
diff changeset
   225
                    catch (Exception ex)
64
5111a11eed7f replacing TextMessage object with struct
Volker Birk <vb@pep-project.org>
parents: 61
diff changeset
   226
                    {
467
aeb05f7b2704 Finish initial implementation of global exception handler and sending crash report.
Dean Looyengoed
parents: 465
diff changeset
   227
                        string summaryMessage = Properties.Resources.Message_InitError + " " +
aeb05f7b2704 Finish initial implementation of global exception handler and sending crash report.
Dean Looyengoed
parents: 465
diff changeset
   228
                                                Properties.Resources.Message_Reinstall;
660
e5346cda03ff Merge GlobalConst and GlobalExceptionHandler into only one Global class.
Dean Looyengoed
parents: 659
diff changeset
   229
                        Global.StopAndSendCrashReport(ex, summaryMessage, false, true);
460
690f8853d7ae Start to implement the global exception handler in ThisAddIn.
Dean Looyengoed
parents: 455
diff changeset
   230
64
5111a11eed7f replacing TextMessage object with struct
Volker Birk <vb@pep-project.org>
parents: 61
diff changeset
   231
                        return null;
5111a11eed7f replacing TextMessage object with struct
Volker Birk <vb@pep-project.org>
parents: 61
diff changeset
   232
                    }
5111a11eed7f replacing TextMessage object with struct
Volker Birk <vb@pep-project.org>
parents: 61
diff changeset
   233
                }
5111a11eed7f replacing TextMessage object with struct
Volker Birk <vb@pep-project.org>
parents: 61
diff changeset
   234
5111a11eed7f replacing TextMessage object with struct
Volker Birk <vb@pep-project.org>
parents: 61
diff changeset
   235
                return _pEp;
5111a11eed7f replacing TextMessage object with struct
Volker Birk <vb@pep-project.org>
parents: 61
diff changeset
   236
            }
5111a11eed7f replacing TextMessage object with struct
Volker Birk <vb@pep-project.org>
parents: 61
diff changeset
   237
        }
5111a11eed7f replacing TextMessage object with struct
Volker Birk <vb@pep-project.org>
parents: 61
diff changeset
   238
611
70127a03488a Alphabetize order of properties.
Dean Looyengoed
parents: 608
diff changeset
   239
        /// <summary>
70127a03488a Alphabetize order of properties.
Dean Looyengoed
parents: 608
diff changeset
   240
        /// Gets the temporary outlook folder used to save unencrypted outlook mail items.
70127a03488a Alphabetize order of properties.
Dean Looyengoed
parents: 608
diff changeset
   241
        /// </summary>
70127a03488a Alphabetize order of properties.
Dean Looyengoed
parents: 608
diff changeset
   242
        public Outlook.Folder TempFolder
70127a03488a Alphabetize order of properties.
Dean Looyengoed
parents: 608
diff changeset
   243
        {
70127a03488a Alphabetize order of properties.
Dean Looyengoed
parents: 608
diff changeset
   244
            get { return (this._TempFolder); }
70127a03488a Alphabetize order of properties.
Dean Looyengoed
parents: 608
diff changeset
   245
        }
70127a03488a Alphabetize order of properties.
Dean Looyengoed
parents: 608
diff changeset
   246
190
a685c30e07d2 Refactor/comment/partial rewrite of the ThisAddIn class.
Dean Looyengoed
parents: 168
diff changeset
   247
        /**************************************************************
a685c30e07d2 Refactor/comment/partial rewrite of the ThisAddIn class.
Dean Looyengoed
parents: 168
diff changeset
   248
         * 
a685c30e07d2 Refactor/comment/partial rewrite of the ThisAddIn class.
Dean Looyengoed
parents: 168
diff changeset
   249
         * Methods
a685c30e07d2 Refactor/comment/partial rewrite of the ThisAddIn class.
Dean Looyengoed
parents: 168
diff changeset
   250
         * 
a685c30e07d2 Refactor/comment/partial rewrite of the ThisAddIn class.
Dean Looyengoed
parents: 168
diff changeset
   251
         *************************************************************/
335
6411b6eb2638 Add initial backstage menu for options.
Dean Looyengoed
parents: 330
diff changeset
   252
361
bbe04f85ac03 Updates to the get my identity methods adding the ability to get my identity from a mail item.
Dean Looyengoed
parents: 342
diff changeset
   253
        /// <summary>
bbe04f85ac03 Updates to the get my identity methods adding the ability to get my identity from a mail item.
Dean Looyengoed
parents: 342
diff changeset
   254
        /// Required override to add ribbon extensions.
bbe04f85ac03 Updates to the get my identity methods adding the ability to get my identity from a mail item.
Dean Looyengoed
parents: 342
diff changeset
   255
        /// </summary>
326
2acfe22efee4 Remove pEp ribbon tab and add ribbon for backstage options (disabled for now).
Dean Looyengoed
parents: 307
diff changeset
   256
        protected override Microsoft.Office.Core.IRibbonExtensibility CreateRibbonExtensibilityObject()
2acfe22efee4 Remove pEp ribbon tab and add ribbon for backstage options (disabled for now).
Dean Looyengoed
parents: 307
diff changeset
   257
        {
340
ded73ac01f51 Implement the send unencrypted option in the ribbon.
Dean Looyengoed
parents: 335
diff changeset
   258
            return new RibbonCustomizations();
335
6411b6eb2638 Add initial backstage menu for options.
Dean Looyengoed
parents: 330
diff changeset
   259
        }
0
6dfec3b090d6 initial commit
vb
parents:
diff changeset
   260
361
bbe04f85ac03 Updates to the get my identity methods adding the ability to get my identity from a mail item.
Dean Looyengoed
parents: 342
diff changeset
   261
        /// <summary>
626
6fce9c5a037e Add and implement DisableGpgOL method.
Dean Looyengoed
parents: 625
diff changeset
   262
        /// Detects and disables GPG for Windows GpgOL Outlook add-in.
6fce9c5a037e Add and implement DisableGpgOL method.
Dean Looyengoed
parents: 625
diff changeset
   263
        /// </summary>
6fce9c5a037e Add and implement DisableGpgOL method.
Dean Looyengoed
parents: 625
diff changeset
   264
        /// <returns>True if the GpgOL add-in was disabled.</returns>
6fce9c5a037e Add and implement DisableGpgOL method.
Dean Looyengoed
parents: 625
diff changeset
   265
        private bool DisableGpgOL()
6fce9c5a037e Add and implement DisableGpgOL method.
Dean Looyengoed
parents: 625
diff changeset
   266
        {
6fce9c5a037e Add and implement DisableGpgOL method.
Dean Looyengoed
parents: 625
diff changeset
   267
            bool wasDisabled = false;
6fce9c5a037e Add and implement DisableGpgOL method.
Dean Looyengoed
parents: 625
diff changeset
   268
            Office.COMAddIns comAddIns;
6fce9c5a037e Add and implement DisableGpgOL method.
Dean Looyengoed
parents: 625
diff changeset
   269
6fce9c5a037e Add and implement DisableGpgOL method.
Dean Looyengoed
parents: 625
diff changeset
   270
            comAddIns = Globals.ThisAddIn.Application.COMAddIns;
6fce9c5a037e Add and implement DisableGpgOL method.
Dean Looyengoed
parents: 625
diff changeset
   271
            foreach (Office.COMAddIn addin in comAddIns)
6fce9c5a037e Add and implement DisableGpgOL method.
Dean Looyengoed
parents: 625
diff changeset
   272
            {
6fce9c5a037e Add and implement DisableGpgOL method.
Dean Looyengoed
parents: 625
diff changeset
   273
                if (string.Equals(addin.Description, "GpgOL - The GnuPG Outlook Plugin", StringComparison.OrdinalIgnoreCase))
6fce9c5a037e Add and implement DisableGpgOL method.
Dean Looyengoed
parents: 625
diff changeset
   274
                {
6fce9c5a037e Add and implement DisableGpgOL method.
Dean Looyengoed
parents: 625
diff changeset
   275
                    addin.Connect = false;
6fce9c5a037e Add and implement DisableGpgOL method.
Dean Looyengoed
parents: 625
diff changeset
   276
                    wasDisabled = true;
6fce9c5a037e Add and implement DisableGpgOL method.
Dean Looyengoed
parents: 625
diff changeset
   277
660
e5346cda03ff Merge GlobalConst and GlobalExceptionHandler into only one Global class.
Dean Looyengoed
parents: 659
diff changeset
   278
                    Global.AddToLog("DisableGpgOL: GpgOL was detected and disabled.");
626
6fce9c5a037e Add and implement DisableGpgOL method.
Dean Looyengoed
parents: 625
diff changeset
   279
                }
6fce9c5a037e Add and implement DisableGpgOL method.
Dean Looyengoed
parents: 625
diff changeset
   280
            }
6fce9c5a037e Add and implement DisableGpgOL method.
Dean Looyengoed
parents: 625
diff changeset
   281
6fce9c5a037e Add and implement DisableGpgOL method.
Dean Looyengoed
parents: 625
diff changeset
   282
            return (wasDisabled);
6fce9c5a037e Add and implement DisableGpgOL method.
Dean Looyengoed
parents: 625
diff changeset
   283
        }
6fce9c5a037e Add and implement DisableGpgOL method.
Dean Looyengoed
parents: 625
diff changeset
   284
6fce9c5a037e Add and implement DisableGpgOL method.
Dean Looyengoed
parents: 625
diff changeset
   285
        /// <summary>
384
a0aa034cb7f3 Create and implement new classes for PEPAttachment, PEPIdentity and PEPMessage.
Dean Looyengoed
parents: 378
diff changeset
   286
        /// Registers each personal identity in the pEp engine.
a0aa034cb7f3 Create and implement new classes for PEPAttachment, PEPIdentity and PEPMessage.
Dean Looyengoed
parents: 378
diff changeset
   287
        /// An identity is determined by each account in Outlook.
361
bbe04f85ac03 Updates to the get my identity methods adding the ability to get my identity from a mail item.
Dean Looyengoed
parents: 342
diff changeset
   288
        /// </summary>
384
a0aa034cb7f3 Create and implement new classes for PEPAttachment, PEPIdentity and PEPMessage.
Dean Looyengoed
parents: 378
diff changeset
   289
        public void RegisterMyself()
0
6dfec3b090d6 initial commit
vb
parents:
diff changeset
   290
        {
575
27512d0d41cf Rewrite RegisterMyself method to release objects and log issues.
Dean Looyengoed
parents: 571
diff changeset
   291
            Outlook.NameSpace ns = Application.Session;
27512d0d41cf Rewrite RegisterMyself method to release objects and log issues.
Dean Looyengoed
parents: 571
diff changeset
   292
            Outlook.Account acct = null;
27512d0d41cf Rewrite RegisterMyself method to release objects and log issues.
Dean Looyengoed
parents: 571
diff changeset
   293
            Outlook.Accounts accounts = ns.Accounts;
576
e0190df007de Check if current user is null in RegisterMyself method.
Dean Looyengoed
parents: 575
diff changeset
   294
            Outlook.Recipient currUser = null;
575
27512d0d41cf Rewrite RegisterMyself method to release objects and log issues.
Dean Looyengoed
parents: 571
diff changeset
   295
            pEp_identity_s me;
27512d0d41cf Rewrite RegisterMyself method to release objects and log issues.
Dean Looyengoed
parents: 571
diff changeset
   296
27512d0d41cf Rewrite RegisterMyself method to release objects and log issues.
Dean Looyengoed
parents: 571
diff changeset
   297
            for (int i = 1; i <= accounts.Count; i++)
0
6dfec3b090d6 initial commit
vb
parents:
diff changeset
   298
            {
575
27512d0d41cf Rewrite RegisterMyself method to release objects and log issues.
Dean Looyengoed
parents: 571
diff changeset
   299
                acct = accounts[i];
576
e0190df007de Check if current user is null in RegisterMyself method.
Dean Looyengoed
parents: 575
diff changeset
   300
                currUser = acct.CurrentUser;
575
27512d0d41cf Rewrite RegisterMyself method to release objects and log issues.
Dean Looyengoed
parents: 571
diff changeset
   301
27512d0d41cf Rewrite RegisterMyself method to release objects and log issues.
Dean Looyengoed
parents: 571
diff changeset
   302
                me = new pEp_identity_s();
14
84089e08d01c bugfix for Exchange account(s)
vb
parents: 13
diff changeset
   303
                me.address = acct.SmtpAddress;
576
e0190df007de Check if current user is null in RegisterMyself method.
Dean Looyengoed
parents: 575
diff changeset
   304
                me.username = (currUser != null ? currUser.Name : null);
525
69ca517635c4 Change UserID to standard calculation when finding Myself.
Dean Looyengoed
parents: 523
diff changeset
   305
                me.user_id = Globals.ThisAddIn.GetUserID(me.address); // Previously: acct.CurrentUser.EntryID
12
7dce2af80337 first key will be used to sign a message
vb
parents: 0
diff changeset
   306
575
27512d0d41cf Rewrite RegisterMyself method to release objects and log issues.
Dean Looyengoed
parents: 571
diff changeset
   307
                // Log information if invalid
27512d0d41cf Rewrite RegisterMyself method to release objects and log issues.
Dean Looyengoed
parents: 571
diff changeset
   308
                if (string.IsNullOrWhiteSpace(me.address))
27512d0d41cf Rewrite RegisterMyself method to release objects and log issues.
Dean Looyengoed
parents: 571
diff changeset
   309
                {
660
e5346cda03ff Merge GlobalConst and GlobalExceptionHandler into only one Global class.
Dean Looyengoed
parents: 659
diff changeset
   310
                    Global.AddToLog("RegisterMyself: Myself[" + i.ToString() + "] doesn't have an address.");
575
27512d0d41cf Rewrite RegisterMyself method to release objects and log issues.
Dean Looyengoed
parents: 571
diff changeset
   311
                }
27512d0d41cf Rewrite RegisterMyself method to release objects and log issues.
Dean Looyengoed
parents: 571
diff changeset
   312
27512d0d41cf Rewrite RegisterMyself method to release objects and log issues.
Dean Looyengoed
parents: 571
diff changeset
   313
                if (string.IsNullOrWhiteSpace(me.username))
27512d0d41cf Rewrite RegisterMyself method to release objects and log issues.
Dean Looyengoed
parents: 571
diff changeset
   314
                {
660
e5346cda03ff Merge GlobalConst and GlobalExceptionHandler into only one Global class.
Dean Looyengoed
parents: 659
diff changeset
   315
                    Global.AddToLog("RegisterMyself: Myself[" + i.ToString() + "] doesn't have a username.");
575
27512d0d41cf Rewrite RegisterMyself method to release objects and log issues.
Dean Looyengoed
parents: 571
diff changeset
   316
                }
27512d0d41cf Rewrite RegisterMyself method to release objects and log issues.
Dean Looyengoed
parents: 571
diff changeset
   317
27512d0d41cf Rewrite RegisterMyself method to release objects and log issues.
Dean Looyengoed
parents: 571
diff changeset
   318
                if (string.IsNullOrWhiteSpace(me.user_id))
27512d0d41cf Rewrite RegisterMyself method to release objects and log issues.
Dean Looyengoed
parents: 571
diff changeset
   319
                {
660
e5346cda03ff Merge GlobalConst and GlobalExceptionHandler into only one Global class.
Dean Looyengoed
parents: 659
diff changeset
   320
                    Global.AddToLog("RegisterMyself: Myself[" + i.ToString() + "] doesn't have a user ID.");
575
27512d0d41cf Rewrite RegisterMyself method to release objects and log issues.
Dean Looyengoed
parents: 571
diff changeset
   321
                }
27512d0d41cf Rewrite RegisterMyself method to release objects and log issues.
Dean Looyengoed
parents: 571
diff changeset
   322
27512d0d41cf Rewrite RegisterMyself method to release objects and log issues.
Dean Looyengoed
parents: 571
diff changeset
   323
                // Call engine
12
7dce2af80337 first key will be used to sign a message
vb
parents: 0
diff changeset
   324
                try
7dce2af80337 first key will be used to sign a message
vb
parents: 0
diff changeset
   325
                {
59
Volker Birk <vb@pep-project.org>
parents: 55
diff changeset
   326
                    pEp.myself(me);
12
7dce2af80337 first key will be used to sign a message
vb
parents: 0
diff changeset
   327
                }
7dce2af80337 first key will be used to sign a message
vb
parents: 0
diff changeset
   328
                catch (COMException ex)
7dce2af80337 first key will be used to sign a message
vb
parents: 0
diff changeset
   329
                {
660
e5346cda03ff Merge GlobalConst and GlobalExceptionHandler into only one Global class.
Dean Looyengoed
parents: 659
diff changeset
   330
                    Global.StopAndSendCrashReport(ex);
12
7dce2af80337 first key will be used to sign a message
vb
parents: 0
diff changeset
   331
                }
575
27512d0d41cf Rewrite RegisterMyself method to release objects and log issues.
Dean Looyengoed
parents: 571
diff changeset
   332
576
e0190df007de Check if current user is null in RegisterMyself method.
Dean Looyengoed
parents: 575
diff changeset
   333
                // Release objects
575
27512d0d41cf Rewrite RegisterMyself method to release objects and log issues.
Dean Looyengoed
parents: 571
diff changeset
   334
                if (acct != null)
27512d0d41cf Rewrite RegisterMyself method to release objects and log issues.
Dean Looyengoed
parents: 571
diff changeset
   335
                {
27512d0d41cf Rewrite RegisterMyself method to release objects and log issues.
Dean Looyengoed
parents: 571
diff changeset
   336
                    Marshal.ReleaseComObject(acct);
27512d0d41cf Rewrite RegisterMyself method to release objects and log issues.
Dean Looyengoed
parents: 571
diff changeset
   337
                    acct = null;
27512d0d41cf Rewrite RegisterMyself method to release objects and log issues.
Dean Looyengoed
parents: 571
diff changeset
   338
                }
576
e0190df007de Check if current user is null in RegisterMyself method.
Dean Looyengoed
parents: 575
diff changeset
   339
e0190df007de Check if current user is null in RegisterMyself method.
Dean Looyengoed
parents: 575
diff changeset
   340
                if (currUser != null)
e0190df007de Check if current user is null in RegisterMyself method.
Dean Looyengoed
parents: 575
diff changeset
   341
                {
e0190df007de Check if current user is null in RegisterMyself method.
Dean Looyengoed
parents: 575
diff changeset
   342
                    Marshal.ReleaseComObject(currUser);
e0190df007de Check if current user is null in RegisterMyself method.
Dean Looyengoed
parents: 575
diff changeset
   343
                    currUser = null;
e0190df007de Check if current user is null in RegisterMyself method.
Dean Looyengoed
parents: 575
diff changeset
   344
                }
575
27512d0d41cf Rewrite RegisterMyself method to release objects and log issues.
Dean Looyengoed
parents: 571
diff changeset
   345
            }
27512d0d41cf Rewrite RegisterMyself method to release objects and log issues.
Dean Looyengoed
parents: 571
diff changeset
   346
27512d0d41cf Rewrite RegisterMyself method to release objects and log issues.
Dean Looyengoed
parents: 571
diff changeset
   347
            // Release objects
27512d0d41cf Rewrite RegisterMyself method to release objects and log issues.
Dean Looyengoed
parents: 571
diff changeset
   348
            if (ns != null)
27512d0d41cf Rewrite RegisterMyself method to release objects and log issues.
Dean Looyengoed
parents: 571
diff changeset
   349
            {
27512d0d41cf Rewrite RegisterMyself method to release objects and log issues.
Dean Looyengoed
parents: 571
diff changeset
   350
                Marshal.ReleaseComObject(ns);
27512d0d41cf Rewrite RegisterMyself method to release objects and log issues.
Dean Looyengoed
parents: 571
diff changeset
   351
                ns = null;
27512d0d41cf Rewrite RegisterMyself method to release objects and log issues.
Dean Looyengoed
parents: 571
diff changeset
   352
            }
27512d0d41cf Rewrite RegisterMyself method to release objects and log issues.
Dean Looyengoed
parents: 571
diff changeset
   353
27512d0d41cf Rewrite RegisterMyself method to release objects and log issues.
Dean Looyengoed
parents: 571
diff changeset
   354
            if (acct != null)
27512d0d41cf Rewrite RegisterMyself method to release objects and log issues.
Dean Looyengoed
parents: 571
diff changeset
   355
            {
27512d0d41cf Rewrite RegisterMyself method to release objects and log issues.
Dean Looyengoed
parents: 571
diff changeset
   356
                Marshal.ReleaseComObject(acct);
27512d0d41cf Rewrite RegisterMyself method to release objects and log issues.
Dean Looyengoed
parents: 571
diff changeset
   357
                acct = null;
27512d0d41cf Rewrite RegisterMyself method to release objects and log issues.
Dean Looyengoed
parents: 571
diff changeset
   358
            }
27512d0d41cf Rewrite RegisterMyself method to release objects and log issues.
Dean Looyengoed
parents: 571
diff changeset
   359
27512d0d41cf Rewrite RegisterMyself method to release objects and log issues.
Dean Looyengoed
parents: 571
diff changeset
   360
            if (accounts != null)
27512d0d41cf Rewrite RegisterMyself method to release objects and log issues.
Dean Looyengoed
parents: 571
diff changeset
   361
            {
27512d0d41cf Rewrite RegisterMyself method to release objects and log issues.
Dean Looyengoed
parents: 571
diff changeset
   362
                Marshal.ReleaseComObject(accounts);
27512d0d41cf Rewrite RegisterMyself method to release objects and log issues.
Dean Looyengoed
parents: 571
diff changeset
   363
                accounts = null;
0
6dfec3b090d6 initial commit
vb
parents:
diff changeset
   364
            }
588
2d12fb5ee4fc Add developer mode to config and options state.
Dean Looyengoed
parents: 587
diff changeset
   365
576
e0190df007de Check if current user is null in RegisterMyself method.
Dean Looyengoed
parents: 575
diff changeset
   366
            if (currUser != null)
e0190df007de Check if current user is null in RegisterMyself method.
Dean Looyengoed
parents: 575
diff changeset
   367
            {
e0190df007de Check if current user is null in RegisterMyself method.
Dean Looyengoed
parents: 575
diff changeset
   368
                Marshal.ReleaseComObject(currUser);
e0190df007de Check if current user is null in RegisterMyself method.
Dean Looyengoed
parents: 575
diff changeset
   369
                currUser = null;
e0190df007de Check if current user is null in RegisterMyself method.
Dean Looyengoed
parents: 575
diff changeset
   370
            }
0
6dfec3b090d6 initial commit
vb
parents:
diff changeset
   371
384
a0aa034cb7f3 Create and implement new classes for PEPAttachment, PEPIdentity and PEPMessage.
Dean Looyengoed
parents: 378
diff changeset
   372
            return;
190
a685c30e07d2 Refactor/comment/partial rewrite of the ThisAddIn class.
Dean Looyengoed
parents: 168
diff changeset
   373
        }
a685c30e07d2 Refactor/comment/partial rewrite of the ThisAddIn class.
Dean Looyengoed
parents: 168
diff changeset
   374
a685c30e07d2 Refactor/comment/partial rewrite of the ThisAddIn class.
Dean Looyengoed
parents: 168
diff changeset
   375
        /// <summary>
624
a678557a3750 Implement support for force unencrypted in contacts.
Dean Looyengoed
parents: 611
diff changeset
   376
        /// Gets whether the given contact should be forcefully sent unencrypted messages.
a678557a3750 Implement support for force unencrypted in contacts.
Dean Looyengoed
parents: 611
diff changeset
   377
        /// This will read the value of the user property.
a678557a3750 Implement support for force unencrypted in contacts.
Dean Looyengoed
parents: 611
diff changeset
   378
        /// </summary>
664
9dcf25b27787 Rename send unencrypted to force unencrypted throughout code.
Dean Looyengoed
parents: 660
diff changeset
   379
        /// <param name="contact">The contact to get the force unencrypted status from.</param>
9dcf25b27787 Rename send unencrypted to force unencrypted throughout code.
Dean Looyengoed
parents: 660
diff changeset
   380
        /// <returns>True if the mail item is force unencrypted, otherwise false or null.</returns>
9dcf25b27787 Rename send unencrypted to force unencrypted throughout code.
Dean Looyengoed
parents: 660
diff changeset
   381
        public bool? GetForceUnencrypted(Outlook.ContactItem contact)
624
a678557a3750 Implement support for force unencrypted in contacts.
Dean Looyengoed
parents: 611
diff changeset
   382
        {
a678557a3750 Implement support for force unencrypted in contacts.
Dean Looyengoed
parents: 611
diff changeset
   383
            bool? value = false;
a678557a3750 Implement support for force unencrypted in contacts.
Dean Looyengoed
parents: 611
diff changeset
   384
            Outlook.UserProperties properties = contact.UserProperties;
664
9dcf25b27787 Rename send unencrypted to force unencrypted throughout code.
Dean Looyengoed
parents: 660
diff changeset
   385
            Outlook.UserProperty up = properties.Find(CryptableMailItem.USER_PROPERTY_KEY_FORCE_UNENCRYPTED);
624
a678557a3750 Implement support for force unencrypted in contacts.
Dean Looyengoed
parents: 611
diff changeset
   386
a678557a3750 Implement support for force unencrypted in contacts.
Dean Looyengoed
parents: 611
diff changeset
   387
            if (up == null)
a678557a3750 Implement support for force unencrypted in contacts.
Dean Looyengoed
parents: 611
diff changeset
   388
            {
a678557a3750 Implement support for force unencrypted in contacts.
Dean Looyengoed
parents: 611
diff changeset
   389
                value = null;
a678557a3750 Implement support for force unencrypted in contacts.
Dean Looyengoed
parents: 611
diff changeset
   390
            }
a678557a3750 Implement support for force unencrypted in contacts.
Dean Looyengoed
parents: 611
diff changeset
   391
            else
a678557a3750 Implement support for force unencrypted in contacts.
Dean Looyengoed
parents: 611
diff changeset
   392
            {
a678557a3750 Implement support for force unencrypted in contacts.
Dean Looyengoed
parents: 611
diff changeset
   393
                value = up.Value;
a678557a3750 Implement support for force unencrypted in contacts.
Dean Looyengoed
parents: 611
diff changeset
   394
            }
a678557a3750 Implement support for force unencrypted in contacts.
Dean Looyengoed
parents: 611
diff changeset
   395
a678557a3750 Implement support for force unencrypted in contacts.
Dean Looyengoed
parents: 611
diff changeset
   396
            // Release objects
a678557a3750 Implement support for force unencrypted in contacts.
Dean Looyengoed
parents: 611
diff changeset
   397
            if (properties != null)
a678557a3750 Implement support for force unencrypted in contacts.
Dean Looyengoed
parents: 611
diff changeset
   398
            {
a678557a3750 Implement support for force unencrypted in contacts.
Dean Looyengoed
parents: 611
diff changeset
   399
                Marshal.ReleaseComObject(properties);
a678557a3750 Implement support for force unencrypted in contacts.
Dean Looyengoed
parents: 611
diff changeset
   400
                properties = null;
a678557a3750 Implement support for force unencrypted in contacts.
Dean Looyengoed
parents: 611
diff changeset
   401
            }
a678557a3750 Implement support for force unencrypted in contacts.
Dean Looyengoed
parents: 611
diff changeset
   402
a678557a3750 Implement support for force unencrypted in contacts.
Dean Looyengoed
parents: 611
diff changeset
   403
            if (up != null)
a678557a3750 Implement support for force unencrypted in contacts.
Dean Looyengoed
parents: 611
diff changeset
   404
            {
a678557a3750 Implement support for force unencrypted in contacts.
Dean Looyengoed
parents: 611
diff changeset
   405
                Marshal.ReleaseComObject(up);
a678557a3750 Implement support for force unencrypted in contacts.
Dean Looyengoed
parents: 611
diff changeset
   406
                up = null;
a678557a3750 Implement support for force unencrypted in contacts.
Dean Looyengoed
parents: 611
diff changeset
   407
            }
a678557a3750 Implement support for force unencrypted in contacts.
Dean Looyengoed
parents: 611
diff changeset
   408
a678557a3750 Implement support for force unencrypted in contacts.
Dean Looyengoed
parents: 611
diff changeset
   409
            return (value);
a678557a3750 Implement support for force unencrypted in contacts.
Dean Looyengoed
parents: 611
diff changeset
   410
        }
a678557a3750 Implement support for force unencrypted in contacts.
Dean Looyengoed
parents: 611
diff changeset
   411
a678557a3750 Implement support for force unencrypted in contacts.
Dean Looyengoed
parents: 611
diff changeset
   412
        /// <summary>
487
b27803e13913 Add initial methods to support contact-based send unencrypted message.
Dean Looyengoed
parents: 482
diff changeset
   413
        /// Sets whether the given contact should be forcefully sent unencrypted messages.
b27803e13913 Add initial methods to support contact-based send unencrypted message.
Dean Looyengoed
parents: 482
diff changeset
   414
        /// This will set the value of the user property.
b27803e13913 Add initial methods to support contact-based send unencrypted message.
Dean Looyengoed
parents: 482
diff changeset
   415
        /// </summary>
664
9dcf25b27787 Rename send unencrypted to force unencrypted throughout code.
Dean Looyengoed
parents: 660
diff changeset
   416
        /// <param name="contact">The contact to set force unencrypted status for.</param>
9dcf25b27787 Rename send unencrypted to force unencrypted throughout code.
Dean Looyengoed
parents: 660
diff changeset
   417
        /// <param name="forceUnencrypted">The force unencrypted status to set.</param>
9dcf25b27787 Rename send unencrypted to force unencrypted throughout code.
Dean Looyengoed
parents: 660
diff changeset
   418
        public void SetForceUnencrypted(Outlook.ContactItem contact,
9dcf25b27787 Rename send unencrypted to force unencrypted throughout code.
Dean Looyengoed
parents: 660
diff changeset
   419
                                        bool forceUnencrypted)
487
b27803e13913 Add initial methods to support contact-based send unencrypted message.
Dean Looyengoed
parents: 482
diff changeset
   420
        {
624
a678557a3750 Implement support for force unencrypted in contacts.
Dean Looyengoed
parents: 611
diff changeset
   421
            Outlook.UserProperties properties = contact.UserProperties;
664
9dcf25b27787 Rename send unencrypted to force unencrypted throughout code.
Dean Looyengoed
parents: 660
diff changeset
   422
            Outlook.UserProperty up = properties.Find(CryptableMailItem.USER_PROPERTY_KEY_FORCE_UNENCRYPTED);
487
b27803e13913 Add initial methods to support contact-based send unencrypted message.
Dean Looyengoed
parents: 482
diff changeset
   423
b27803e13913 Add initial methods to support contact-based send unencrypted message.
Dean Looyengoed
parents: 482
diff changeset
   424
            if (up == null)
b27803e13913 Add initial methods to support contact-based send unencrypted message.
Dean Looyengoed
parents: 482
diff changeset
   425
            {
664
9dcf25b27787 Rename send unencrypted to force unencrypted throughout code.
Dean Looyengoed
parents: 660
diff changeset
   426
                up = contact.UserProperties.Add(CryptableMailItem.USER_PROPERTY_KEY_FORCE_UNENCRYPTED,
487
b27803e13913 Add initial methods to support contact-based send unencrypted message.
Dean Looyengoed
parents: 482
diff changeset
   427
                                                Outlook.OlUserPropertyType.olYesNo, false);
b27803e13913 Add initial methods to support contact-based send unencrypted message.
Dean Looyengoed
parents: 482
diff changeset
   428
            }
b27803e13913 Add initial methods to support contact-based send unencrypted message.
Dean Looyengoed
parents: 482
diff changeset
   429
664
9dcf25b27787 Rename send unencrypted to force unencrypted throughout code.
Dean Looyengoed
parents: 660
diff changeset
   430
            up.Value = forceUnencrypted;
487
b27803e13913 Add initial methods to support contact-based send unencrypted message.
Dean Looyengoed
parents: 482
diff changeset
   431
624
a678557a3750 Implement support for force unencrypted in contacts.
Dean Looyengoed
parents: 611
diff changeset
   432
            // Release objects
a678557a3750 Implement support for force unencrypted in contacts.
Dean Looyengoed
parents: 611
diff changeset
   433
            if (properties != null)
487
b27803e13913 Add initial methods to support contact-based send unencrypted message.
Dean Looyengoed
parents: 482
diff changeset
   434
            {
624
a678557a3750 Implement support for force unencrypted in contacts.
Dean Looyengoed
parents: 611
diff changeset
   435
                Marshal.ReleaseComObject(properties);
a678557a3750 Implement support for force unencrypted in contacts.
Dean Looyengoed
parents: 611
diff changeset
   436
                properties = null;
487
b27803e13913 Add initial methods to support contact-based send unencrypted message.
Dean Looyengoed
parents: 482
diff changeset
   437
            }
b27803e13913 Add initial methods to support contact-based send unencrypted message.
Dean Looyengoed
parents: 482
diff changeset
   438
488
c654979e27ac Fix so release isn't done on null objects...
Dean Looyengoed
parents: 487
diff changeset
   439
            if (up != null)
c654979e27ac Fix so release isn't done on null objects...
Dean Looyengoed
parents: 487
diff changeset
   440
            {
c654979e27ac Fix so release isn't done on null objects...
Dean Looyengoed
parents: 487
diff changeset
   441
                Marshal.ReleaseComObject(up);
c654979e27ac Fix so release isn't done on null objects...
Dean Looyengoed
parents: 487
diff changeset
   442
                up = null;
c654979e27ac Fix so release isn't done on null objects...
Dean Looyengoed
parents: 487
diff changeset
   443
            }
487
b27803e13913 Add initial methods to support contact-based send unencrypted message.
Dean Looyengoed
parents: 482
diff changeset
   444
624
a678557a3750 Implement support for force unencrypted in contacts.
Dean Looyengoed
parents: 611
diff changeset
   445
            return;
487
b27803e13913 Add initial methods to support contact-based send unencrypted message.
Dean Looyengoed
parents: 482
diff changeset
   446
        }
b27803e13913 Add initial methods to support contact-based send unencrypted message.
Dean Looyengoed
parents: 482
diff changeset
   447
b27803e13913 Add initial methods to support contact-based send unencrypted message.
Dean Looyengoed
parents: 482
diff changeset
   448
        /// <summary>
b27803e13913 Add initial methods to support contact-based send unencrypted message.
Dean Looyengoed
parents: 482
diff changeset
   449
        /// Determines if the contact associated with the given address is to be forcefully sent unencrypted messages.
664
9dcf25b27787 Rename send unencrypted to force unencrypted throughout code.
Dean Looyengoed
parents: 660
diff changeset
   450
        /// This will match the address to a contact then check the force unencrypted user property of the contact.
487
b27803e13913 Add initial methods to support contact-based send unencrypted message.
Dean Looyengoed
parents: 482
diff changeset
   451
        /// </summary>
b27803e13913 Add initial methods to support contact-based send unencrypted message.
Dean Looyengoed
parents: 482
diff changeset
   452
        /// <param name="address">The address to determine whether it should be forcefully sent unencrypted messages.</param>
b27803e13913 Add initial methods to support contact-based send unencrypted message.
Dean Looyengoed
parents: 482
diff changeset
   453
        /// <returns>True if the given address should be sent unencrypted messages based on its contact, otherwise false.</returns>
664
9dcf25b27787 Rename send unencrypted to force unencrypted throughout code.
Dean Looyengoed
parents: 660
diff changeset
   454
        public bool ContactIsForceUnencrypted(string address)
487
b27803e13913 Add initial methods to support contact-based send unencrypted message.
Dean Looyengoed
parents: 482
diff changeset
   455
        {
664
9dcf25b27787 Rename send unencrypted to force unencrypted throughout code.
Dean Looyengoed
parents: 660
diff changeset
   456
            bool forceUnencrypted = false;
625
d4af7230450f Implement contact-based send unencrypted in the message processor.
Dean Looyengoed
parents: 624
diff changeset
   457
            bool? propertyValue;
487
b27803e13913 Add initial methods to support contact-based send unencrypted message.
Dean Looyengoed
parents: 482
diff changeset
   458
            Outlook.MAPIFolder contactFolder = null;
625
d4af7230450f Implement contact-based send unencrypted in the message processor.
Dean Looyengoed
parents: 624
diff changeset
   459
            Outlook.NameSpace ns = Application.Session;
d4af7230450f Implement contact-based send unencrypted in the message processor.
Dean Looyengoed
parents: 624
diff changeset
   460
            Outlook.Store store = null;
d4af7230450f Implement contact-based send unencrypted in the message processor.
Dean Looyengoed
parents: 624
diff changeset
   461
            Outlook.Stores stores = ns.Stores;
d4af7230450f Implement contact-based send unencrypted in the message processor.
Dean Looyengoed
parents: 624
diff changeset
   462
            Outlook.ContactItem item = null;
d4af7230450f Implement contact-based send unencrypted in the message processor.
Dean Looyengoed
parents: 624
diff changeset
   463
            Outlook.Items items = null;
487
b27803e13913 Add initial methods to support contact-based send unencrypted message.
Dean Looyengoed
parents: 482
diff changeset
   464
b27803e13913 Add initial methods to support contact-based send unencrypted message.
Dean Looyengoed
parents: 482
diff changeset
   465
            try
b27803e13913 Add initial methods to support contact-based send unencrypted message.
Dean Looyengoed
parents: 482
diff changeset
   466
            {
625
d4af7230450f Implement contact-based send unencrypted in the message processor.
Dean Looyengoed
parents: 624
diff changeset
   467
                if (string.IsNullOrEmpty(address) == false)
487
b27803e13913 Add initial methods to support contact-based send unencrypted message.
Dean Looyengoed
parents: 482
diff changeset
   468
                {
625
d4af7230450f Implement contact-based send unencrypted in the message processor.
Dean Looyengoed
parents: 624
diff changeset
   469
                    for (int i = 1; i <= stores.Count; i++)
487
b27803e13913 Add initial methods to support contact-based send unencrypted message.
Dean Looyengoed
parents: 482
diff changeset
   470
                    {
625
d4af7230450f Implement contact-based send unencrypted in the message processor.
Dean Looyengoed
parents: 624
diff changeset
   471
                        store = stores[i];
d4af7230450f Implement contact-based send unencrypted in the message processor.
Dean Looyengoed
parents: 624
diff changeset
   472
725
41bac55ab436 Comment out user_id calculation using address books.
Dean Looyengoed
parents: 714
diff changeset
   473
                        if (store.ExchangeStoreType == Outlook.OlExchangeStoreType.olNotExchange)
625
d4af7230450f Implement contact-based send unencrypted in the message processor.
Dean Looyengoed
parents: 624
diff changeset
   474
                        {
725
41bac55ab436 Comment out user_id calculation using address books.
Dean Looyengoed
parents: 714
diff changeset
   475
                            try
41bac55ab436 Comment out user_id calculation using address books.
Dean Looyengoed
parents: 714
diff changeset
   476
                            {
41bac55ab436 Comment out user_id calculation using address books.
Dean Looyengoed
parents: 714
diff changeset
   477
                                contactFolder = store.GetDefaultFolder(Outlook.OlDefaultFolders.olFolderContacts);
41bac55ab436 Comment out user_id calculation using address books.
Dean Looyengoed
parents: 714
diff changeset
   478
                            }
41bac55ab436 Comment out user_id calculation using address books.
Dean Looyengoed
parents: 714
diff changeset
   479
                            catch
41bac55ab436 Comment out user_id calculation using address books.
Dean Looyengoed
parents: 714
diff changeset
   480
                            {
41bac55ab436 Comment out user_id calculation using address books.
Dean Looyengoed
parents: 714
diff changeset
   481
                                contactFolder = null;
41bac55ab436 Comment out user_id calculation using address books.
Dean Looyengoed
parents: 714
diff changeset
   482
                            }
625
d4af7230450f Implement contact-based send unencrypted in the message processor.
Dean Looyengoed
parents: 624
diff changeset
   483
725
41bac55ab436 Comment out user_id calculation using address books.
Dean Looyengoed
parents: 714
diff changeset
   484
                            // Go through each contact item in the default contacts folder
41bac55ab436 Comment out user_id calculation using address books.
Dean Looyengoed
parents: 714
diff changeset
   485
                            if (contactFolder != null)
41bac55ab436 Comment out user_id calculation using address books.
Dean Looyengoed
parents: 714
diff changeset
   486
                            {
41bac55ab436 Comment out user_id calculation using address books.
Dean Looyengoed
parents: 714
diff changeset
   487
                                items = contactFolder.Items;
625
d4af7230450f Implement contact-based send unencrypted in the message processor.
Dean Looyengoed
parents: 624
diff changeset
   488
725
41bac55ab436 Comment out user_id calculation using address books.
Dean Looyengoed
parents: 714
diff changeset
   489
                                for (int j = 0; j < items.Count; j++)
625
d4af7230450f Implement contact-based send unencrypted in the message processor.
Dean Looyengoed
parents: 624
diff changeset
   490
                                {
725
41bac55ab436 Comment out user_id calculation using address books.
Dean Looyengoed
parents: 714
diff changeset
   491
                                    try
625
d4af7230450f Implement contact-based send unencrypted in the message processor.
Dean Looyengoed
parents: 624
diff changeset
   492
                                    {
725
41bac55ab436 Comment out user_id calculation using address books.
Dean Looyengoed
parents: 714
diff changeset
   493
                                        item = (Outlook.ContactItem)items[j];
41bac55ab436 Comment out user_id calculation using address books.
Dean Looyengoed
parents: 714
diff changeset
   494
                                    }
41bac55ab436 Comment out user_id calculation using address books.
Dean Looyengoed
parents: 714
diff changeset
   495
                                    catch
41bac55ab436 Comment out user_id calculation using address books.
Dean Looyengoed
parents: 714
diff changeset
   496
                                    {
41bac55ab436 Comment out user_id calculation using address books.
Dean Looyengoed
parents: 714
diff changeset
   497
                                        item = null;
625
d4af7230450f Implement contact-based send unencrypted in the message processor.
Dean Looyengoed
parents: 624
diff changeset
   498
                                    }
d4af7230450f Implement contact-based send unencrypted in the message processor.
Dean Looyengoed
parents: 624
diff changeset
   499
725
41bac55ab436 Comment out user_id calculation using address books.
Dean Looyengoed
parents: 714
diff changeset
   500
                                    if (item != null)
41bac55ab436 Comment out user_id calculation using address books.
Dean Looyengoed
parents: 714
diff changeset
   501
                                    {
41bac55ab436 Comment out user_id calculation using address books.
Dean Looyengoed
parents: 714
diff changeset
   502
                                        propertyValue = this.GetForceUnencrypted(item);
41bac55ab436 Comment out user_id calculation using address books.
Dean Looyengoed
parents: 714
diff changeset
   503
41bac55ab436 Comment out user_id calculation using address books.
Dean Looyengoed
parents: 714
diff changeset
   504
                                        // Check property and address for a match
41bac55ab436 Comment out user_id calculation using address books.
Dean Looyengoed
parents: 714
diff changeset
   505
                                        if ((propertyValue != null) &&
41bac55ab436 Comment out user_id calculation using address books.
Dean Looyengoed
parents: 714
diff changeset
   506
                                            ((bool)propertyValue == true))
41bac55ab436 Comment out user_id calculation using address books.
Dean Looyengoed
parents: 714
diff changeset
   507
                                        {
41bac55ab436 Comment out user_id calculation using address books.
Dean Looyengoed
parents: 714
diff changeset
   508
                                            if (((item.Email1Address != null) &&
41bac55ab436 Comment out user_id calculation using address books.
Dean Looyengoed
parents: 714
diff changeset
   509
                                                 string.Equals(item.Email1Address, address, StringComparison.OrdinalIgnoreCase)) ||
41bac55ab436 Comment out user_id calculation using address books.
Dean Looyengoed
parents: 714
diff changeset
   510
                                                ((item.Email2Address != null) &&
41bac55ab436 Comment out user_id calculation using address books.
Dean Looyengoed
parents: 714
diff changeset
   511
                                                 string.Equals(item.Email2Address, address, StringComparison.OrdinalIgnoreCase)) ||
41bac55ab436 Comment out user_id calculation using address books.
Dean Looyengoed
parents: 714
diff changeset
   512
                                                ((item.Email3Address != null) &&
41bac55ab436 Comment out user_id calculation using address books.
Dean Looyengoed
parents: 714
diff changeset
   513
                                                 string.Equals(item.Email3Address, address, StringComparison.OrdinalIgnoreCase)))
41bac55ab436 Comment out user_id calculation using address books.
Dean Looyengoed
parents: 714
diff changeset
   514
                                            {
41bac55ab436 Comment out user_id calculation using address books.
Dean Looyengoed
parents: 714
diff changeset
   515
                                                forceUnencrypted = true;
41bac55ab436 Comment out user_id calculation using address books.
Dean Looyengoed
parents: 714
diff changeset
   516
                                                break;
41bac55ab436 Comment out user_id calculation using address books.
Dean Looyengoed
parents: 714
diff changeset
   517
                                            }
41bac55ab436 Comment out user_id calculation using address books.
Dean Looyengoed
parents: 714
diff changeset
   518
                                        }
41bac55ab436 Comment out user_id calculation using address books.
Dean Looyengoed
parents: 714
diff changeset
   519
41bac55ab436 Comment out user_id calculation using address books.
Dean Looyengoed
parents: 714
diff changeset
   520
                                        // Release objects
41bac55ab436 Comment out user_id calculation using address books.
Dean Looyengoed
parents: 714
diff changeset
   521
                                        Marshal.ReleaseComObject(item);
41bac55ab436 Comment out user_id calculation using address books.
Dean Looyengoed
parents: 714
diff changeset
   522
                                        item = null;
41bac55ab436 Comment out user_id calculation using address books.
Dean Looyengoed
parents: 714
diff changeset
   523
                                    }
625
d4af7230450f Implement contact-based send unencrypted in the message processor.
Dean Looyengoed
parents: 624
diff changeset
   524
                                }
d4af7230450f Implement contact-based send unencrypted in the message processor.
Dean Looyengoed
parents: 624
diff changeset
   525
                            }
d4af7230450f Implement contact-based send unencrypted in the message processor.
Dean Looyengoed
parents: 624
diff changeset
   526
                        }
d4af7230450f Implement contact-based send unencrypted in the message processor.
Dean Looyengoed
parents: 624
diff changeset
   527
d4af7230450f Implement contact-based send unencrypted in the message processor.
Dean Looyengoed
parents: 624
diff changeset
   528
                        // Break if 
664
9dcf25b27787 Rename send unencrypted to force unencrypted throughout code.
Dean Looyengoed
parents: 660
diff changeset
   529
                        if (forceUnencrypted)
625
d4af7230450f Implement contact-based send unencrypted in the message processor.
Dean Looyengoed
parents: 624
diff changeset
   530
                        {
487
b27803e13913 Add initial methods to support contact-based send unencrypted message.
Dean Looyengoed
parents: 482
diff changeset
   531
                            break;
b27803e13913 Add initial methods to support contact-based send unencrypted message.
Dean Looyengoed
parents: 482
diff changeset
   532
                        }
625
d4af7230450f Implement contact-based send unencrypted in the message processor.
Dean Looyengoed
parents: 624
diff changeset
   533
d4af7230450f Implement contact-based send unencrypted in the message processor.
Dean Looyengoed
parents: 624
diff changeset
   534
                        // Release objects
d4af7230450f Implement contact-based send unencrypted in the message processor.
Dean Looyengoed
parents: 624
diff changeset
   535
                        if (store != null)
d4af7230450f Implement contact-based send unencrypted in the message processor.
Dean Looyengoed
parents: 624
diff changeset
   536
                        {
d4af7230450f Implement contact-based send unencrypted in the message processor.
Dean Looyengoed
parents: 624
diff changeset
   537
                            Marshal.ReleaseComObject(store);
d4af7230450f Implement contact-based send unencrypted in the message processor.
Dean Looyengoed
parents: 624
diff changeset
   538
                            store = null;
d4af7230450f Implement contact-based send unencrypted in the message processor.
Dean Looyengoed
parents: 624
diff changeset
   539
                        }
d4af7230450f Implement contact-based send unencrypted in the message processor.
Dean Looyengoed
parents: 624
diff changeset
   540
d4af7230450f Implement contact-based send unencrypted in the message processor.
Dean Looyengoed
parents: 624
diff changeset
   541
                        if (contactFolder != null)
d4af7230450f Implement contact-based send unencrypted in the message processor.
Dean Looyengoed
parents: 624
diff changeset
   542
                        {
d4af7230450f Implement contact-based send unencrypted in the message processor.
Dean Looyengoed
parents: 624
diff changeset
   543
                            Marshal.ReleaseComObject(contactFolder);
d4af7230450f Implement contact-based send unencrypted in the message processor.
Dean Looyengoed
parents: 624
diff changeset
   544
                            contactFolder = null;
d4af7230450f Implement contact-based send unencrypted in the message processor.
Dean Looyengoed
parents: 624
diff changeset
   545
                        }
d4af7230450f Implement contact-based send unencrypted in the message processor.
Dean Looyengoed
parents: 624
diff changeset
   546
d4af7230450f Implement contact-based send unencrypted in the message processor.
Dean Looyengoed
parents: 624
diff changeset
   547
                        if (item != null)
d4af7230450f Implement contact-based send unencrypted in the message processor.
Dean Looyengoed
parents: 624
diff changeset
   548
                        {
d4af7230450f Implement contact-based send unencrypted in the message processor.
Dean Looyengoed
parents: 624
diff changeset
   549
                            Marshal.ReleaseComObject(item);
d4af7230450f Implement contact-based send unencrypted in the message processor.
Dean Looyengoed
parents: 624
diff changeset
   550
                            item = null;
d4af7230450f Implement contact-based send unencrypted in the message processor.
Dean Looyengoed
parents: 624
diff changeset
   551
                        }
d4af7230450f Implement contact-based send unencrypted in the message processor.
Dean Looyengoed
parents: 624
diff changeset
   552
d4af7230450f Implement contact-based send unencrypted in the message processor.
Dean Looyengoed
parents: 624
diff changeset
   553
                        if (items != null)
d4af7230450f Implement contact-based send unencrypted in the message processor.
Dean Looyengoed
parents: 624
diff changeset
   554
                        {
d4af7230450f Implement contact-based send unencrypted in the message processor.
Dean Looyengoed
parents: 624
diff changeset
   555
                            Marshal.ReleaseComObject(items);
d4af7230450f Implement contact-based send unencrypted in the message processor.
Dean Looyengoed
parents: 624
diff changeset
   556
                            items = null;
d4af7230450f Implement contact-based send unencrypted in the message processor.
Dean Looyengoed
parents: 624
diff changeset
   557
                        }
487
b27803e13913 Add initial methods to support contact-based send unencrypted message.
Dean Looyengoed
parents: 482
diff changeset
   558
                    }
b27803e13913 Add initial methods to support contact-based send unencrypted message.
Dean Looyengoed
parents: 482
diff changeset
   559
                }
b27803e13913 Add initial methods to support contact-based send unencrypted message.
Dean Looyengoed
parents: 482
diff changeset
   560
            }
b27803e13913 Add initial methods to support contact-based send unencrypted message.
Dean Looyengoed
parents: 482
diff changeset
   561
            catch (Exception ex)
b27803e13913 Add initial methods to support contact-based send unencrypted message.
Dean Looyengoed
parents: 482
diff changeset
   562
            {
660
e5346cda03ff Merge GlobalConst and GlobalExceptionHandler into only one Global class.
Dean Looyengoed
parents: 659
diff changeset
   563
                Global.StopAndSendCrashReport(ex);
487
b27803e13913 Add initial methods to support contact-based send unencrypted message.
Dean Looyengoed
parents: 482
diff changeset
   564
            }
b27803e13913 Add initial methods to support contact-based send unencrypted message.
Dean Looyengoed
parents: 482
diff changeset
   565
            finally
b27803e13913 Add initial methods to support contact-based send unencrypted message.
Dean Looyengoed
parents: 482
diff changeset
   566
            {
625
d4af7230450f Implement contact-based send unencrypted in the message processor.
Dean Looyengoed
parents: 624
diff changeset
   567
                // Release objects
d4af7230450f Implement contact-based send unencrypted in the message processor.
Dean Looyengoed
parents: 624
diff changeset
   568
                if (store != null)
d4af7230450f Implement contact-based send unencrypted in the message processor.
Dean Looyengoed
parents: 624
diff changeset
   569
                {
d4af7230450f Implement contact-based send unencrypted in the message processor.
Dean Looyengoed
parents: 624
diff changeset
   570
                    Marshal.ReleaseComObject(store);
d4af7230450f Implement contact-based send unencrypted in the message processor.
Dean Looyengoed
parents: 624
diff changeset
   571
                    store = null;
d4af7230450f Implement contact-based send unencrypted in the message processor.
Dean Looyengoed
parents: 624
diff changeset
   572
                }
d4af7230450f Implement contact-based send unencrypted in the message processor.
Dean Looyengoed
parents: 624
diff changeset
   573
d4af7230450f Implement contact-based send unencrypted in the message processor.
Dean Looyengoed
parents: 624
diff changeset
   574
                if (stores != null)
d4af7230450f Implement contact-based send unencrypted in the message processor.
Dean Looyengoed
parents: 624
diff changeset
   575
                {
d4af7230450f Implement contact-based send unencrypted in the message processor.
Dean Looyengoed
parents: 624
diff changeset
   576
                    Marshal.ReleaseComObject(stores);
d4af7230450f Implement contact-based send unencrypted in the message processor.
Dean Looyengoed
parents: 624
diff changeset
   577
                    stores = null;
d4af7230450f Implement contact-based send unencrypted in the message processor.
Dean Looyengoed
parents: 624
diff changeset
   578
                }
d4af7230450f Implement contact-based send unencrypted in the message processor.
Dean Looyengoed
parents: 624
diff changeset
   579
487
b27803e13913 Add initial methods to support contact-based send unencrypted message.
Dean Looyengoed
parents: 482
diff changeset
   580
                if (contactFolder != null)
b27803e13913 Add initial methods to support contact-based send unencrypted message.
Dean Looyengoed
parents: 482
diff changeset
   581
                {
b27803e13913 Add initial methods to support contact-based send unencrypted message.
Dean Looyengoed
parents: 482
diff changeset
   582
                    Marshal.ReleaseComObject(contactFolder);
b27803e13913 Add initial methods to support contact-based send unencrypted message.
Dean Looyengoed
parents: 482
diff changeset
   583
                    contactFolder = null;
b27803e13913 Add initial methods to support contact-based send unencrypted message.
Dean Looyengoed
parents: 482
diff changeset
   584
                }
625
d4af7230450f Implement contact-based send unencrypted in the message processor.
Dean Looyengoed
parents: 624
diff changeset
   585
d4af7230450f Implement contact-based send unencrypted in the message processor.
Dean Looyengoed
parents: 624
diff changeset
   586
                if (item != null)
d4af7230450f Implement contact-based send unencrypted in the message processor.
Dean Looyengoed
parents: 624
diff changeset
   587
                {
d4af7230450f Implement contact-based send unencrypted in the message processor.
Dean Looyengoed
parents: 624
diff changeset
   588
                    Marshal.ReleaseComObject(item);
d4af7230450f Implement contact-based send unencrypted in the message processor.
Dean Looyengoed
parents: 624
diff changeset
   589
                    item = null;
d4af7230450f Implement contact-based send unencrypted in the message processor.
Dean Looyengoed
parents: 624
diff changeset
   590
                }
d4af7230450f Implement contact-based send unencrypted in the message processor.
Dean Looyengoed
parents: 624
diff changeset
   591
d4af7230450f Implement contact-based send unencrypted in the message processor.
Dean Looyengoed
parents: 624
diff changeset
   592
                if (items != null)
d4af7230450f Implement contact-based send unencrypted in the message processor.
Dean Looyengoed
parents: 624
diff changeset
   593
                {
d4af7230450f Implement contact-based send unencrypted in the message processor.
Dean Looyengoed
parents: 624
diff changeset
   594
                    Marshal.ReleaseComObject(items);
d4af7230450f Implement contact-based send unencrypted in the message processor.
Dean Looyengoed
parents: 624
diff changeset
   595
                    items = null;
d4af7230450f Implement contact-based send unencrypted in the message processor.
Dean Looyengoed
parents: 624
diff changeset
   596
                }
d4af7230450f Implement contact-based send unencrypted in the message processor.
Dean Looyengoed
parents: 624
diff changeset
   597
d4af7230450f Implement contact-based send unencrypted in the message processor.
Dean Looyengoed
parents: 624
diff changeset
   598
                if (ns != null)
d4af7230450f Implement contact-based send unencrypted in the message processor.
Dean Looyengoed
parents: 624
diff changeset
   599
                {
d4af7230450f Implement contact-based send unencrypted in the message processor.
Dean Looyengoed
parents: 624
diff changeset
   600
                    Marshal.ReleaseComObject(ns);
d4af7230450f Implement contact-based send unencrypted in the message processor.
Dean Looyengoed
parents: 624
diff changeset
   601
                    ns = null;
d4af7230450f Implement contact-based send unencrypted in the message processor.
Dean Looyengoed
parents: 624
diff changeset
   602
                }
487
b27803e13913 Add initial methods to support contact-based send unencrypted message.
Dean Looyengoed
parents: 482
diff changeset
   603
            }
b27803e13913 Add initial methods to support contact-based send unencrypted message.
Dean Looyengoed
parents: 482
diff changeset
   604
664
9dcf25b27787 Rename send unencrypted to force unencrypted throughout code.
Dean Looyengoed
parents: 660
diff changeset
   605
            return (forceUnencrypted);
487
b27803e13913 Add initial methods to support contact-based send unencrypted message.
Dean Looyengoed
parents: 482
diff changeset
   606
        }
b27803e13913 Add initial methods to support contact-based send unencrypted message.
Dean Looyengoed
parents: 482
diff changeset
   607
b27803e13913 Add initial methods to support contact-based send unencrypted message.
Dean Looyengoed
parents: 482
diff changeset
   608
        /// <summary>
413
6a780cc16111 Move all get from/sender methods to the PEPMessage.
Dean Looyengoed
parents: 384
diff changeset
   609
        /// Gets the pEp user ID (Outlook EntryID) for the given address.
362
867beb89ee19 Move GetUserIDFromAddress from the CryptableMailItem to ThisAddIn.
Dean Looyengoed
parents: 361
diff changeset
   610
        /// </summary>
867beb89ee19 Move GetUserIDFromAddress from the CryptableMailItem to ThisAddIn.
Dean Looyengoed
parents: 361
diff changeset
   611
        /// <param name="address">The address to get the user ID for.</param>
867beb89ee19 Move GetUserIDFromAddress from the CryptableMailItem to ThisAddIn.
Dean Looyengoed
parents: 361
diff changeset
   612
        /// <returns>The user ID (Outlook EntryID) for the given address</returns>
501
158c070826dd Remove username parameter from GetUserID calculation.
Dean Looyengoed
parents: 500
diff changeset
   613
        public string GetUserID(string address)
362
867beb89ee19 Move GetUserIDFromAddress from the CryptableMailItem to ThisAddIn.
Dean Looyengoed
parents: 361
diff changeset
   614
        {
511
4a970a30be20 Get rid of unnecessary null/empty check as the structure of the method has changed.
Dean Looyengoed
parents: 510
diff changeset
   615
            string id = null;
714
761f853c4c0f For all Myself identities, calculate user ID using a hash of the windows Environment.UserName;
Dean Looyengoed
parents: 686
diff changeset
   616
            string myselfStr;
761f853c4c0f For all Myself identities, calculate user ID using a hash of the windows Environment.UserName;
Dean Looyengoed
parents: 686
diff changeset
   617
            byte[] computedHash;
761f853c4c0f For all Myself identities, calculate user ID using a hash of the windows Environment.UserName;
Dean Looyengoed
parents: 686
diff changeset
   618
            SHA256Managed hashGenerator = new SHA256Managed();
761f853c4c0f For all Myself identities, calculate user ID using a hash of the windows Environment.UserName;
Dean Looyengoed
parents: 686
diff changeset
   619
            StringBuilder strBuilder;
507
d0b1586c5235 Add fallback to GetUserID that searches address book entry-by-entry.
Dean Looyengoed
parents: 502
diff changeset
   620
474
a27dbbb2dd88 Add try/catch and error handling around several ThisAddIn methods.
Dean Looyengoed
parents: 473
diff changeset
   621
            try
362
867beb89ee19 Move GetUserIDFromAddress from the CryptableMailItem to ThisAddIn.
Dean Looyengoed
parents: 361
diff changeset
   622
            {
608
38ba4b8308f2 Update GetUserID method to cache IDs, skip Exchange servers and create new contacts if necessary.
Dean Looyengoed
parents: 607
diff changeset
   623
                if (string.IsNullOrEmpty(address) == false)
569
74cd9fc6dc6e Cleanup UserID calculation method.
Dean Looyengoed
parents: 566
diff changeset
   624
                {
608
38ba4b8308f2 Update GetUserID method to cache IDs, skip Exchange servers and create new contacts if necessary.
Dean Looyengoed
parents: 607
diff changeset
   625
                    // Search cache
38ba4b8308f2 Update GetUserID method to cache IDs, skip Exchange servers and create new contacts if necessary.
Dean Looyengoed
parents: 607
diff changeset
   626
                    if (id == null)
511
4a970a30be20 Get rid of unnecessary null/empty check as the structure of the method has changed.
Dean Looyengoed
parents: 510
diff changeset
   627
                    {
569
74cd9fc6dc6e Cleanup UserID calculation method.
Dean Looyengoed
parents: 566
diff changeset
   628
                        try
474
a27dbbb2dd88 Add try/catch and error handling around several ThisAddIn methods.
Dean Looyengoed
parents: 473
diff changeset
   629
                        {
608
38ba4b8308f2 Update GetUserID method to cache IDs, skip Exchange servers and create new contacts if necessary.
Dean Looyengoed
parents: 607
diff changeset
   630
                            id = this.userIDCache[address];
569
74cd9fc6dc6e Cleanup UserID calculation method.
Dean Looyengoed
parents: 566
diff changeset
   631
                        }
74cd9fc6dc6e Cleanup UserID calculation method.
Dean Looyengoed
parents: 566
diff changeset
   632
                        catch
74cd9fc6dc6e Cleanup UserID calculation method.
Dean Looyengoed
parents: 566
diff changeset
   633
                        {
608
38ba4b8308f2 Update GetUserID method to cache IDs, skip Exchange servers and create new contacts if necessary.
Dean Looyengoed
parents: 607
diff changeset
   634
                            id = null;
510
500cb064737d Remove try/catch around GetUserID that could hide errors.
Dean Looyengoed
parents: 508
diff changeset
   635
                        }
511
4a970a30be20 Get rid of unnecessary null/empty check as the structure of the method has changed.
Dean Looyengoed
parents: 510
diff changeset
   636
                    }
477
23462dc9e619 Release COM objects in GetUserID.
Dean Looyengoed
parents: 475
diff changeset
   637
714
761f853c4c0f For all Myself identities, calculate user ID using a hash of the windows Environment.UserName;
Dean Looyengoed
parents: 686
diff changeset
   638
                    // Handle myself user ID calculation
761f853c4c0f For all Myself identities, calculate user ID using a hash of the windows Environment.UserName;
Dean Looyengoed
parents: 686
diff changeset
   639
                    if (id == null)
761f853c4c0f For all Myself identities, calculate user ID using a hash of the windows Environment.UserName;
Dean Looyengoed
parents: 686
diff changeset
   640
                    {
761f853c4c0f For all Myself identities, calculate user ID using a hash of the windows Environment.UserName;
Dean Looyengoed
parents: 686
diff changeset
   641
                        // Check if the address is myself
761f853c4c0f For all Myself identities, calculate user ID using a hash of the windows Environment.UserName;
Dean Looyengoed
parents: 686
diff changeset
   642
                        if (PEPIdentity.GetIsMyIdentity(address))
761f853c4c0f For all Myself identities, calculate user ID using a hash of the windows Environment.UserName;
Dean Looyengoed
parents: 686
diff changeset
   643
                        {
761f853c4c0f For all Myself identities, calculate user ID using a hash of the windows Environment.UserName;
Dean Looyengoed
parents: 686
diff changeset
   644
                            strBuilder = new StringBuilder();
761f853c4c0f For all Myself identities, calculate user ID using a hash of the windows Environment.UserName;
Dean Looyengoed
parents: 686
diff changeset
   645
761f853c4c0f For all Myself identities, calculate user ID using a hash of the windows Environment.UserName;
Dean Looyengoed
parents: 686
diff changeset
   646
                            // Note: pEp_for_Outlook is hardcoded here because it should not change
725
41bac55ab436 Comment out user_id calculation using address books.
Dean Looyengoed
parents: 714
diff changeset
   647
                            myselfStr = "pEp_for_Outlook_" + Environment.UserName;
714
761f853c4c0f For all Myself identities, calculate user ID using a hash of the windows Environment.UserName;
Dean Looyengoed
parents: 686
diff changeset
   648
                            computedHash = hashGenerator.ComputeHash(Encoding.Unicode.GetBytes(myselfStr));
725
41bac55ab436 Comment out user_id calculation using address books.
Dean Looyengoed
parents: 714
diff changeset
   649
714
761f853c4c0f For all Myself identities, calculate user ID using a hash of the windows Environment.UserName;
Dean Looyengoed
parents: 686
diff changeset
   650
                            foreach (byte b in computedHash)
761f853c4c0f For all Myself identities, calculate user ID using a hash of the windows Environment.UserName;
Dean Looyengoed
parents: 686
diff changeset
   651
                            {
761f853c4c0f For all Myself identities, calculate user ID using a hash of the windows Environment.UserName;
Dean Looyengoed
parents: 686
diff changeset
   652
                                strBuilder.Append(b.ToString("x2"));
761f853c4c0f For all Myself identities, calculate user ID using a hash of the windows Environment.UserName;
Dean Looyengoed
parents: 686
diff changeset
   653
                            }
761f853c4c0f For all Myself identities, calculate user ID using a hash of the windows Environment.UserName;
Dean Looyengoed
parents: 686
diff changeset
   654
761f853c4c0f For all Myself identities, calculate user ID using a hash of the windows Environment.UserName;
Dean Looyengoed
parents: 686
diff changeset
   655
                            id = strBuilder.ToString().ToUpper();
761f853c4c0f For all Myself identities, calculate user ID using a hash of the windows Environment.UserName;
Dean Looyengoed
parents: 686
diff changeset
   656
                            this.userIDCache[address] = id;
761f853c4c0f For all Myself identities, calculate user ID using a hash of the windows Environment.UserName;
Dean Looyengoed
parents: 686
diff changeset
   657
                        }
761f853c4c0f For all Myself identities, calculate user ID using a hash of the windows Environment.UserName;
Dean Looyengoed
parents: 686
diff changeset
   658
                    }
761f853c4c0f For all Myself identities, calculate user ID using a hash of the windows Environment.UserName;
Dean Looyengoed
parents: 686
diff changeset
   659
725
41bac55ab436 Comment out user_id calculation using address books.
Dean Looyengoed
parents: 714
diff changeset
   660
                    // TODO: check against contact list for a contact EntryID
41bac55ab436 Comment out user_id calculation using address books.
Dean Looyengoed
parents: 714
diff changeset
   661
41bac55ab436 Comment out user_id calculation using address books.
Dean Looyengoed
parents: 714
diff changeset
   662
                    // Use the address itself as a user ID (this can be removed after virtual users are supported)
41bac55ab436 Comment out user_id calculation using address books.
Dean Looyengoed
parents: 714
diff changeset
   663
                    if (id == null)
41bac55ab436 Comment out user_id calculation using address books.
Dean Looyengoed
parents: 714
diff changeset
   664
                    {
41bac55ab436 Comment out user_id calculation using address books.
Dean Looyengoed
parents: 714
diff changeset
   665
                        id = "ID_" + address.ToUpper().Trim();
41bac55ab436 Comment out user_id calculation using address books.
Dean Looyengoed
parents: 714
diff changeset
   666
                        this.userIDCache[address] = id;
41bac55ab436 Comment out user_id calculation using address books.
Dean Looyengoed
parents: 714
diff changeset
   667
                    }
362
867beb89ee19 Move GetUserIDFromAddress from the CryptableMailItem to ThisAddIn.
Dean Looyengoed
parents: 361
diff changeset
   668
                }
474
a27dbbb2dd88 Add try/catch and error handling around several ThisAddIn methods.
Dean Looyengoed
parents: 473
diff changeset
   669
            }
a27dbbb2dd88 Add try/catch and error handling around several ThisAddIn methods.
Dean Looyengoed
parents: 473
diff changeset
   670
            catch (Exception ex)
a27dbbb2dd88 Add try/catch and error handling around several ThisAddIn methods.
Dean Looyengoed
parents: 473
diff changeset
   671
            {
660
e5346cda03ff Merge GlobalConst and GlobalExceptionHandler into only one Global class.
Dean Looyengoed
parents: 659
diff changeset
   672
                Global.StopAndSendCrashReport(ex);
362
867beb89ee19 Move GetUserIDFromAddress from the CryptableMailItem to ThisAddIn.
Dean Looyengoed
parents: 361
diff changeset
   673
            }
867beb89ee19 Move GetUserIDFromAddress from the CryptableMailItem to ThisAddIn.
Dean Looyengoed
parents: 361
diff changeset
   674
587
cecb650d6cd8 Improve logging including the GetUserID method not finding an ID.
Dean Looyengoed
parents: 586
diff changeset
   675
            // Log if no ID was found
cecb650d6cd8 Improve logging including the GetUserID method not finding an ID.
Dean Looyengoed
parents: 586
diff changeset
   676
            if (string.IsNullOrWhiteSpace(id))
cecb650d6cd8 Improve logging including the GetUserID method not finding an ID.
Dean Looyengoed
parents: 586
diff changeset
   677
            {
660
e5346cda03ff Merge GlobalConst and GlobalExceptionHandler into only one Global class.
Dean Looyengoed
parents: 659
diff changeset
   678
                Global.AddToLog("GetUserID: failed to find an ID.");
587
cecb650d6cd8 Improve logging including the GetUserID method not finding an ID.
Dean Looyengoed
parents: 586
diff changeset
   679
            }
cecb650d6cd8 Improve logging including the GetUserID method not finding an ID.
Dean Looyengoed
parents: 586
diff changeset
   680
511
4a970a30be20 Get rid of unnecessary null/empty check as the structure of the method has changed.
Dean Looyengoed
parents: 510
diff changeset
   681
            return (id);
362
867beb89ee19 Move GetUserIDFromAddress from the CryptableMailItem to ThisAddIn.
Dean Looyengoed
parents: 361
diff changeset
   682
        }
867beb89ee19 Move GetUserIDFromAddress from the CryptableMailItem to ThisAddIn.
Dean Looyengoed
parents: 361
diff changeset
   683
867beb89ee19 Move GetUserIDFromAddress from the CryptableMailItem to ThisAddIn.
Dean Looyengoed
parents: 361
diff changeset
   684
        /// <summary>
738
ac649e82fd98 Create and save the sent mail item exactly the same as how it was composed.
Dean Looyengoed
parents: 726
diff changeset
   685
        /// Create a new Outlook MailItem from the given PEPMessage and send it.
ac649e82fd98 Create and save the sent mail item exactly the same as how it was composed.
Dean Looyengoed
parents: 726
diff changeset
   686
        /// The sent message will not be processed by the 'Application_ItemSend' event.
455
a4158ad1f4b7 Add method to create a new Outlook MailItem and send it without processing.
Dean Looyengoed
parents: 453
diff changeset
   687
        /// </summary>
a4158ad1f4b7 Add method to create a new Outlook MailItem and send it without processing.
Dean Looyengoed
parents: 453
diff changeset
   688
        /// <param name="message">The message to send.</param>
475
7a23ec4d8b28 Add deleteAfterSend parameter in SendWithoutProcessing method.
Dean Looyengoed
parents: 474
diff changeset
   689
        /// <param name="deleteAfterSend">Whether the message is deleted after sending (true) or a copy is saved (false).</param>
7a23ec4d8b28 Add deleteAfterSend parameter in SendWithoutProcessing method.
Dean Looyengoed
parents: 474
diff changeset
   690
        public void SendWithoutProcessing(PEPMessage message,
7a23ec4d8b28 Add deleteAfterSend parameter in SendWithoutProcessing method.
Dean Looyengoed
parents: 474
diff changeset
   691
                                          bool deleteAfterSend)
455
a4158ad1f4b7 Add method to create a new Outlook MailItem and send it without processing.
Dean Looyengoed
parents: 453
diff changeset
   692
        {
a4158ad1f4b7 Add method to create a new Outlook MailItem and send it without processing.
Dean Looyengoed
parents: 453
diff changeset
   693
            Outlook.MailItem newItem;
a4158ad1f4b7 Add method to create a new Outlook MailItem and send it without processing.
Dean Looyengoed
parents: 453
diff changeset
   694
a4158ad1f4b7 Add method to create a new Outlook MailItem and send it without processing.
Dean Looyengoed
parents: 453
diff changeset
   695
            newItem = Application.CreateItem(Outlook.OlItemType.olMailItem);
586
2c2bfd7f1e43 Improve handling of optional properties in PEPMessage.
Dean Looyengoed
parents: 576
diff changeset
   696
            message.ApplyTo(newItem, false); // Do NOT include optional properties!
455
a4158ad1f4b7 Add method to create a new Outlook MailItem and send it without processing.
Dean Looyengoed
parents: 453
diff changeset
   697
502
4b4d88db09eb When sending a PEPMessage, set the UseTNEF property to false to avoid winmail.dat in some circumstances.
Dean Looyengoed
parents: 501
diff changeset
   698
            // Do not allow TNEF/RTF format with 'winmail.dat' attachment
548
626fa51f7131 Use MAPIHelper throughout code. Also now clear UNSENT flag when creating new Mirrors.
Dean Looyengoed
parents: 540
diff changeset
   699
            MAPIHelper.SetProperty(newItem, MAPIHelper.PR_USE_TNEF, false);
570
21d996cd35e8 Stop searching through Exchange AddressLists due to performance.
Dean Looyengoed
parents: 569
diff changeset
   700
565
ba35cfbfa0ee Stop setting user property for 'do not process' and instead use a do not process list.
Dean Looyengoed
parents: 562
diff changeset
   701
            // Save the new item to the default folder of the sending account
ba35cfbfa0ee Stop setting user property for 'do not process' and instead use a do not process list.
Dean Looyengoed
parents: 562
diff changeset
   702
            // This must be done so an EntryID is created.
ba35cfbfa0ee Stop setting user property for 'do not process' and instead use a do not process list.
Dean Looyengoed
parents: 562
diff changeset
   703
            newItem.Save();
502
4b4d88db09eb When sending a PEPMessage, set the UseTNEF property to false to avoid winmail.dat in some circumstances.
Dean Looyengoed
parents: 501
diff changeset
   704
565
ba35cfbfa0ee Stop setting user property for 'do not process' and instead use a do not process list.
Dean Looyengoed
parents: 562
diff changeset
   705
            // Set property to not process on send
ba35cfbfa0ee Stop setting user property for 'do not process' and instead use a do not process list.
Dean Looyengoed
parents: 562
diff changeset
   706
            this.doNotProcessList.Add(newItem.EntryID);
ba35cfbfa0ee Stop setting user property for 'do not process' and instead use a do not process list.
Dean Looyengoed
parents: 562
diff changeset
   707
ba35cfbfa0ee Stop setting user property for 'do not process' and instead use a do not process list.
Dean Looyengoed
parents: 562
diff changeset
   708
            // Send
475
7a23ec4d8b28 Add deleteAfterSend parameter in SendWithoutProcessing method.
Dean Looyengoed
parents: 474
diff changeset
   709
            newItem.DeleteAfterSubmit = deleteAfterSend;
465
3f5d92b648ce Make SendWithoutProcessing public.
Dean Looyengoed
parents: 462
diff changeset
   710
            ((Outlook._MailItem)newItem).Send();
455
a4158ad1f4b7 Add method to create a new Outlook MailItem and send it without processing.
Dean Looyengoed
parents: 453
diff changeset
   711
a4158ad1f4b7 Add method to create a new Outlook MailItem and send it without processing.
Dean Looyengoed
parents: 453
diff changeset
   712
            Marshal.ReleaseComObject(newItem);
a4158ad1f4b7 Add method to create a new Outlook MailItem and send it without processing.
Dean Looyengoed
parents: 453
diff changeset
   713
            newItem = null;
a4158ad1f4b7 Add method to create a new Outlook MailItem and send it without processing.
Dean Looyengoed
parents: 453
diff changeset
   714
a4158ad1f4b7 Add method to create a new Outlook MailItem and send it without processing.
Dean Looyengoed
parents: 453
diff changeset
   715
            return;
a4158ad1f4b7 Add method to create a new Outlook MailItem and send it without processing.
Dean Looyengoed
parents: 453
diff changeset
   716
        }
a4158ad1f4b7 Add method to create a new Outlook MailItem and send it without processing.
Dean Looyengoed
parents: 453
diff changeset
   717
a4158ad1f4b7 Add method to create a new Outlook MailItem and send it without processing.
Dean Looyengoed
parents: 453
diff changeset
   718
        /// <summary>
738
ac649e82fd98 Create and save the sent mail item exactly the same as how it was composed.
Dean Looyengoed
parents: 726
diff changeset
   719
        /// Create a new 'sent' Outlook MailItem and place it in the given sent folder.
ac649e82fd98 Create and save the sent mail item exactly the same as how it was composed.
Dean Looyengoed
parents: 726
diff changeset
   720
        /// </summary>
ac649e82fd98 Create and save the sent mail item exactly the same as how it was composed.
Dean Looyengoed
parents: 726
diff changeset
   721
        /// <param name="sentFolder">The folder to place the sent mail item within.</param>
ac649e82fd98 Create and save the sent mail item exactly the same as how it was composed.
Dean Looyengoed
parents: 726
diff changeset
   722
        /// <param name="sentMessage">The message that is sent.</param>
ac649e82fd98 Create and save the sent mail item exactly the same as how it was composed.
Dean Looyengoed
parents: 726
diff changeset
   723
        private void CreateNewSentMail(Outlook.Folder sentFolder,
ac649e82fd98 Create and save the sent mail item exactly the same as how it was composed.
Dean Looyengoed
parents: 726
diff changeset
   724
                                       PEPMessage sentMessage)
ac649e82fd98 Create and save the sent mail item exactly the same as how it was composed.
Dean Looyengoed
parents: 726
diff changeset
   725
        {
ac649e82fd98 Create and save the sent mail item exactly the same as how it was composed.
Dean Looyengoed
parents: 726
diff changeset
   726
            System.Int32 messageFlags;
ac649e82fd98 Create and save the sent mail item exactly the same as how it was composed.
Dean Looyengoed
parents: 726
diff changeset
   727
            Outlook.MailItem sentMailItem = null;
ac649e82fd98 Create and save the sent mail item exactly the same as how it was composed.
Dean Looyengoed
parents: 726
diff changeset
   728
ac649e82fd98 Create and save the sent mail item exactly the same as how it was composed.
Dean Looyengoed
parents: 726
diff changeset
   729
            try
ac649e82fd98 Create and save the sent mail item exactly the same as how it was composed.
Dean Looyengoed
parents: 726
diff changeset
   730
            {
ac649e82fd98 Create and save the sent mail item exactly the same as how it was composed.
Dean Looyengoed
parents: 726
diff changeset
   731
                // Create the basic sent mail item
ac649e82fd98 Create and save the sent mail item exactly the same as how it was composed.
Dean Looyengoed
parents: 726
diff changeset
   732
                sentMailItem = (Outlook.MailItem)sentFolder.Items.Add(Outlook.OlItemType.olMailItem);
ac649e82fd98 Create and save the sent mail item exactly the same as how it was composed.
Dean Looyengoed
parents: 726
diff changeset
   733
                sentMessage.ApplyTo(sentMailItem);
ac649e82fd98 Create and save the sent mail item exactly the same as how it was composed.
Dean Looyengoed
parents: 726
diff changeset
   734
ac649e82fd98 Create and save the sent mail item exactly the same as how it was composed.
Dean Looyengoed
parents: 726
diff changeset
   735
                // Set the sender
ac649e82fd98 Create and save the sent mail item exactly the same as how it was composed.
Dean Looyengoed
parents: 726
diff changeset
   736
                MAPIHelper.SetProperty(sentMailItem, MAPIHelper.PR_SENDER_NAME, sentMessage.From.Username);
ac649e82fd98 Create and save the sent mail item exactly the same as how it was composed.
Dean Looyengoed
parents: 726
diff changeset
   737
                MAPIHelper.SetProperty(sentMailItem, MAPIHelper.PR_SENDER_EMAIL_ADDRESS, sentMessage.From.Address);
ac649e82fd98 Create and save the sent mail item exactly the same as how it was composed.
Dean Looyengoed
parents: 726
diff changeset
   738
ac649e82fd98 Create and save the sent mail item exactly the same as how it was composed.
Dean Looyengoed
parents: 726
diff changeset
   739
                // Set the date and time the mail item was sent
ac649e82fd98 Create and save the sent mail item exactly the same as how it was composed.
Dean Looyengoed
parents: 726
diff changeset
   740
                MAPIHelper.SetProperty(sentMailItem, MAPIHelper.PR_CLIENT_SUBMIT_TIME, DateTime.Now.ToUniversalTime());
ac649e82fd98 Create and save the sent mail item exactly the same as how it was composed.
Dean Looyengoed
parents: 726
diff changeset
   741
ac649e82fd98 Create and save the sent mail item exactly the same as how it was composed.
Dean Looyengoed
parents: 726
diff changeset
   742
                // Set flags
ac649e82fd98 Create and save the sent mail item exactly the same as how it was composed.
Dean Looyengoed
parents: 726
diff changeset
   743
                messageFlags = (System.Int32)MAPIHelper.GetProperty(sentMailItem, MAPIHelper.PR_MESSAGE_FLAGS);
ac649e82fd98 Create and save the sent mail item exactly the same as how it was composed.
Dean Looyengoed
parents: 726
diff changeset
   744
                messageFlags &= ~((System.Int32)MAPIHelper.MSGFLAGS.MSGFLAG_UNSENT);  // Clear UNSENT flag -- must be done before save
ac649e82fd98 Create and save the sent mail item exactly the same as how it was composed.
Dean Looyengoed
parents: 726
diff changeset
   745
                messageFlags |= ((System.Int32)MAPIHelper.MSGFLAGS.MSGFLAG_READ);     // Mark as read
ac649e82fd98 Create and save the sent mail item exactly the same as how it was composed.
Dean Looyengoed
parents: 726
diff changeset
   746
                MAPIHelper.SetProperty(sentMailItem, MAPIHelper.PR_MESSAGE_FLAGS, messageFlags);
ac649e82fd98 Create and save the sent mail item exactly the same as how it was composed.
Dean Looyengoed
parents: 726
diff changeset
   747
ac649e82fd98 Create and save the sent mail item exactly the same as how it was composed.
Dean Looyengoed
parents: 726
diff changeset
   748
                // Save changes to the mail item (must be done last for some properties)
ac649e82fd98 Create and save the sent mail item exactly the same as how it was composed.
Dean Looyengoed
parents: 726
diff changeset
   749
                sentMailItem.Save();
ac649e82fd98 Create and save the sent mail item exactly the same as how it was composed.
Dean Looyengoed
parents: 726
diff changeset
   750
ac649e82fd98 Create and save the sent mail item exactly the same as how it was composed.
Dean Looyengoed
parents: 726
diff changeset
   751
                /* Attempt to move to the sent folder.
ac649e82fd98 Create and save the sent mail item exactly the same as how it was composed.
Dean Looyengoed
parents: 726
diff changeset
   752
                 * For some account types like exchange this is required.
ac649e82fd98 Create and save the sent mail item exactly the same as how it was composed.
Dean Looyengoed
parents: 726
diff changeset
   753
                 * For others such as ActiveSynce, this will fail with a 
ac649e82fd98 Create and save the sent mail item exactly the same as how it was composed.
Dean Looyengoed
parents: 726
diff changeset
   754
                 * 'ActiveSync doesn't support what you are trying to do'
ac649e82fd98 Create and save the sent mail item exactly the same as how it was composed.
Dean Looyengoed
parents: 726
diff changeset
   755
                 */
ac649e82fd98 Create and save the sent mail item exactly the same as how it was composed.
Dean Looyengoed
parents: 726
diff changeset
   756
                try
ac649e82fd98 Create and save the sent mail item exactly the same as how it was composed.
Dean Looyengoed
parents: 726
diff changeset
   757
                {
ac649e82fd98 Create and save the sent mail item exactly the same as how it was composed.
Dean Looyengoed
parents: 726
diff changeset
   758
                    sentMailItem.Move(sentFolder);
ac649e82fd98 Create and save the sent mail item exactly the same as how it was composed.
Dean Looyengoed
parents: 726
diff changeset
   759
                }
ac649e82fd98 Create and save the sent mail item exactly the same as how it was composed.
Dean Looyengoed
parents: 726
diff changeset
   760
                catch { }
ac649e82fd98 Create and save the sent mail item exactly the same as how it was composed.
Dean Looyengoed
parents: 726
diff changeset
   761
            }
ac649e82fd98 Create and save the sent mail item exactly the same as how it was composed.
Dean Looyengoed
parents: 726
diff changeset
   762
            catch { }
ac649e82fd98 Create and save the sent mail item exactly the same as how it was composed.
Dean Looyengoed
parents: 726
diff changeset
   763
            finally
ac649e82fd98 Create and save the sent mail item exactly the same as how it was composed.
Dean Looyengoed
parents: 726
diff changeset
   764
            {
ac649e82fd98 Create and save the sent mail item exactly the same as how it was composed.
Dean Looyengoed
parents: 726
diff changeset
   765
                if (sentMailItem != null)
ac649e82fd98 Create and save the sent mail item exactly the same as how it was composed.
Dean Looyengoed
parents: 726
diff changeset
   766
                {
ac649e82fd98 Create and save the sent mail item exactly the same as how it was composed.
Dean Looyengoed
parents: 726
diff changeset
   767
                    Marshal.ReleaseComObject(sentMailItem);
ac649e82fd98 Create and save the sent mail item exactly the same as how it was composed.
Dean Looyengoed
parents: 726
diff changeset
   768
                    sentMailItem = null;
ac649e82fd98 Create and save the sent mail item exactly the same as how it was composed.
Dean Looyengoed
parents: 726
diff changeset
   769
                }
ac649e82fd98 Create and save the sent mail item exactly the same as how it was composed.
Dean Looyengoed
parents: 726
diff changeset
   770
            }
ac649e82fd98 Create and save the sent mail item exactly the same as how it was composed.
Dean Looyengoed
parents: 726
diff changeset
   771
ac649e82fd98 Create and save the sent mail item exactly the same as how it was composed.
Dean Looyengoed
parents: 726
diff changeset
   772
            return;
ac649e82fd98 Create and save the sent mail item exactly the same as how it was composed.
Dean Looyengoed
parents: 726
diff changeset
   773
        }
ac649e82fd98 Create and save the sent mail item exactly the same as how it was composed.
Dean Looyengoed
parents: 726
diff changeset
   774
ac649e82fd98 Create and save the sent mail item exactly the same as how it was composed.
Dean Looyengoed
parents: 726
diff changeset
   775
        /// <summary>
671
57fdc1b20a02 Add method to get account trust by searching the whitelist.
Dean Looyengoed
parents: 667
diff changeset
   776
        /// Gets whether the given account is trusted (on the account whitelist).
57fdc1b20a02 Add method to get account trust by searching the whitelist.
Dean Looyengoed
parents: 667
diff changeset
   777
        /// Character case and whitespace is ignored during comparison.
57fdc1b20a02 Add method to get account trust by searching the whitelist.
Dean Looyengoed
parents: 667
diff changeset
   778
        /// </summary>
57fdc1b20a02 Add method to get account trust by searching the whitelist.
Dean Looyengoed
parents: 667
diff changeset
   779
        /// <param name="address">The address of the account.</param>
57fdc1b20a02 Add method to get account trust by searching the whitelist.
Dean Looyengoed
parents: 667
diff changeset
   780
        /// <returns>True if the account with the given address is trusted by default (on the whitelist), otherwise false.</returns>
57fdc1b20a02 Add method to get account trust by searching the whitelist.
Dean Looyengoed
parents: 667
diff changeset
   781
        private bool GetIsAccountTrusted(string address)
57fdc1b20a02 Add method to get account trust by searching the whitelist.
Dean Looyengoed
parents: 667
diff changeset
   782
        {
57fdc1b20a02 Add method to get account trust by searching the whitelist.
Dean Looyengoed
parents: 667
diff changeset
   783
            bool isTrusted = false;
57fdc1b20a02 Add method to get account trust by searching the whitelist.
Dean Looyengoed
parents: 667
diff changeset
   784
            string searchAddress = address.ToUpper().Trim();
57fdc1b20a02 Add method to get account trust by searching the whitelist.
Dean Looyengoed
parents: 667
diff changeset
   785
            string searchDomain = searchAddress.Contains("@") ? searchAddress.Substring(searchAddress.LastIndexOf("@")) : null;
57fdc1b20a02 Add method to get account trust by searching the whitelist.
Dean Looyengoed
parents: 667
diff changeset
   786
            string whitelistAccount;
57fdc1b20a02 Add method to get account trust by searching the whitelist.
Dean Looyengoed
parents: 667
diff changeset
   787
57fdc1b20a02 Add method to get account trust by searching the whitelist.
Dean Looyengoed
parents: 667
diff changeset
   788
            for (int i = 0; i < this._AccountWhitelist.Length; i++)
57fdc1b20a02 Add method to get account trust by searching the whitelist.
Dean Looyengoed
parents: 667
diff changeset
   789
            {
57fdc1b20a02 Add method to get account trust by searching the whitelist.
Dean Looyengoed
parents: 667
diff changeset
   790
                whitelistAccount = this._AccountWhitelist[i].ToUpper().Trim();
57fdc1b20a02 Add method to get account trust by searching the whitelist.
Dean Looyengoed
parents: 667
diff changeset
   791
57fdc1b20a02 Add method to get account trust by searching the whitelist.
Dean Looyengoed
parents: 667
diff changeset
   792
                // Check for exact match
57fdc1b20a02 Add method to get account trust by searching the whitelist.
Dean Looyengoed
parents: 667
diff changeset
   793
                if (searchAddress == whitelistAccount)
57fdc1b20a02 Add method to get account trust by searching the whitelist.
Dean Looyengoed
parents: 667
diff changeset
   794
                {
57fdc1b20a02 Add method to get account trust by searching the whitelist.
Dean Looyengoed
parents: 667
diff changeset
   795
                    isTrusted = true;
57fdc1b20a02 Add method to get account trust by searching the whitelist.
Dean Looyengoed
parents: 667
diff changeset
   796
                    break;
57fdc1b20a02 Add method to get account trust by searching the whitelist.
Dean Looyengoed
parents: 667
diff changeset
   797
                }
57fdc1b20a02 Add method to get account trust by searching the whitelist.
Dean Looyengoed
parents: 667
diff changeset
   798
57fdc1b20a02 Add method to get account trust by searching the whitelist.
Dean Looyengoed
parents: 667
diff changeset
   799
                // Check for domain match
57fdc1b20a02 Add method to get account trust by searching the whitelist.
Dean Looyengoed
parents: 667
diff changeset
   800
                if ((searchDomain != null) &&
57fdc1b20a02 Add method to get account trust by searching the whitelist.
Dean Looyengoed
parents: 667
diff changeset
   801
                    whitelistAccount.StartsWith("@") &&
57fdc1b20a02 Add method to get account trust by searching the whitelist.
Dean Looyengoed
parents: 667
diff changeset
   802
                    (searchDomain == whitelistAccount))
57fdc1b20a02 Add method to get account trust by searching the whitelist.
Dean Looyengoed
parents: 667
diff changeset
   803
                {
57fdc1b20a02 Add method to get account trust by searching the whitelist.
Dean Looyengoed
parents: 667
diff changeset
   804
                    isTrusted = true;
57fdc1b20a02 Add method to get account trust by searching the whitelist.
Dean Looyengoed
parents: 667
diff changeset
   805
                    break;
57fdc1b20a02 Add method to get account trust by searching the whitelist.
Dean Looyengoed
parents: 667
diff changeset
   806
                }
57fdc1b20a02 Add method to get account trust by searching the whitelist.
Dean Looyengoed
parents: 667
diff changeset
   807
            }
57fdc1b20a02 Add method to get account trust by searching the whitelist.
Dean Looyengoed
parents: 667
diff changeset
   808
57fdc1b20a02 Add method to get account trust by searching the whitelist.
Dean Looyengoed
parents: 667
diff changeset
   809
            return (isTrusted);
57fdc1b20a02 Add method to get account trust by searching the whitelist.
Dean Looyengoed
parents: 667
diff changeset
   810
        }
57fdc1b20a02 Add method to get account trust by searching the whitelist.
Dean Looyengoed
parents: 667
diff changeset
   811
57fdc1b20a02 Add method to get account trust by searching the whitelist.
Dean Looyengoed
parents: 667
diff changeset
   812
        /// <summary>
203
44dac4bb337a Complete the state management in both the options form and this add-in.
Dean Looyengoed
parents: 201
diff changeset
   813
        /// Writes/saves any supported configuration/property values to the registry.
190
a685c30e07d2 Refactor/comment/partial rewrite of the ThisAddIn class.
Dean Looyengoed
parents: 168
diff changeset
   814
        /// </summary>
203
44dac4bb337a Complete the state management in both the options form and this add-in.
Dean Looyengoed
parents: 201
diff changeset
   815
        private void WriteConfigToRegistry()
44dac4bb337a Complete the state management in both the options form and this add-in.
Dean Looyengoed
parents: 201
diff changeset
   816
        {
452
9be34118b38f Add IsSendWithoutKeyEnabled config option and read from registry.
Dean Looyengoed
parents: 451
diff changeset
   817
            /* Note: 
9be34118b38f Add IsSendWithoutKeyEnabled config option and read from registry.
Dean Looyengoed
parents: 451
diff changeset
   818
             * Do not save the below properties which can only be modified from the registry
649
ad161bea020a Add AccountWhitelist and read from registry.
Dean Looyengoed
parents: 640
diff changeset
   819
             *   • AccountWhitelist
453
4b8c31936610 Add crash report config options and read from registry.
Dean Looyengoed
parents: 452
diff changeset
   820
             *   • CrashReportSendAddress
4b8c31936610 Add crash report config options and read from registry.
Dean Looyengoed
parents: 452
diff changeset
   821
             *   • ExtraKeys
627
5cd866dfafd7 Alphabetize read/write configuration methods to match properties order.
Dean Looyengoed
parents: 626
diff changeset
   822
             *   • IsCrashReportVisible
5cd866dfafd7 Alphabetize read/write configuration methods to match properties order.
Dean Looyengoed
parents: 626
diff changeset
   823
             *   • IsDeveloperModeEnabled
5cd866dfafd7 Alphabetize read/write configuration methods to match properties order.
Dean Looyengoed
parents: 626
diff changeset
   824
             *   • IsPassiveModeEnabled
452
9be34118b38f Add IsSendWithoutKeyEnabled config option and read from registry.
Dean Looyengoed
parents: 451
diff changeset
   825
             */
9be34118b38f Add IsSendWithoutKeyEnabled config option and read from registry.
Dean Looyengoed
parents: 451
diff changeset
   826
462
088a683807a2 Add exception handling around registry access methods.
Dean Looyengoed
parents: 461
diff changeset
   827
            try
203
44dac4bb337a Complete the state management in both the options form and this add-in.
Dean Looyengoed
parents: 201
diff changeset
   828
            {
462
088a683807a2 Add exception handling around registry access methods.
Dean Looyengoed
parents: 461
diff changeset
   829
                using (RegistryKey key1 = Registry.CurrentUser.OpenSubKey(REG_KEY_SOFTWARE, true))
203
44dac4bb337a Complete the state management in both the options form and this add-in.
Dean Looyengoed
parents: 201
diff changeset
   830
                {
462
088a683807a2 Add exception handling around registry access methods.
Dean Looyengoed
parents: 461
diff changeset
   831
                    using (RegistryKey key2 = key1.CreateSubKey(REG_KEY_PEP))
088a683807a2 Add exception handling around registry access methods.
Dean Looyengoed
parents: 461
diff changeset
   832
                    {
088a683807a2 Add exception handling around registry access methods.
Dean Looyengoed
parents: 461
diff changeset
   833
                        // Set encryption state of each account
088a683807a2 Add exception handling around registry access methods.
Dean Looyengoed
parents: 461
diff changeset
   834
                        using (RegistryKey key3 = key2.CreateSubKey(REG_KEY_ENCRYPTED_ACCOUNTS_LIST))
203
44dac4bb337a Complete the state management in both the options form and this add-in.
Dean Looyengoed
parents: 201
diff changeset
   835
                        {
462
088a683807a2 Add exception handling around registry access methods.
Dean Looyengoed
parents: 461
diff changeset
   836
                            foreach (KeyValuePair<string, bool> entry in this._EncryptedAccountsList)
088a683807a2 Add exception handling around registry access methods.
Dean Looyengoed
parents: 461
diff changeset
   837
                            {
088a683807a2 Add exception handling around registry access methods.
Dean Looyengoed
parents: 461
diff changeset
   838
                                key3.SetValue(entry.Key,
088a683807a2 Add exception handling around registry access methods.
Dean Looyengoed
parents: 461
diff changeset
   839
                                              entry.Value.ToString(),
088a683807a2 Add exception handling around registry access methods.
Dean Looyengoed
parents: 461
diff changeset
   840
                                              RegistryValueKind.String);
088a683807a2 Add exception handling around registry access methods.
Dean Looyengoed
parents: 461
diff changeset
   841
                            }
203
44dac4bb337a Complete the state management in both the options form and this add-in.
Dean Looyengoed
parents: 201
diff changeset
   842
                        }
627
5cd866dfafd7 Alphabetize read/write configuration methods to match properties order.
Dean Looyengoed
parents: 626
diff changeset
   843
5cd866dfafd7 Alphabetize read/write configuration methods to match properties order.
Dean Looyengoed
parents: 626
diff changeset
   844
                        key2.SetValue(REG_NAME_IS_ENCRYPT_ALL_ACCOUNTS_ENABLED, this._IsEncryptAllAccountsEnabled.ToString());
5cd866dfafd7 Alphabetize read/write configuration methods to match properties order.
Dean Looyengoed
parents: 626
diff changeset
   845
                        key2.SetValue(REG_NAME_IS_KEY_SERVER_USED, this._IsKeyServerUsed.ToString());
5cd866dfafd7 Alphabetize read/write configuration methods to match properties order.
Dean Looyengoed
parents: 626
diff changeset
   846
                        key2.SetValue(REG_NAME_IS_UNENCRYPTED_SUBJECT_ENABLED, this._IsUnencryptedSubjectEnabled.ToString());
5cd866dfafd7 Alphabetize read/write configuration methods to match properties order.
Dean Looyengoed
parents: 626
diff changeset
   847
                        key2.SetValue(REG_NAME_IS_VERBOSE_LOGGING_ENABLED, this._IsVerboseLoggingEnabled.ToString());
203
44dac4bb337a Complete the state management in both the options form and this add-in.
Dean Looyengoed
parents: 201
diff changeset
   848
                    }
44dac4bb337a Complete the state management in both the options form and this add-in.
Dean Looyengoed
parents: 201
diff changeset
   849
                }
44dac4bb337a Complete the state management in both the options form and this add-in.
Dean Looyengoed
parents: 201
diff changeset
   850
            }
462
088a683807a2 Add exception handling around registry access methods.
Dean Looyengoed
parents: 461
diff changeset
   851
            catch (Exception ex)
088a683807a2 Add exception handling around registry access methods.
Dean Looyengoed
parents: 461
diff changeset
   852
            {
660
e5346cda03ff Merge GlobalConst and GlobalExceptionHandler into only one Global class.
Dean Looyengoed
parents: 659
diff changeset
   853
                Global.StopAndSendCrashReport(ex);
462
088a683807a2 Add exception handling around registry access methods.
Dean Looyengoed
parents: 461
diff changeset
   854
            }
203
44dac4bb337a Complete the state management in both the options form and this add-in.
Dean Looyengoed
parents: 201
diff changeset
   855
44dac4bb337a Complete the state management in both the options form and this add-in.
Dean Looyengoed
parents: 201
diff changeset
   856
            return;
44dac4bb337a Complete the state management in both the options form and this add-in.
Dean Looyengoed
parents: 201
diff changeset
   857
        }
44dac4bb337a Complete the state management in both the options form and this add-in.
Dean Looyengoed
parents: 201
diff changeset
   858
44dac4bb337a Complete the state management in both the options form and this add-in.
Dean Looyengoed
parents: 201
diff changeset
   859
        /// <summary>
44dac4bb337a Complete the state management in both the options form and this add-in.
Dean Looyengoed
parents: 201
diff changeset
   860
        /// Reads/loads any configuration/property values from the registry.
44dac4bb337a Complete the state management in both the options form and this add-in.
Dean Looyengoed
parents: 201
diff changeset
   861
        /// </summary>
44dac4bb337a Complete the state management in both the options form and this add-in.
Dean Looyengoed
parents: 201
diff changeset
   862
        private void ReadConfigFromRegistry()
0
6dfec3b090d6 initial commit
vb
parents:
diff changeset
   863
        {
190
a685c30e07d2 Refactor/comment/partial rewrite of the ThisAddIn class.
Dean Looyengoed
parents: 168
diff changeset
   864
            bool isSuccessful;
515
ed828de6d215 Read IsTNEFDisabled from the registry and display as read-only in options.
Dean Looyengoed
parents: 513
diff changeset
   865
            int parsedIntValue;
190
a685c30e07d2 Refactor/comment/partial rewrite of the ThisAddIn class.
Dean Looyengoed
parents: 168
diff changeset
   866
            bool parsedBoolValue;
a685c30e07d2 Refactor/comment/partial rewrite of the ThisAddIn class.
Dean Looyengoed
parents: 168
diff changeset
   867
            string keyValue;
649
ad161bea020a Add AccountWhitelist and read from registry.
Dean Looyengoed
parents: 640
diff changeset
   868
            object value;
ad161bea020a Add AccountWhitelist and read from registry.
Dean Looyengoed
parents: 640
diff changeset
   869
            string[] registryWhitelist;
ad161bea020a Add AccountWhitelist and read from registry.
Dean Looyengoed
parents: 640
diff changeset
   870
            List<string> whitelist;
190
a685c30e07d2 Refactor/comment/partial rewrite of the ThisAddIn class.
Dean Looyengoed
parents: 168
diff changeset
   871
203
44dac4bb337a Complete the state management in both the options form and this add-in.
Dean Looyengoed
parents: 201
diff changeset
   872
            /* Note: property accessors (instead of private members) are used for the
44dac4bb337a Complete the state management in both the options form and this add-in.
Dean Looyengoed
parents: 201
diff changeset
   873
             * few cases where changing a property requires additional steps (like updating pEp engine).
44dac4bb337a Complete the state management in both the options form and this add-in.
Dean Looyengoed
parents: 201
diff changeset
   874
             */
44dac4bb337a Complete the state management in both the options form and this add-in.
Dean Looyengoed
parents: 201
diff changeset
   875
462
088a683807a2 Add exception handling around registry access methods.
Dean Looyengoed
parents: 461
diff changeset
   876
            try
190
a685c30e07d2 Refactor/comment/partial rewrite of the ThisAddIn class.
Dean Looyengoed
parents: 168
diff changeset
   877
            {
515
ed828de6d215 Read IsTNEFDisabled from the registry and display as read-only in options.
Dean Looyengoed
parents: 513
diff changeset
   878
                using (RegistryKey key1 = Registry.CurrentUser.OpenSubKey(REG_KEY_SOFTWARE))
ed828de6d215 Read IsTNEFDisabled from the registry and display as read-only in options.
Dean Looyengoed
parents: 513
diff changeset
   879
                {
ed828de6d215 Read IsTNEFDisabled from the registry and display as read-only in options.
Dean Looyengoed
parents: 513
diff changeset
   880
                    using (RegistryKey keyOffice = key1.OpenSubKey(REG_KEY_MICROSOFT_OFFICE))
ed828de6d215 Read IsTNEFDisabled from the registry and display as read-only in options.
Dean Looyengoed
parents: 513
diff changeset
   881
                    {
ed828de6d215 Read IsTNEFDisabled from the registry and display as read-only in options.
Dean Looyengoed
parents: 513
diff changeset
   882
                        using (RegistryKey keyPreferences = keyOffice.OpenSubKey(Application.Version.Substring(0, 2) + ".0\\Outlook\\Preferences\\"))
ed828de6d215 Read IsTNEFDisabled from the registry and display as read-only in options.
Dean Looyengoed
parents: 513
diff changeset
   883
                        {
ed828de6d215 Read IsTNEFDisabled from the registry and display as read-only in options.
Dean Looyengoed
parents: 513
diff changeset
   884
                            /* Attempt to get IsTNEFDisabled
ed828de6d215 Read IsTNEFDisabled from the registry and display as read-only in options.
Dean Looyengoed
parents: 513
diff changeset
   885
                             *  "12" Outlook 2007
ed828de6d215 Read IsTNEFDisabled from the registry and display as read-only in options.
Dean Looyengoed
parents: 513
diff changeset
   886
                             *  "14" Outlook 2010
ed828de6d215 Read IsTNEFDisabled from the registry and display as read-only in options.
Dean Looyengoed
parents: 513
diff changeset
   887
                             *  "15" Outlook 2013
ed828de6d215 Read IsTNEFDisabled from the registry and display as read-only in options.
Dean Looyengoed
parents: 513
diff changeset
   888
                             *  "16" Outlook 2016
ed828de6d215 Read IsTNEFDisabled from the registry and display as read-only in options.
Dean Looyengoed
parents: 513
diff changeset
   889
                             */
660
e5346cda03ff Merge GlobalConst and GlobalExceptionHandler into only one Global class.
Dean Looyengoed
parents: 659
diff changeset
   890
                            keyValue = keyPreferences.GetValue(ThisAddIn.REG_NAME_IS_TNEF_DISABLED, Global.IS_TNEF_DISABLED_DEFAULT).ToString();
515
ed828de6d215 Read IsTNEFDisabled from the registry and display as read-only in options.
Dean Looyengoed
parents: 513
diff changeset
   891
                            isSuccessful = int.TryParse(keyValue, out parsedIntValue);
ed828de6d215 Read IsTNEFDisabled from the registry and display as read-only in options.
Dean Looyengoed
parents: 513
diff changeset
   892
ed828de6d215 Read IsTNEFDisabled from the registry and display as read-only in options.
Dean Looyengoed
parents: 513
diff changeset
   893
                            if (isSuccessful)
ed828de6d215 Read IsTNEFDisabled from the registry and display as read-only in options.
Dean Looyengoed
parents: 513
diff changeset
   894
                            {
ed828de6d215 Read IsTNEFDisabled from the registry and display as read-only in options.
Dean Looyengoed
parents: 513
diff changeset
   895
                                this.IsTNEFDisabled = (parsedIntValue > 0);
ed828de6d215 Read IsTNEFDisabled from the registry and display as read-only in options.
Dean Looyengoed
parents: 513
diff changeset
   896
                            }
ed828de6d215 Read IsTNEFDisabled from the registry and display as read-only in options.
Dean Looyengoed
parents: 513
diff changeset
   897
                        }
ed828de6d215 Read IsTNEFDisabled from the registry and display as read-only in options.
Dean Looyengoed
parents: 513
diff changeset
   898
                    }
ed828de6d215 Read IsTNEFDisabled from the registry and display as read-only in options.
Dean Looyengoed
parents: 513
diff changeset
   899
                }
ed828de6d215 Read IsTNEFDisabled from the registry and display as read-only in options.
Dean Looyengoed
parents: 513
diff changeset
   900
462
088a683807a2 Add exception handling around registry access methods.
Dean Looyengoed
parents: 461
diff changeset
   901
                using (RegistryKey key1 = Registry.CurrentUser.OpenSubKey(REG_KEY_SOFTWARE, true))
190
a685c30e07d2 Refactor/comment/partial rewrite of the ThisAddIn class.
Dean Looyengoed
parents: 168
diff changeset
   902
                {
462
088a683807a2 Add exception handling around registry access methods.
Dean Looyengoed
parents: 461
diff changeset
   903
                    using (RegistryKey key2 = key1.CreateSubKey(REG_KEY_PEP))
190
a685c30e07d2 Refactor/comment/partial rewrite of the ThisAddIn class.
Dean Looyengoed
parents: 168
diff changeset
   904
                    {
649
ad161bea020a Add AccountWhitelist and read from registry.
Dean Looyengoed
parents: 640
diff changeset
   905
                        // Attempt to get AccountWhitelist
ad161bea020a Add AccountWhitelist and read from registry.
Dean Looyengoed
parents: 640
diff changeset
   906
                        value = key2.GetValue(REG_NAME_ACCOUNT_WHITELIST, null);
ad161bea020a Add AccountWhitelist and read from registry.
Dean Looyengoed
parents: 640
diff changeset
   907
                        if (value != null)
ad161bea020a Add AccountWhitelist and read from registry.
Dean Looyengoed
parents: 640
diff changeset
   908
                        {
ad161bea020a Add AccountWhitelist and read from registry.
Dean Looyengoed
parents: 640
diff changeset
   909
                            whitelist = new List<string>();
ad161bea020a Add AccountWhitelist and read from registry.
Dean Looyengoed
parents: 640
diff changeset
   910
ad161bea020a Add AccountWhitelist and read from registry.
Dean Looyengoed
parents: 640
diff changeset
   911
                            // Copy over hardcoded values
660
e5346cda03ff Merge GlobalConst and GlobalExceptionHandler into only one Global class.
Dean Looyengoed
parents: 659
diff changeset
   912
                            for (int i = 0; i < Global.HARDCODED_ACCOUNT_WHITELIST.Length; i++)
649
ad161bea020a Add AccountWhitelist and read from registry.
Dean Looyengoed
parents: 640
diff changeset
   913
                            {
660
e5346cda03ff Merge GlobalConst and GlobalExceptionHandler into only one Global class.
Dean Looyengoed
parents: 659
diff changeset
   914
                                whitelist.Add(Global.HARDCODED_ACCOUNT_WHITELIST[i].Trim());
649
ad161bea020a Add AccountWhitelist and read from registry.
Dean Looyengoed
parents: 640
diff changeset
   915
                            }
ad161bea020a Add AccountWhitelist and read from registry.
Dean Looyengoed
parents: 640
diff changeset
   916
ad161bea020a Add AccountWhitelist and read from registry.
Dean Looyengoed
parents: 640
diff changeset
   917
                            // Copy over registry values
ad161bea020a Add AccountWhitelist and read from registry.
Dean Looyengoed
parents: 640
diff changeset
   918
                            registryWhitelist = value.ToString().Split(';');
ad161bea020a Add AccountWhitelist and read from registry.
Dean Looyengoed
parents: 640
diff changeset
   919
                            for (int i = 0; i < registryWhitelist.Length; i++)
ad161bea020a Add AccountWhitelist and read from registry.
Dean Looyengoed
parents: 640
diff changeset
   920
                            {
650
568a3a9c2d33 Add account whitelist property and trim when making the list.
Dean Looyengoed
parents: 649
diff changeset
   921
                                whitelist.Add(registryWhitelist[i].Trim());
649
ad161bea020a Add AccountWhitelist and read from registry.
Dean Looyengoed
parents: 640
diff changeset
   922
                            }
ad161bea020a Add AccountWhitelist and read from registry.
Dean Looyengoed
parents: 640
diff changeset
   923
ad161bea020a Add AccountWhitelist and read from registry.
Dean Looyengoed
parents: 640
diff changeset
   924
                            this._AccountWhitelist = whitelist.ToArray();
ad161bea020a Add AccountWhitelist and read from registry.
Dean Looyengoed
parents: 640
diff changeset
   925
                        }
660
e5346cda03ff Merge GlobalConst and GlobalExceptionHandler into only one Global class.
Dean Looyengoed
parents: 659
diff changeset
   926
462
088a683807a2 Add exception handling around registry access methods.
Dean Looyengoed
parents: 461
diff changeset
   927
                        // Attempt to get CrashReportSendAddress
660
e5346cda03ff Merge GlobalConst and GlobalExceptionHandler into only one Global class.
Dean Looyengoed
parents: 659
diff changeset
   928
                        this._CrashReportSendAddress = key2.GetValue(REG_NAME_CRASH_REPORT_SEND_ADDRESS, Global.CRASH_REPORT_SEND_ADDRESS_DEFAULT).ToString();
453
4b8c31936610 Add crash report config options and read from registry.
Dean Looyengoed
parents: 452
diff changeset
   929
462
088a683807a2 Add exception handling around registry access methods.
Dean Looyengoed
parents: 461
diff changeset
   930
                        // Get encryption state of each account in the registry -- any previous values are cleared
088a683807a2 Add exception handling around registry access methods.
Dean Looyengoed
parents: 461
diff changeset
   931
                        this.EncryptedAccountsList.Clear();
088a683807a2 Add exception handling around registry access methods.
Dean Looyengoed
parents: 461
diff changeset
   932
                        using (RegistryKey key3 = key2.CreateSubKey(REG_KEY_ENCRYPTED_ACCOUNTS_LIST))
203
44dac4bb337a Complete the state management in both the options form and this add-in.
Dean Looyengoed
parents: 201
diff changeset
   933
                        {
462
088a683807a2 Add exception handling around registry access methods.
Dean Looyengoed
parents: 461
diff changeset
   934
                            foreach (string name in key3.GetValueNames())
088a683807a2 Add exception handling around registry access methods.
Dean Looyengoed
parents: 461
diff changeset
   935
                            {
660
e5346cda03ff Merge GlobalConst and GlobalExceptionHandler into only one Global class.
Dean Looyengoed
parents: 659
diff changeset
   936
                                keyValue = key3.GetValue(name, Global.ENCRYPT_ACCOUNTS_BY_DEFAULT).ToString();
462
088a683807a2 Add exception handling around registry access methods.
Dean Looyengoed
parents: 461
diff changeset
   937
                                isSuccessful = bool.TryParse(keyValue, out parsedBoolValue);
203
44dac4bb337a Complete the state management in both the options form and this add-in.
Dean Looyengoed
parents: 201
diff changeset
   938
462
088a683807a2 Add exception handling around registry access methods.
Dean Looyengoed
parents: 461
diff changeset
   939
                                if (isSuccessful)
088a683807a2 Add exception handling around registry access methods.
Dean Looyengoed
parents: 461
diff changeset
   940
                                {
088a683807a2 Add exception handling around registry access methods.
Dean Looyengoed
parents: 461
diff changeset
   941
                                    this.EncryptedAccountsList.Add(name, parsedBoolValue);
088a683807a2 Add exception handling around registry access methods.
Dean Looyengoed
parents: 461
diff changeset
   942
                                }
203
44dac4bb337a Complete the state management in both the options form and this add-in.
Dean Looyengoed
parents: 201
diff changeset
   943
                            }
44dac4bb337a Complete the state management in both the options form and this add-in.
Dean Looyengoed
parents: 201
diff changeset
   944
                        }
627
5cd866dfafd7 Alphabetize read/write configuration methods to match properties order.
Dean Looyengoed
parents: 626
diff changeset
   945
5cd866dfafd7 Alphabetize read/write configuration methods to match properties order.
Dean Looyengoed
parents: 626
diff changeset
   946
                        // Attempt to get ExtraKeys value 
649
ad161bea020a Add AccountWhitelist and read from registry.
Dean Looyengoed
parents: 640
diff changeset
   947
                        value = key2.GetValue(REG_NAME_EXTRA_KEYS);
ad161bea020a Add AccountWhitelist and read from registry.
Dean Looyengoed
parents: 640
diff changeset
   948
                        if (value != null)
627
5cd866dfafd7 Alphabetize read/write configuration methods to match properties order.
Dean Looyengoed
parents: 626
diff changeset
   949
                        {
649
ad161bea020a Add AccountWhitelist and read from registry.
Dean Looyengoed
parents: 640
diff changeset
   950
                            this._ExtraKeys = value.ToString().Split(',');
627
5cd866dfafd7 Alphabetize read/write configuration methods to match properties order.
Dean Looyengoed
parents: 626
diff changeset
   951
                        }
5cd866dfafd7 Alphabetize read/write configuration methods to match properties order.
Dean Looyengoed
parents: 626
diff changeset
   952
5cd866dfafd7 Alphabetize read/write configuration methods to match properties order.
Dean Looyengoed
parents: 626
diff changeset
   953
                        // Attempt to get IsCrashReportVisible
660
e5346cda03ff Merge GlobalConst and GlobalExceptionHandler into only one Global class.
Dean Looyengoed
parents: 659
diff changeset
   954
                        keyValue = key2.GetValue(REG_NAME_IS_CRASH_REPORT_VISIBLE, Global.IS_CRASH_REPORT_VISIBLE_DEFAULT).ToString();
627
5cd866dfafd7 Alphabetize read/write configuration methods to match properties order.
Dean Looyengoed
parents: 626
diff changeset
   955
                        isSuccessful = bool.TryParse(keyValue, out parsedBoolValue);
5cd866dfafd7 Alphabetize read/write configuration methods to match properties order.
Dean Looyengoed
parents: 626
diff changeset
   956
5cd866dfafd7 Alphabetize read/write configuration methods to match properties order.
Dean Looyengoed
parents: 626
diff changeset
   957
                        if (isSuccessful)
5cd866dfafd7 Alphabetize read/write configuration methods to match properties order.
Dean Looyengoed
parents: 626
diff changeset
   958
                        {
5cd866dfafd7 Alphabetize read/write configuration methods to match properties order.
Dean Looyengoed
parents: 626
diff changeset
   959
                            this._IsCrashReportVisible = parsedBoolValue;
5cd866dfafd7 Alphabetize read/write configuration methods to match properties order.
Dean Looyengoed
parents: 626
diff changeset
   960
                        }
5cd866dfafd7 Alphabetize read/write configuration methods to match properties order.
Dean Looyengoed
parents: 626
diff changeset
   961
5cd866dfafd7 Alphabetize read/write configuration methods to match properties order.
Dean Looyengoed
parents: 626
diff changeset
   962
                        // Attempt to get IsDeveloperModeEnabled
660
e5346cda03ff Merge GlobalConst and GlobalExceptionHandler into only one Global class.
Dean Looyengoed
parents: 659
diff changeset
   963
                        keyValue = key2.GetValue(REG_NAME_IS_DEVELOPER_MODE_ENABLED, Global.IS_DEVELOPER_MODE_ENABLED_DEFAULT).ToString();
627
5cd866dfafd7 Alphabetize read/write configuration methods to match properties order.
Dean Looyengoed
parents: 626
diff changeset
   964
                        isSuccessful = bool.TryParse(keyValue, out parsedBoolValue);
5cd866dfafd7 Alphabetize read/write configuration methods to match properties order.
Dean Looyengoed
parents: 626
diff changeset
   965
5cd866dfafd7 Alphabetize read/write configuration methods to match properties order.
Dean Looyengoed
parents: 626
diff changeset
   966
                        if (isSuccessful)
5cd866dfafd7 Alphabetize read/write configuration methods to match properties order.
Dean Looyengoed
parents: 626
diff changeset
   967
                        {
5cd866dfafd7 Alphabetize read/write configuration methods to match properties order.
Dean Looyengoed
parents: 626
diff changeset
   968
                            this._IsDeveloperModeEnabled = parsedBoolValue;
5cd866dfafd7 Alphabetize read/write configuration methods to match properties order.
Dean Looyengoed
parents: 626
diff changeset
   969
                        }
5cd866dfafd7 Alphabetize read/write configuration methods to match properties order.
Dean Looyengoed
parents: 626
diff changeset
   970
5cd866dfafd7 Alphabetize read/write configuration methods to match properties order.
Dean Looyengoed
parents: 626
diff changeset
   971
                        // Attempt to get IsEncryptAllAccountsEnabled value
660
e5346cda03ff Merge GlobalConst and GlobalExceptionHandler into only one Global class.
Dean Looyengoed
parents: 659
diff changeset
   972
                        keyValue = key2.GetValue(REG_NAME_IS_ENCRYPT_ALL_ACCOUNTS_ENABLED, Global.IS_ENCRYPT_ALL_ACCOUNTS_ENABLED_DEFAULT).ToString();
627
5cd866dfafd7 Alphabetize read/write configuration methods to match properties order.
Dean Looyengoed
parents: 626
diff changeset
   973
                        isSuccessful = bool.TryParse(keyValue, out parsedBoolValue);
5cd866dfafd7 Alphabetize read/write configuration methods to match properties order.
Dean Looyengoed
parents: 626
diff changeset
   974
5cd866dfafd7 Alphabetize read/write configuration methods to match properties order.
Dean Looyengoed
parents: 626
diff changeset
   975
                        if (isSuccessful)
5cd866dfafd7 Alphabetize read/write configuration methods to match properties order.
Dean Looyengoed
parents: 626
diff changeset
   976
                        {
5cd866dfafd7 Alphabetize read/write configuration methods to match properties order.
Dean Looyengoed
parents: 626
diff changeset
   977
                            this.IsEncryptAllAccountsEnabled = parsedBoolValue;
5cd866dfafd7 Alphabetize read/write configuration methods to match properties order.
Dean Looyengoed
parents: 626
diff changeset
   978
                        }
5cd866dfafd7 Alphabetize read/write configuration methods to match properties order.
Dean Looyengoed
parents: 626
diff changeset
   979
5cd866dfafd7 Alphabetize read/write configuration methods to match properties order.
Dean Looyengoed
parents: 626
diff changeset
   980
                        // Attempt to get IsKeyServerUsed value
660
e5346cda03ff Merge GlobalConst and GlobalExceptionHandler into only one Global class.
Dean Looyengoed
parents: 659
diff changeset
   981
                        keyValue = key2.GetValue(REG_NAME_IS_KEY_SERVER_USED, Global.IS_KEY_SERVER_USED_DEFAULT).ToString();
627
5cd866dfafd7 Alphabetize read/write configuration methods to match properties order.
Dean Looyengoed
parents: 626
diff changeset
   982
                        isSuccessful = bool.TryParse(keyValue, out parsedBoolValue);
5cd866dfafd7 Alphabetize read/write configuration methods to match properties order.
Dean Looyengoed
parents: 626
diff changeset
   983
5cd866dfafd7 Alphabetize read/write configuration methods to match properties order.
Dean Looyengoed
parents: 626
diff changeset
   984
                        if (isSuccessful)
5cd866dfafd7 Alphabetize read/write configuration methods to match properties order.
Dean Looyengoed
parents: 626
diff changeset
   985
                        {
5cd866dfafd7 Alphabetize read/write configuration methods to match properties order.
Dean Looyengoed
parents: 626
diff changeset
   986
                            this.IsKeyServerUsed = parsedBoolValue; // Must use property accessor
5cd866dfafd7 Alphabetize read/write configuration methods to match properties order.
Dean Looyengoed
parents: 626
diff changeset
   987
                        }
5cd866dfafd7 Alphabetize read/write configuration methods to match properties order.
Dean Looyengoed
parents: 626
diff changeset
   988
5cd866dfafd7 Alphabetize read/write configuration methods to match properties order.
Dean Looyengoed
parents: 626
diff changeset
   989
                        // Attempt to get IsPassiveModeEnabled value
660
e5346cda03ff Merge GlobalConst and GlobalExceptionHandler into only one Global class.
Dean Looyengoed
parents: 659
diff changeset
   990
                        keyValue = key2.GetValue(REG_NAME_IS_PASSIVE_MODE_ENABLED, Global.IS_PASSIVE_MODE_ENABLED_DEFAULT).ToString();
627
5cd866dfafd7 Alphabetize read/write configuration methods to match properties order.
Dean Looyengoed
parents: 626
diff changeset
   991
                        isSuccessful = bool.TryParse(keyValue, out parsedBoolValue);
5cd866dfafd7 Alphabetize read/write configuration methods to match properties order.
Dean Looyengoed
parents: 626
diff changeset
   992
5cd866dfafd7 Alphabetize read/write configuration methods to match properties order.
Dean Looyengoed
parents: 626
diff changeset
   993
                        if (isSuccessful)
5cd866dfafd7 Alphabetize read/write configuration methods to match properties order.
Dean Looyengoed
parents: 626
diff changeset
   994
                        {
5cd866dfafd7 Alphabetize read/write configuration methods to match properties order.
Dean Looyengoed
parents: 626
diff changeset
   995
                            this.IsPassiveModeEnabled = parsedBoolValue; // Must use property accessor
5cd866dfafd7 Alphabetize read/write configuration methods to match properties order.
Dean Looyengoed
parents: 626
diff changeset
   996
                        }
5cd866dfafd7 Alphabetize read/write configuration methods to match properties order.
Dean Looyengoed
parents: 626
diff changeset
   997
5cd866dfafd7 Alphabetize read/write configuration methods to match properties order.
Dean Looyengoed
parents: 626
diff changeset
   998
                        // Attempt to get IsUnencryptedSubjectEnabled value
660
e5346cda03ff Merge GlobalConst and GlobalExceptionHandler into only one Global class.
Dean Looyengoed
parents: 659
diff changeset
   999
                        keyValue = key2.GetValue(REG_NAME_IS_UNENCRYPTED_SUBJECT_ENABLED, Global.IS_UNENCRYPTED_SUBJECT_ENABLED_DEFAULT).ToString();
627
5cd866dfafd7 Alphabetize read/write configuration methods to match properties order.
Dean Looyengoed
parents: 626
diff changeset
  1000
                        isSuccessful = bool.TryParse(keyValue, out parsedBoolValue);
5cd866dfafd7 Alphabetize read/write configuration methods to match properties order.
Dean Looyengoed
parents: 626
diff changeset
  1001
5cd866dfafd7 Alphabetize read/write configuration methods to match properties order.
Dean Looyengoed
parents: 626
diff changeset
  1002
                        if (isSuccessful)
5cd866dfafd7 Alphabetize read/write configuration methods to match properties order.
Dean Looyengoed
parents: 626
diff changeset
  1003
                        {
5cd866dfafd7 Alphabetize read/write configuration methods to match properties order.
Dean Looyengoed
parents: 626
diff changeset
  1004
                            this.IsUnencryptedSubjectEnabled = parsedBoolValue; // Must use property accessor
5cd866dfafd7 Alphabetize read/write configuration methods to match properties order.
Dean Looyengoed
parents: 626
diff changeset
  1005
                        }
5cd866dfafd7 Alphabetize read/write configuration methods to match properties order.
Dean Looyengoed
parents: 626
diff changeset
  1006
5cd866dfafd7 Alphabetize read/write configuration methods to match properties order.
Dean Looyengoed
parents: 626
diff changeset
  1007
                        // Attempt to get IsVerboseLoggingEnabled value
660
e5346cda03ff Merge GlobalConst and GlobalExceptionHandler into only one Global class.
Dean Looyengoed
parents: 659
diff changeset
  1008
                        keyValue = key2.GetValue(REG_NAME_IS_VERBOSE_LOGGING_ENABLED, Global.IS_VERBOSE_LOGGING_ENABLED_DEFAULT).ToString();
627
5cd866dfafd7 Alphabetize read/write configuration methods to match properties order.
Dean Looyengoed
parents: 626
diff changeset
  1009
                        isSuccessful = bool.TryParse(keyValue, out parsedBoolValue);
5cd866dfafd7 Alphabetize read/write configuration methods to match properties order.
Dean Looyengoed
parents: 626
diff changeset
  1010
5cd866dfafd7 Alphabetize read/write configuration methods to match properties order.
Dean Looyengoed
parents: 626
diff changeset
  1011
                        if (isSuccessful)
5cd866dfafd7 Alphabetize read/write configuration methods to match properties order.
Dean Looyengoed
parents: 626
diff changeset
  1012
                        {
5cd866dfafd7 Alphabetize read/write configuration methods to match properties order.
Dean Looyengoed
parents: 626
diff changeset
  1013
                            this.IsVerboseLoggingEnabled = parsedBoolValue; // Must use property accessor
5cd866dfafd7 Alphabetize read/write configuration methods to match properties order.
Dean Looyengoed
parents: 626
diff changeset
  1014
                        }
190
a685c30e07d2 Refactor/comment/partial rewrite of the ThisAddIn class.
Dean Looyengoed
parents: 168
diff changeset
  1015
                    }
a685c30e07d2 Refactor/comment/partial rewrite of the ThisAddIn class.
Dean Looyengoed
parents: 168
diff changeset
  1016
                }
a685c30e07d2 Refactor/comment/partial rewrite of the ThisAddIn class.
Dean Looyengoed
parents: 168
diff changeset
  1017
            }
462
088a683807a2 Add exception handling around registry access methods.
Dean Looyengoed
parents: 461
diff changeset
  1018
            catch (Exception ex)
088a683807a2 Add exception handling around registry access methods.
Dean Looyengoed
parents: 461
diff changeset
  1019
            {
660
e5346cda03ff Merge GlobalConst and GlobalExceptionHandler into only one Global class.
Dean Looyengoed
parents: 659
diff changeset
  1020
                Global.StopAndSendCrashReport(ex);
462
088a683807a2 Add exception handling around registry access methods.
Dean Looyengoed
parents: 461
diff changeset
  1021
            }
203
44dac4bb337a Complete the state management in both the options form and this add-in.
Dean Looyengoed
parents: 201
diff changeset
  1022
44dac4bb337a Complete the state management in both the options form and this add-in.
Dean Looyengoed
parents: 201
diff changeset
  1023
            return;
44dac4bb337a Complete the state management in both the options form and this add-in.
Dean Looyengoed
parents: 201
diff changeset
  1024
        }
44dac4bb337a Complete the state management in both the options form and this add-in.
Dean Looyengoed
parents: 201
diff changeset
  1025
44dac4bb337a Complete the state management in both the options form and this add-in.
Dean Looyengoed
parents: 201
diff changeset
  1026
        /// <summary>
44dac4bb337a Complete the state management in both the options form and this add-in.
Dean Looyengoed
parents: 201
diff changeset
  1027
        /// Copies any necessary data from the given options form state back into this add-ins current state.
44dac4bb337a Complete the state management in both the options form and this add-in.
Dean Looyengoed
parents: 201
diff changeset
  1028
        /// The registry is also updated by this method.
44dac4bb337a Complete the state management in both the options form and this add-in.
Dean Looyengoed
parents: 201
diff changeset
  1029
        /// </summary>
44dac4bb337a Complete the state management in both the options form and this add-in.
Dean Looyengoed
parents: 201
diff changeset
  1030
        /// <param name="state">The state to copy data from.</param>
44dac4bb337a Complete the state management in both the options form and this add-in.
Dean Looyengoed
parents: 201
diff changeset
  1031
        public void SetOptionsState(FormOptions.State state)
44dac4bb337a Complete the state management in both the options form and this add-in.
Dean Looyengoed
parents: 201
diff changeset
  1032
        {
44dac4bb337a Complete the state management in both the options form and this add-in.
Dean Looyengoed
parents: 201
diff changeset
  1033
            if (state != null)
44dac4bb337a Complete the state management in both the options form and this add-in.
Dean Looyengoed
parents: 201
diff changeset
  1034
            {
44dac4bb337a Complete the state management in both the options form and this add-in.
Dean Looyengoed
parents: 201
diff changeset
  1035
                /* Note: property accessors (instead of private members) are used for the
44dac4bb337a Complete the state management in both the options form and this add-in.
Dean Looyengoed
parents: 201
diff changeset
  1036
                 * few cases where changing a property requires additional steps (like updating pEp engine).
44dac4bb337a Complete the state management in both the options form and this add-in.
Dean Looyengoed
parents: 201
diff changeset
  1037
                 */
44dac4bb337a Complete the state management in both the options form and this add-in.
Dean Looyengoed
parents: 201
diff changeset
  1038
                foreach (KeyValuePair<string, bool> entry in state.EncryptedAccountsList)
44dac4bb337a Complete the state management in both the options form and this add-in.
Dean Looyengoed
parents: 201
diff changeset
  1039
                {
44dac4bb337a Complete the state management in both the options form and this add-in.
Dean Looyengoed
parents: 201
diff changeset
  1040
                    if (this.EncryptedAccountsList.ContainsKey(entry.Key))
44dac4bb337a Complete the state management in both the options form and this add-in.
Dean Looyengoed
parents: 201
diff changeset
  1041
                    {
44dac4bb337a Complete the state management in both the options form and this add-in.
Dean Looyengoed
parents: 201
diff changeset
  1042
                        // Modify value
44dac4bb337a Complete the state management in both the options form and this add-in.
Dean Looyengoed
parents: 201
diff changeset
  1043
                        this.EncryptedAccountsList[entry.Key] = entry.Value;
44dac4bb337a Complete the state management in both the options form and this add-in.
Dean Looyengoed
parents: 201
diff changeset
  1044
                    }
44dac4bb337a Complete the state management in both the options form and this add-in.
Dean Looyengoed
parents: 201
diff changeset
  1045
                    else
44dac4bb337a Complete the state management in both the options form and this add-in.
Dean Looyengoed
parents: 201
diff changeset
  1046
                    {
44dac4bb337a Complete the state management in both the options form and this add-in.
Dean Looyengoed
parents: 201
diff changeset
  1047
                        // Create new entry (if there was an additional account added to the session)
44dac4bb337a Complete the state management in both the options form and this add-in.
Dean Looyengoed
parents: 201
diff changeset
  1048
                        this.EncryptedAccountsList.Add(entry.Key, entry.Value);
44dac4bb337a Complete the state management in both the options form and this add-in.
Dean Looyengoed
parents: 201
diff changeset
  1049
                    }
44dac4bb337a Complete the state management in both the options form and this add-in.
Dean Looyengoed
parents: 201
diff changeset
  1050
                }
44dac4bb337a Complete the state management in both the options form and this add-in.
Dean Looyengoed
parents: 201
diff changeset
  1051
659
a1712cc16fdb Report system information in about page of options.
Dean Looyengoed
parents: 652
diff changeset
  1052
                this.IsEncryptAllAccountsEnabled = state.IsEncryptAllAccountsEnabled;
a1712cc16fdb Report system information in about page of options.
Dean Looyengoed
parents: 652
diff changeset
  1053
                this.IsKeyServerUsed = state.IsKeyServerUsed;
a1712cc16fdb Report system information in about page of options.
Dean Looyengoed
parents: 652
diff changeset
  1054
                this.IsTNEFDisabled = state.IsTNEFDisabled;
a1712cc16fdb Report system information in about page of options.
Dean Looyengoed
parents: 652
diff changeset
  1055
                this.IsUnencryptedSubjectEnabled = state.IsUnencryptedSubjectEnabled;
a1712cc16fdb Report system information in about page of options.
Dean Looyengoed
parents: 652
diff changeset
  1056
                this.IsVerboseLoggingEnabled = state.IsVerboseLoggingEnabled;
a1712cc16fdb Report system information in about page of options.
Dean Looyengoed
parents: 652
diff changeset
  1057
219
ee11aec8fa86 Save and restore the complete options state between instances of the options form.
Dean Looyengoed
parents: 209
diff changeset
  1058
                // Save last state for next options opening
ee11aec8fa86 Save and restore the complete options state between instances of the options form.
Dean Looyengoed
parents: 209
diff changeset
  1059
                this.lastOptionsState = state.Copy();
ee11aec8fa86 Save and restore the complete options state between instances of the options form.
Dean Looyengoed
parents: 209
diff changeset
  1060
203
44dac4bb337a Complete the state management in both the options form and this add-in.
Dean Looyengoed
parents: 201
diff changeset
  1061
                // Update registry (in case of unforseen app shutdown)
44dac4bb337a Complete the state management in both the options form and this add-in.
Dean Looyengoed
parents: 201
diff changeset
  1062
                this.WriteConfigToRegistry();
44dac4bb337a Complete the state management in both the options form and this add-in.
Dean Looyengoed
parents: 201
diff changeset
  1063
            }
44dac4bb337a Complete the state management in both the options form and this add-in.
Dean Looyengoed
parents: 201
diff changeset
  1064
44dac4bb337a Complete the state management in both the options form and this add-in.
Dean Looyengoed
parents: 201
diff changeset
  1065
            return;
44dac4bb337a Complete the state management in both the options form and this add-in.
Dean Looyengoed
parents: 201
diff changeset
  1066
        }
44dac4bb337a Complete the state management in both the options form and this add-in.
Dean Looyengoed
parents: 201
diff changeset
  1067
44dac4bb337a Complete the state management in both the options form and this add-in.
Dean Looyengoed
parents: 201
diff changeset
  1068
        /// <summary>
44dac4bb337a Complete the state management in both the options form and this add-in.
Dean Looyengoed
parents: 201
diff changeset
  1069
        /// Builds a new options form state using this add-ins current state.
44dac4bb337a Complete the state management in both the options form and this add-in.
Dean Looyengoed
parents: 201
diff changeset
  1070
        /// </summary>
44dac4bb337a Complete the state management in both the options form and this add-in.
Dean Looyengoed
parents: 201
diff changeset
  1071
        /// <returns>A new options form state.</returns>
44dac4bb337a Complete the state management in both the options form and this add-in.
Dean Looyengoed
parents: 201
diff changeset
  1072
        public FormOptions.State GetOptionsState()
44dac4bb337a Complete the state management in both the options form and this add-in.
Dean Looyengoed
parents: 201
diff changeset
  1073
        {
219
ee11aec8fa86 Save and restore the complete options state between instances of the options form.
Dean Looyengoed
parents: 209
diff changeset
  1074
            FormOptions.State state;
659
a1712cc16fdb Report system information in about page of options.
Dean Looyengoed
parents: 652
diff changeset
  1075
            Outlook.Account acct = null;
a1712cc16fdb Report system information in about page of options.
Dean Looyengoed
parents: 652
diff changeset
  1076
            Outlook.NameSpace ns = Globals.ThisAddIn.Application.Session;
a1712cc16fdb Report system information in about page of options.
Dean Looyengoed
parents: 652
diff changeset
  1077
            Outlook.Accounts accounts = ns.Accounts;
219
ee11aec8fa86 Save and restore the complete options state between instances of the options form.
Dean Looyengoed
parents: 209
diff changeset
  1078
ee11aec8fa86 Save and restore the complete options state between instances of the options form.
Dean Looyengoed
parents: 209
diff changeset
  1079
            // Load from last state if possible
ee11aec8fa86 Save and restore the complete options state between instances of the options form.
Dean Looyengoed
parents: 209
diff changeset
  1080
            if (this.lastOptionsState != null)
ee11aec8fa86 Save and restore the complete options state between instances of the options form.
Dean Looyengoed
parents: 209
diff changeset
  1081
            {
ee11aec8fa86 Save and restore the complete options state between instances of the options form.
Dean Looyengoed
parents: 209
diff changeset
  1082
                state = this.lastOptionsState.Copy();
ee11aec8fa86 Save and restore the complete options state between instances of the options form.
Dean Looyengoed
parents: 209
diff changeset
  1083
            }
ee11aec8fa86 Save and restore the complete options state between instances of the options form.
Dean Looyengoed
parents: 209
diff changeset
  1084
            else
ee11aec8fa86 Save and restore the complete options state between instances of the options form.
Dean Looyengoed
parents: 209
diff changeset
  1085
            {
ee11aec8fa86 Save and restore the complete options state between instances of the options form.
Dean Looyengoed
parents: 209
diff changeset
  1086
                state = new FormOptions.State();
ee11aec8fa86 Save and restore the complete options state between instances of the options form.
Dean Looyengoed
parents: 209
diff changeset
  1087
            }
203
44dac4bb337a Complete the state management in both the options form and this add-in.
Dean Looyengoed
parents: 201
diff changeset
  1088
44dac4bb337a Complete the state management in both the options form and this add-in.
Dean Looyengoed
parents: 201
diff changeset
  1089
            // Build list of all accounts -- only the ones in the current session
44dac4bb337a Complete the state management in both the options form and this add-in.
Dean Looyengoed
parents: 201
diff changeset
  1090
            state.EncryptedAccountsList.Clear();
659
a1712cc16fdb Report system information in about page of options.
Dean Looyengoed
parents: 652
diff changeset
  1091
            for (int i = 1; i <= accounts.Count; i++)
203
44dac4bb337a Complete the state management in both the options form and this add-in.
Dean Looyengoed
parents: 201
diff changeset
  1092
            {
659
a1712cc16fdb Report system information in about page of options.
Dean Looyengoed
parents: 652
diff changeset
  1093
                acct = accounts[i];
a1712cc16fdb Report system information in about page of options.
Dean Looyengoed
parents: 652
diff changeset
  1094
203
44dac4bb337a Complete the state management in both the options form and this add-in.
Dean Looyengoed
parents: 201
diff changeset
  1095
                state.EncryptedAccountsList.Add(acct.DisplayName,
660
e5346cda03ff Merge GlobalConst and GlobalExceptionHandler into only one Global class.
Dean Looyengoed
parents: 659
diff changeset
  1096
                                                Global.ENCRYPT_ACCOUNTS_BY_DEFAULT);
659
a1712cc16fdb Report system information in about page of options.
Dean Looyengoed
parents: 652
diff changeset
  1097
a1712cc16fdb Report system information in about page of options.
Dean Looyengoed
parents: 652
diff changeset
  1098
                Marshal.ReleaseComObject(acct);
a1712cc16fdb Report system information in about page of options.
Dean Looyengoed
parents: 652
diff changeset
  1099
                acct = null;
203
44dac4bb337a Complete the state management in both the options form and this add-in.
Dean Looyengoed
parents: 201
diff changeset
  1100
            }
44dac4bb337a Complete the state management in both the options form and this add-in.
Dean Looyengoed
parents: 201
diff changeset
  1101
44dac4bb337a Complete the state management in both the options form and this add-in.
Dean Looyengoed
parents: 201
diff changeset
  1102
            // Attempt to get encryption state of each account
44dac4bb337a Complete the state management in both the options form and this add-in.
Dean Looyengoed
parents: 201
diff changeset
  1103
            foreach (KeyValuePair<string, bool> entry in this._EncryptedAccountsList)
44dac4bb337a Complete the state management in both the options form and this add-in.
Dean Looyengoed
parents: 201
diff changeset
  1104
            {
44dac4bb337a Complete the state management in both the options form and this add-in.
Dean Looyengoed
parents: 201
diff changeset
  1105
                if (state.EncryptedAccountsList.ContainsKey(entry.Key))
44dac4bb337a Complete the state management in both the options form and this add-in.
Dean Looyengoed
parents: 201
diff changeset
  1106
                {
44dac4bb337a Complete the state management in both the options form and this add-in.
Dean Looyengoed
parents: 201
diff changeset
  1107
                    state.EncryptedAccountsList[entry.Key] = entry.Value;
44dac4bb337a Complete the state management in both the options form and this add-in.
Dean Looyengoed
parents: 201
diff changeset
  1108
                }
44dac4bb337a Complete the state management in both the options form and this add-in.
Dean Looyengoed
parents: 201
diff changeset
  1109
            }
44dac4bb337a Complete the state management in both the options form and this add-in.
Dean Looyengoed
parents: 201
diff changeset
  1110
659
a1712cc16fdb Report system information in about page of options.
Dean Looyengoed
parents: 652
diff changeset
  1111
            state.IsDeveloperModeEnabled = this._IsDeveloperModeEnabled;
a1712cc16fdb Report system information in about page of options.
Dean Looyengoed
parents: 652
diff changeset
  1112
            state.IsEncryptAllAccountsEnabled = this._IsEncryptAllAccountsEnabled;
a1712cc16fdb Report system information in about page of options.
Dean Looyengoed
parents: 652
diff changeset
  1113
            state.IsKeyServerUsed = this._IsKeyServerUsed;
a1712cc16fdb Report system information in about page of options.
Dean Looyengoed
parents: 652
diff changeset
  1114
            state.IsTNEFDisabled = this._IsTNEFDisabled;
a1712cc16fdb Report system information in about page of options.
Dean Looyengoed
parents: 652
diff changeset
  1115
            state.IsUnencryptedSubjectEnabled = this._IsUnencryptedSubjectEnabled;
a1712cc16fdb Report system information in about page of options.
Dean Looyengoed
parents: 652
diff changeset
  1116
            state.IsVerboseLoggingEnabled = this._IsVerboseLoggingEnabled;
a1712cc16fdb Report system information in about page of options.
Dean Looyengoed
parents: 652
diff changeset
  1117
            state.PEPCopyright = "Copyright 2014-2016 p≡p Security SA, Luxembourg";
444
e826ac5f1017 Add serial number to options state and display in UI.
Dean Looyengoed
parents: 426
diff changeset
  1118
            state.PEPName = "p≡p for Outlook";
660
e5346cda03ff Merge GlobalConst and GlobalExceptionHandler into only one Global class.
Dean Looyengoed
parents: 659
diff changeset
  1119
            state.SystemInfo = Global.GetSystemInfo();
444
e826ac5f1017 Add serial number to options state and display in UI.
Dean Looyengoed
parents: 426
diff changeset
  1120
203
44dac4bb337a Complete the state management in both the options form and this add-in.
Dean Looyengoed
parents: 201
diff changeset
  1121
            return (state);
190
a685c30e07d2 Refactor/comment/partial rewrite of the ThisAddIn class.
Dean Looyengoed
parents: 168
diff changeset
  1122
        }
a685c30e07d2 Refactor/comment/partial rewrite of the ThisAddIn class.
Dean Looyengoed
parents: 168
diff changeset
  1123
a685c30e07d2 Refactor/comment/partial rewrite of the ThisAddIn class.
Dean Looyengoed
parents: 168
diff changeset
  1124
        /// <summary>
a685c30e07d2 Refactor/comment/partial rewrite of the ThisAddIn class.
Dean Looyengoed
parents: 168
diff changeset
  1125
        /// Opens the temporary pEp folder store.
a685c30e07d2 Refactor/comment/partial rewrite of the ThisAddIn class.
Dean Looyengoed
parents: 168
diff changeset
  1126
        /// If none already exists, a new one is created.
a685c30e07d2 Refactor/comment/partial rewrite of the ThisAddIn class.
Dean Looyengoed
parents: 168
diff changeset
  1127
        /// </summary>
a685c30e07d2 Refactor/comment/partial rewrite of the ThisAddIn class.
Dean Looyengoed
parents: 168
diff changeset
  1128
        private void OpenTempFolder()
a685c30e07d2 Refactor/comment/partial rewrite of the ThisAddIn class.
Dean Looyengoed
parents: 168
diff changeset
  1129
        {
666
3c5b9f13471c Release objects in OpenTempFolder method.
Dean Looyengoed
parents: 664
diff changeset
  1130
            string dir;
3c5b9f13471c Release objects in OpenTempFolder method.
Dean Looyengoed
parents: 664
diff changeset
  1131
            string path;
190
a685c30e07d2 Refactor/comment/partial rewrite of the ThisAddIn class.
Dean Looyengoed
parents: 168
diff changeset
  1132
            Outlook.Store tempStore = null;
666
3c5b9f13471c Release objects in OpenTempFolder method.
Dean Looyengoed
parents: 664
diff changeset
  1133
            Outlook.Store curStore = null;
3c5b9f13471c Release objects in OpenTempFolder method.
Dean Looyengoed
parents: 664
diff changeset
  1134
            Outlook.Stores stores = null;
3c5b9f13471c Release objects in OpenTempFolder method.
Dean Looyengoed
parents: 664
diff changeset
  1135
            Outlook.NameSpace ns = Globals.ThisAddIn.Application.Session;
190
a685c30e07d2 Refactor/comment/partial rewrite of the ThisAddIn class.
Dean Looyengoed
parents: 168
diff changeset
  1136
474
a27dbbb2dd88 Add try/catch and error handling around several ThisAddIn methods.
Dean Looyengoed
parents: 473
diff changeset
  1137
            try
190
a685c30e07d2 Refactor/comment/partial rewrite of the ThisAddIn class.
Dean Looyengoed
parents: 168
diff changeset
  1138
            {
666
3c5b9f13471c Release objects in OpenTempFolder method.
Dean Looyengoed
parents: 664
diff changeset
  1139
                stores = ns.Stores;
3c5b9f13471c Release objects in OpenTempFolder method.
Dean Looyengoed
parents: 664
diff changeset
  1140
3c5b9f13471c Release objects in OpenTempFolder method.
Dean Looyengoed
parents: 664
diff changeset
  1141
                // Try to find existing based on display name
3c5b9f13471c Release objects in OpenTempFolder method.
Dean Looyengoed
parents: 664
diff changeset
  1142
                for (int i = 1; i <= stores.Count; i++)
190
a685c30e07d2 Refactor/comment/partial rewrite of the ThisAddIn class.
Dean Looyengoed
parents: 168
diff changeset
  1143
                {
666
3c5b9f13471c Release objects in OpenTempFolder method.
Dean Looyengoed
parents: 664
diff changeset
  1144
                    curStore = stores[i];
3c5b9f13471c Release objects in OpenTempFolder method.
Dean Looyengoed
parents: 664
diff changeset
  1145
3c5b9f13471c Release objects in OpenTempFolder method.
Dean Looyengoed
parents: 664
diff changeset
  1146
                    if (curStore.DisplayName == "pEp")
190
a685c30e07d2 Refactor/comment/partial rewrite of the ThisAddIn class.
Dean Looyengoed
parents: 168
diff changeset
  1147
                    {
666
3c5b9f13471c Release objects in OpenTempFolder method.
Dean Looyengoed
parents: 664
diff changeset
  1148
                        tempStore = curStore;
190
a685c30e07d2 Refactor/comment/partial rewrite of the ThisAddIn class.
Dean Looyengoed
parents: 168
diff changeset
  1149
                        break;
a685c30e07d2 Refactor/comment/partial rewrite of the ThisAddIn class.
Dean Looyengoed
parents: 168
diff changeset
  1150
                    }
666
3c5b9f13471c Release objects in OpenTempFolder method.
Dean Looyengoed
parents: 664
diff changeset
  1151
3c5b9f13471c Release objects in OpenTempFolder method.
Dean Looyengoed
parents: 664
diff changeset
  1152
                    Marshal.ReleaseComObject(curStore);
3c5b9f13471c Release objects in OpenTempFolder method.
Dean Looyengoed
parents: 664
diff changeset
  1153
                    curStore = null;
190
a685c30e07d2 Refactor/comment/partial rewrite of the ThisAddIn class.
Dean Looyengoed
parents: 168
diff changeset
  1154
                }
474
a27dbbb2dd88 Add try/catch and error handling around several ThisAddIn methods.
Dean Looyengoed
parents: 473
diff changeset
  1155
666
3c5b9f13471c Release objects in OpenTempFolder method.
Dean Looyengoed
parents: 664
diff changeset
  1156
                // Create new
474
a27dbbb2dd88 Add try/catch and error handling around several ThisAddIn methods.
Dean Looyengoed
parents: 473
diff changeset
  1157
                if (tempStore == null)
a27dbbb2dd88 Add try/catch and error handling around several ThisAddIn methods.
Dean Looyengoed
parents: 473
diff changeset
  1158
                {
666
3c5b9f13471c Release objects in OpenTempFolder method.
Dean Looyengoed
parents: 664
diff changeset
  1159
                    dir = Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData);
3c5b9f13471c Release objects in OpenTempFolder method.
Dean Looyengoed
parents: 664
diff changeset
  1160
                    path = dir + "\\pEp\\pEp.pst";
474
a27dbbb2dd88 Add try/catch and error handling around several ThisAddIn methods.
Dean Looyengoed
parents: 473
diff changeset
  1161
666
3c5b9f13471c Release objects in OpenTempFolder method.
Dean Looyengoed
parents: 664
diff changeset
  1162
                    ns.AddStoreEx(path, Outlook.OlStoreType.olStoreUnicode);
474
a27dbbb2dd88 Add try/catch and error handling around several ThisAddIn methods.
Dean Looyengoed
parents: 473
diff changeset
  1163
666
3c5b9f13471c Release objects in OpenTempFolder method.
Dean Looyengoed
parents: 664
diff changeset
  1164
                    for (int i = 1; i <= stores.Count; i++)
474
a27dbbb2dd88 Add try/catch and error handling around several ThisAddIn methods.
Dean Looyengoed
parents: 473
diff changeset
  1165
                    {
666
3c5b9f13471c Release objects in OpenTempFolder method.
Dean Looyengoed
parents: 664
diff changeset
  1166
                        curStore = stores[i];
3c5b9f13471c Release objects in OpenTempFolder method.
Dean Looyengoed
parents: 664
diff changeset
  1167
3c5b9f13471c Release objects in OpenTempFolder method.
Dean Looyengoed
parents: 664
diff changeset
  1168
                        if (curStore.FilePath == path)
474
a27dbbb2dd88 Add try/catch and error handling around several ThisAddIn methods.
Dean Looyengoed
parents: 473
diff changeset
  1169
                        {
666
3c5b9f13471c Release objects in OpenTempFolder method.
Dean Looyengoed
parents: 664
diff changeset
  1170
                            tempStore = curStore;
474
a27dbbb2dd88 Add try/catch and error handling around several ThisAddIn methods.
Dean Looyengoed
parents: 473
diff changeset
  1171
                            tempStore.GetRootFolder().Name = "pEp";
a27dbbb2dd88 Add try/catch and error handling around several ThisAddIn methods.
Dean Looyengoed
parents: 473
diff changeset
  1172
                            break;
a27dbbb2dd88 Add try/catch and error handling around several ThisAddIn methods.
Dean Looyengoed
parents: 473
diff changeset
  1173
                        }
666
3c5b9f13471c Release objects in OpenTempFolder method.
Dean Looyengoed
parents: 664
diff changeset
  1174
3c5b9f13471c Release objects in OpenTempFolder method.
Dean Looyengoed
parents: 664
diff changeset
  1175
                        Marshal.ReleaseComObject(curStore);
3c5b9f13471c Release objects in OpenTempFolder method.
Dean Looyengoed
parents: 664
diff changeset
  1176
                        curStore = null;
474
a27dbbb2dd88 Add try/catch and error handling around several ThisAddIn methods.
Dean Looyengoed
parents: 473
diff changeset
  1177
                    }
a27dbbb2dd88 Add try/catch and error handling around several ThisAddIn methods.
Dean Looyengoed
parents: 473
diff changeset
  1178
                }
a27dbbb2dd88 Add try/catch and error handling around several ThisAddIn methods.
Dean Looyengoed
parents: 473
diff changeset
  1179
a27dbbb2dd88 Add try/catch and error handling around several ThisAddIn methods.
Dean Looyengoed
parents: 473
diff changeset
  1180
                this._TempFolder = (Outlook.Folder)tempStore.GetRootFolder();
a27dbbb2dd88 Add try/catch and error handling around several ThisAddIn methods.
Dean Looyengoed
parents: 473
diff changeset
  1181
            }
a27dbbb2dd88 Add try/catch and error handling around several ThisAddIn methods.
Dean Looyengoed
parents: 473
diff changeset
  1182
            catch (Exception ex)
a27dbbb2dd88 Add try/catch and error handling around several ThisAddIn methods.
Dean Looyengoed
parents: 473
diff changeset
  1183
            {
660
e5346cda03ff Merge GlobalConst and GlobalExceptionHandler into only one Global class.
Dean Looyengoed
parents: 659
diff changeset
  1184
                Global.StopAndSendCrashReport(ex);
190
a685c30e07d2 Refactor/comment/partial rewrite of the ThisAddIn class.
Dean Looyengoed
parents: 168
diff changeset
  1185
            }
666
3c5b9f13471c Release objects in OpenTempFolder method.
Dean Looyengoed
parents: 664
diff changeset
  1186
            finally
3c5b9f13471c Release objects in OpenTempFolder method.
Dean Looyengoed
parents: 664
diff changeset
  1187
            {
3c5b9f13471c Release objects in OpenTempFolder method.
Dean Looyengoed
parents: 664
diff changeset
  1188
                // Release objects
3c5b9f13471c Release objects in OpenTempFolder method.
Dean Looyengoed
parents: 664
diff changeset
  1189
                if (curStore != null)