コード例 #1
0
        private static SecureEnvironment CriticalCreate(
            string applicationManifest,
            AuthenticationType authentication,
            UserActivationMode userActivationMode)
        {
            if (applicationManifest == null)
            {
                throw new ArgumentNullException("applicationManifest");
            }

            if ((authentication != AuthenticationType.Windows) &&
                (authentication != AuthenticationType.Passport))
            {
                throw new ArgumentOutOfRangeException("authentication");
            }

            if ((userActivationMode != UserActivationMode.Permanent) &&
                (userActivationMode != UserActivationMode.Temporary))
            {
                throw new ArgumentOutOfRangeException("userActivationMode");
            }

            //build user with the given authnetication type and a default name
            // only authentication type is critical in this case
            ContentUser user;

            using (ClientSession tempClientSession =
                       ClientSession.DefaultUserClientSession(authentication))
            {
                //Activate Machine if neccessary
                if (!tempClientSession.IsMachineActivated())
                {
                    // activate Machine
                    tempClientSession.ActivateMachine(authentication);
                }

                //Activate User (we will force start activation at this point)
                // at this point we should have a real user name
                user = tempClientSession.ActivateUser(authentication, userActivationMode);
            }

            Debug.Assert(IsUserActivated(user));

            ClientSession clientSession = new ClientSession(user, userActivationMode);

            try
            {
                try
                {
                    // make sure we have a Client Licensor Certificate
                    clientSession.AcquireClientLicensorCertificate();
                }
                catch (RightsManagementException)
                {
                    // In case of the RightsMnaagement exception we are willing to proceed
                    // as ClientLicensorCertificate only required for publishing not for consumption
                    // and therefore it is optional to have one.
                }

                clientSession.BuildSecureEnvironment(applicationManifest);

                return(new SecureEnvironment(applicationManifest, user, clientSession));
            }
            catch
            {
                clientSession.Dispose();
                throw;
            }
        }