static SPAppPrincipal AppRegister(string identifier, string title, string launchUrl, SPWeb web) {
     List<string> endpointAuthorities = new List<string>() {
         "http://" + new Uri(launchUrl).Host
     };
     SecureString symmetricKey = GenerateSecret(32);
     SPAppPrincipalCredential credential = SPAppPrincipalCredential.CreateFromSymmetricKey(symmetricKey, DateTime.UtcNow, DateTime.UtcNow.AddYears(10));
     SPExternalAppPrincipalCreationParameters creationParameters = new SPExternalAppPrincipalCreationParameters(identifier, title, endpointAuthorities, credential);
     return SPAppPrincipalManager.GetManager(web).CreateAppPrincipal(creationParameters);
 }
Example #2
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
                });
            }
        }
        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
                });
            }
        }