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); }