Ejemplo n.º 1
0
        protected virtual SPAppPrincipal FindExistingAppPrincipal(WebModelHost webHost,
                                                                  AppPrincipalDefinition appPrincipalModel)
        {
            var appPrincipalManager  = SPAppPrincipalManager.GetManager(webHost.HostWeb);
            var appPrincipalProvider = SPAppPrincipalIdentityProvider.External;

            var appPrincipalName = SPAppPrincipalName.CreateFromAppPrincipalIdentifier(appPrincipalModel.AppId);

            return(appPrincipalManager.LookupAppPrincipal(appPrincipalProvider, appPrincipalName));
        }
        /// <summary>
        /// Enables trust for the workflow app on the web
        /// </summary>
        /// <param name="web">SPWeb to enable trust on</param>
        /// <param name="permissionKind">Kind of trust to grant</param>
        /// <returns>True if the permission is granted successfully</returns>
        public static bool TrustWorkflowApp(SPWeb web, SPAppPrincipalPermissionKind permissionKind)
        {
            bool permissionGranted = false;

            if (web != null)
            {
                var appPrincipals = web.GetSiteAppPrincipals();

                SPAppPrincipalManager            manager = SPAppPrincipalManager.GetManager(web);
                SPAppPrincipalPermissionsManager perm    = new SPAppPrincipalPermissionsManager(web);
                Assembly        assembly        = Assembly.Load("Microsoft.SharePoint.WorkflowServices.Intl, Version=15.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c");
                ResourceManager resourceManager = new ResourceManager("Microsoft.SharePoint.WorkflowServices.Strings", assembly);
                string          workflowAppName = resourceManager.GetString("ApplicationDisplayName", web.Locale);

                foreach (SPSiteAppPrincipalInfo info in appPrincipals)
                {
                    if (info.DisplayName.ToLower().Equals(workflowAppName.ToLower()))
                    {
                        string appPrincipalIdentifier = GetAppIdentifier(info.EncodedIdentityClaim);

                        SPAppPrincipalName       name = SPAppPrincipalName.CreateFromAppPrincipalIdentifier(appPrincipalIdentifier);
                        SPAppPrincipal           p    = manager.LookupAppPrincipal(SPAppPrincipalIdentityProvider.External, name);
                        object                   urls = GetInstanceField(typeof(SPAppPrincipal), p, "RedirectAddresses");
                        ReadOnlyCollection <Uri> uris = urls as ReadOnlyCollection <Uri>;

                        // Trust the workflow app scoped that this web only
                        if (uris != null && uris.FirstOrDefault(u => u.AbsoluteUri.ToLower().Equals(web.Url.ToLower())) != null)
                        {
                            perm.AddAppPrincipalToSite(p, SPAppPrincipalPermissionKind.FullControl);
                        }

                        permissionGranted = true;
                    }
                }
            }

            return(permissionGranted);
        }