Exemple #1
0
        private static User CreateUser(OAuthProvider provider, object tokenData, string userId)
        {
            var userData = provider.GetUserData(tokenData);
            var parent   = LoadOrCreateUserParent(provider.ProviderName);

            var userContentType = Settings.GetValue(SettingsName, UserTypeSettingName, null, "User");
            var userContent     = Content.CreateNew(userContentType, parent, userData.Username);

            if (!userContent.Fields.ContainsKey(provider.IdentifierFieldName))
            {
                var message = $"The {userContent.ContentType.Name} content type does not contain a field named {provider.IdentifierFieldName}. " +
                              $"Please register this field before using the {provider.ProviderName} OAuth provider.";
                throw new InvalidOperationException(message);
            }

            userContent["LoginName"] = userData.Username;
            userContent[provider.IdentifierFieldName] = userId;
            userContent["Enabled"]  = true;
            userContent["FullName"] = userData.FullName ?? userData.Username;

            if (!string.IsNullOrEmpty(userData.Email))
            {
                userContent["Email"] = userData.Email;
            }

            // If a user with the same name already exists, this will throw an exception
            // so that the caller knows that the registration could not be completed.
            userContent.Save();

            return(userContent.ContentHandler as User);
        }
Exemple #2
0
        private static User CreateUser(OAuthProvider provider, object tokenData, string userId)
        {
            var userData = provider.GetUserData(tokenData);
            var parent   = LoadOrCreateUserParent(provider.ProviderName);

            var userContentType = Settings.GetValue(SettingsName, UserTypeSettingName, null, "User");
            var userContent     = Content.CreateNew(userContentType, parent, userData.Username);

            if (!userContent.Fields.ContainsKey(provider.IdentifierFieldName))
            {
                var message = $"The {userContent.ContentType.Name} content type does not contain a field named {provider.IdentifierFieldName}. " +
                              $"Please register this field before using the {provider.ProviderName} OAuth provider.";
                throw new InvalidOperationException(message);
            }

            userContent["LoginName"] = userData.Username;
            userContent[provider.IdentifierFieldName] = userId;
            userContent["Enabled"]  = true;
            userContent["FullName"] = userData.FullName ?? userData.Username;

            if (!string.IsNullOrEmpty(userData.Email))
            {
                userContent["Email"] = userData.Email;
            }

            MemoryStream imageStream = null;

            // set user avatar if provided by the oauth provider
            if (!string.IsNullOrEmpty(userData.AvatarUrl))
            {
                var imageData = DownloadImage(userData.AvatarUrl);
                if (imageData != null && imageData.Length > 0)
                {
                    imageStream = new MemoryStream(imageData);

                    var imageName = GetImageName(imageStream);

                    // make sure the stream is set back to its start
                    imageStream.Seek(0, SeekOrigin.Begin);

                    var binaryData = new BinaryData {
                        FileName = imageName
                    };
                    binaryData.SetStream(imageStream);

                    // clear the reference field to make sure this new image will be used as the avatar
                    userContent["ImageRef"]  = null;
                    userContent["ImageData"] = binaryData;
                }
                else
                {
                    SnTrace.Repository.WriteError($"OAuth manager: could not set avatar of user {userData.Username}: empty image.");
                }
            }

            // If a user with the same name already exists, this will throw an exception
            // so that the caller knows that the registration could not be completed.
            try
            {
                userContent.Save();
            }
            finally
            {
                imageStream?.Dispose();
            }

            return(userContent.ContentHandler as User);
        }