Update for Groove 14 (2010)?

Topics: Developer Forum
Aug 14, 2010 at 2:28 AM

Is there any plans to update this awesome project for Groove 2010?

I updated the source code, on my end, just enough to make my projects work..

I added the updated Reg keys for 14:

        //  Keys for Groove 14 client use
        public const string GROOVE_14_REG_KEY = @"Software\Microsoft\Office\Groove";
        public const string GROOVE_14_WEB_SERVICES_REG_KEY = GROOVE_14_REG_KEY + @"\WebServices";
        public const string GROOVE_14_WEB_SERVICES_HELPERS_REG_KEY = GROOVE_14_REG_KEY + @"\WebServicesHelpers";

        //  Keys for Groove 14 server use
        public const string GROOVE_14_SERVER_REG_KEY = @"Software\Microsoft\Office Server\Groove";
        public const string GROOVE_14_SERVER_WEB_SERVICES_REG_KEY = GROOVE_14_SERVER_REG_KEY + @"\WebServices";
        public const string GROOVE_14_SERVER_WEB_SERVICES_HELPERS_REG_KEY = GROOVE_14_SERVER_REG_KEY + @"\WebServicesHelpers";

And checked for them prior to the v12 keys (I neglected to check the server keys as we are not using them, but I assume the updated version will cover that base):

                    //  Look for Groove 14 client registry key first
                    HKCU_GrooveRegKey = i_RealHKCU.OpenSubKey(GrooveWebServicesV12Helpers.Shared.GROOVE_14_REG_KEY);

...

                    //  Look for Groove 14 client registry key first  -- I also moved the version here, as I had problems with it before.
                    Microsoft.Win32.RegistryKey HKCU_GrooveWebServicesRegKey = i_RealHKCU.OpenSubKey(GrooveWebServicesV12Helpers.Shared.GROOVE_14_WEB_SERVICES_REG_KEY);
                    if (HKCU_GrooveWebServicesRegKey != null)
                    {
                        CurrentVersion = "14.0";
                    }
                    else //  Look for Groove 12 client registry key second
                    {
                        HKCU_GrooveWebServicesRegKey = i_RealHKCU.OpenSubKey(GrooveWebServicesV12Helpers.Shared.GROOVE_12_WEB_SERVICES_REG_KEY);
                        if (HKCU_GrooveWebServicesRegKey != null)
                            CurrentVersion = "12.0";
                    }

...

                m_Groove14 = (grooveCurrentInstalledVersion.CompareTo(new System.Version("14.0")) >= 0);

I also needed to update the way it accesses the Request and Responce Keys.  The new keys are apparently encrypted:

        /// <summary>
        /// Returns the secret request key.
        /// </summary>
        public string RequestKey
        {
            get
            {
                if (m_IsLocal)
                {
                    Object regValue = m_HKCU_GrooveWebServicesRegKey.GetValue(GrooveWebServicesV12Helpers.Shared.GROOVE_WEB_SERVICES_LOCAL_REQUEST_KEY);
                    if (regValue == null)
                        throw new Exception("Unable to retrieve Request Key from registry.");
                    if(m_Groove14)
                    {
                        byte[] unprotectedData = System.Security.Cryptography.ProtectedData.Unprotect((byte[])regValue, null,
                            System.Security.Cryptography.DataProtectionScope.CurrentUser);
                        m_RequestKey = System.Text.Encoding.Unicode.GetString(unprotectedData);
                    }
                    else
                    {
                        m_RequestKey = (string)regValue;
                    }
                }
                return m_RequestKey;
            }
        }

        /// <summary>
        /// Returns the local response key, used for validating that a response originated from the local Groove executable.
        /// </summary>
        public string LocalResponseKey
        {
            get
            {
                if (m_IsLocal)
                {
                    Object regValue = m_HKCU_GrooveWebServicesRegKey.GetValue(GrooveWebServicesV12Helpers.Shared.GROOVE_WEB_SERVICES_LOCAL_RESPONSE_KEY);
                    if (regValue == null)
                        throw new Exception("Unable to retrieve ResponseKey Key from registry.");
                    if(m_Groove14)
                    {
                        byte[] unprotectedData = System.Security.Cryptography.ProtectedData.Unprotect((byte[])regValue, null,
                            System.Security.Cryptography.DataProtectionScope.CurrentUser);
                        m_LocalResponseKey = System.Text.Encoding.Unicode.GetString(unprotectedData);
                    }
                    else
                    {
                        m_LocalResponseKey = (string)regValue;
                    }
                }
                return m_LocalResponseKey;
            }
        }

My dll is working for me again, which is important, because I rely on it to automate the transfer of files to our Workspaces, based on auto builds.

Thanks for any status updates...