Esempio 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));
        }
        private void DeployAppPrincipal(object modelHost, WebModelHost webHost, AppPrincipalDefinition appPrincipalModel)
        {
            var context = webHost.HostWeb.Context;

            var appPrincipalManager = AppPrincipalManager.GetManager(context, webHost.HostWeb);
            var principal           = FindExistingAppPrincipal(webHost, appPrincipalModel);

            context.ExecuteQueryWithTrace();

            InvokeOnModelEvent(this, new ModelEventArgs
            {
                CurrentModelNode = null,
                Model            = null,
                EventType        = ModelEventType.OnProvisioning,
                Object           = principal,
                ObjectType       = typeof(AppPrincipal),
                ObjectDefinition = appPrincipalModel,
                ModelHost        = modelHost
            });


            if (principal == null)
            {
                var endpoints = new List <string>();
                endpoints.Add(appPrincipalModel.RedirectURI);

                var now = DateTime.Now;

                var credential = AppPrincipalCredential.CreateFromSymmetricKey(context, appPrincipalModel.AppSecret, now, now.AddYears(1));

                var externalAppPrincipalCreationParameters = new ExternalAppPrincipalCreationParameters()
                {
                    AppIdentifier = appPrincipalModel.AppId,
                    DisplayName   = appPrincipalModel.Title,
                    Credential    = credential,
                    ApplicationEndpointAuthorities = endpoints
                };

                principal = appPrincipalManager.CreateAppPrincipal(externalAppPrincipalCreationParameters);

                InvokeOnModelEvent(this, new ModelEventArgs
                {
                    CurrentModelNode = null,
                    Model            = null,
                    EventType        = ModelEventType.OnProvisioned,
                    Object           = principal,
                    ObjectType       = typeof(AppPrincipal),
                    ObjectDefinition = appPrincipalModel,
                    ModelHost        = modelHost
                });
            }
            else
            {
                InvokeOnModelEvent(this, new ModelEventArgs
                {
                    CurrentModelNode = null,
                    Model            = null,
                    EventType        = ModelEventType.OnProvisioned,
                    Object           = principal,
                    ObjectType       = typeof(AppPrincipal),
                    ObjectDefinition = appPrincipalModel,
                    ModelHost        = modelHost
                });
            }
        }
        protected virtual AppPrincipal FindExistingAppPrincipal(WebModelHost webHost, AppPrincipalDefinition appPrincipalModel)
        {
            var context = webHost.HostWeb.Context;
            //var context = webHost.HostclientContext;

            var appPrincipalManager  = AppPrincipalManager.GetManager(context, webHost.HostWeb);
            var appPrincipalProvider = AppPrincipalIdentityProvider.GetExternal(context);

            var appPrincipalName = AppPrincipalName.CreateFromAppPrincipalIdentifier(context, appPrincipalModel.AppId);
            var result           = appPrincipalManager.LookupAppPrincipal(appPrincipalProvider, appPrincipalName);

            context.Load(result);
            context.ExecuteQueryWithTrace();

            return(result);
        }
Esempio n. 4
0
 public static ModelNode AddAppPrincipal(this ModelNode model, AppPrincipalDefinition definition, Action <ModelNode> action)
 {
     return(model.AddDefinitionNode(definition, action));
 }
Esempio n. 5
0
 public static ModelNode AddAppPrincipal(this ModelNode model, AppPrincipalDefinition definition)
 {
     return(AddAppPrincipal(model, definition, null));
 }
Esempio n. 6
0
 public static TModelNode AddAppPrincipal <TModelNode>(this TModelNode model, AppPrincipalDefinition definition,
                                                       Action <AppPrincipalModelNode> action)
     where TModelNode : ModelNode, IWebHostModelNode, new()
 {
     return(model.AddTypedDefinitionNode(definition, action));
 }
Esempio n. 7
0
 public static TModelNode AddAppPrincipal <TModelNode>(this TModelNode model, AppPrincipalDefinition definition)
     where TModelNode : ModelNode, IWebHostModelNode, new()
 {
     return(AddAppPrincipal(model, definition, null));
 }
Esempio n. 8
0
        private void DeployAppPrincipal(object modelHost, WebModelHost webHost, AppPrincipalDefinition appPrincipalModel)
        {
            var appPrincipalManager = SPAppPrincipalManager.GetManager(webHost.HostWeb);
            var principal           = FindExistingAppPrincipal(webHost, appPrincipalModel);

            InvokeOnModelEvent(this, new ModelEventArgs
            {
                CurrentModelNode = null,
                Model            = null,
                EventType        = ModelEventType.OnProvisioning,
                Object           = principal,
                ObjectType       = typeof(SPAppPrincipal),
                ObjectDefinition = appPrincipalModel,
                ModelHost        = modelHost
            });

            if (principal == null)
            {
                TraceService.Information((int)LogEventId.ModelProvisionProcessingNewObject, "Processing app principal");

                var endpoints = new List <string>();
                endpoints.Add(appPrincipalModel.RedirectURI);

                var secureString = new SecureString();

                for (int i = 0; i < appPrincipalModel.AppSecret.Length; i++)
                {
                    char c = appPrincipalModel.AppSecret[i];
                    secureString.AppendChar(c);
                }
                secureString.MakeReadOnly();

                var now = DateTime.Now;

                var credential = SPAppPrincipalCredential.CreateFromSymmetricKey(secureString, now, now.AddYears(1));

                var externalAppPrincipalCreationParameters = new SPExternalAppPrincipalCreationParameters(appPrincipalModel.AppId, appPrincipalModel.Title, endpoints, credential)
                {
                    SkipExternalDirectoryRegistration = false
                };

                principal = appPrincipalManager.CreateAppPrincipal(externalAppPrincipalCreationParameters);

                InvokeOnModelEvent(this, new ModelEventArgs
                {
                    CurrentModelNode = null,
                    Model            = null,
                    EventType        = ModelEventType.OnProvisioned,
                    Object           = principal,
                    ObjectType       = typeof(SPAppPrincipal),
                    ObjectDefinition = appPrincipalModel,
                    ModelHost        = modelHost
                });
            }
            else
            {
                TraceService.Information((int)LogEventId.ModelProvisionProcessingExistingObject, "Processing existing app principal");

                InvokeOnModelEvent(this, new ModelEventArgs
                {
                    CurrentModelNode = null,
                    Model            = null,
                    EventType        = ModelEventType.OnProvisioned,
                    Object           = principal,
                    ObjectType       = typeof(SPAppPrincipal),
                    ObjectDefinition = appPrincipalModel,
                    ModelHost        = modelHost
                });
            }
        }