<commit_before>/**
 * Провайдер аутентификации.
 * @mixes ajaxRequestMixin
 * @constructor
 */
function AuthenticationProvider( baseAddress ) {
    this.baseAddress = baseAddress;
}

_.extend( AuthenticationProvider.prototype, {

    handlers: {
        onActiveRoleChanged: $.Callbacks(),
        onSignInInternal: $.Callbacks(),
        onSignOut: $.Callbacks()
    },

    /**
     * Возвращает информацию о текущем пользователе.
     * @param resultCallback
     * @param errorCallback
     * @public
     */
    getCurrentUser: function( resultCallback, errorCallback ) {
        this.sendPostRequestForServiceResult( '/Auth/GetCurrentUser', {}, resultCallback, errorCallback );
    },

    /**
     * @public
     * @description Изменяет пароль текущего пользователя.
     * @param oldPassword
     * @param newPassword
     * @param resultCallback
     * @param errorCallback
     */
    changePassword: function( oldPassword, newPassword, resultCallback, errorCallback ) {
        var changePasswordForm = {
            OldPassword: <PASSWORD>,
            NewPassword: <PASSWORD>
        };

        this.sendPostRequestForServiceResult( '/Auth/ChangePassword', changePasswordForm, resultCallback, errorCallback );
    },

    /**
     * @public
     * @description Изменяет персональную информацию текущего пользователя.
     * @param displayName
     * @param description
     * @param resultCallback
     * @param errorCallback
     */
    changeProfile: function( displayName, description, resultCallback, errorCallback ) {
        var changeProfileForm = {
            DisplayName: displayName,
            Description: description
        };

        this.sendPostRequestForServiceResult( '/Auth/ChangeProfile', changeProfileForm, resultCallback, errorCallback );
    },

    /**
     * @public
     * @description Осуществляет вход пользователя в систему через внутренний провайдер.
     * @param userName
     * @param password
     * @param remember
     * @param resultCallback
     * @param errorCallback
     */
    signInInternal: function( userName, password, remember, resultCallback, errorCallback ) {
        var signInInternalForm = {
            UserName: userName,
            Password: password,
            Remember: remember
        };

        this.sendPostRequestForServiceResult( '/Auth/SignInInternal', signInInternalForm, resultCallback, errorCallback );
    },

    /**
     * @public
     * @description Возвращает форму входа пользователя в систему через внешний провайдер.
     * @param successUrl
     * @param failureUrl
     * @param resultCallback
     * @param errorCallback
     */
    getSignInExternalForm: function( successUrl, failureUrl, resultCallback, errorCallback ) {
        this.getExternalLoginForm( '/Auth/SignInExternal', successUrl, failureUrl, resultCallback, errorCallback );
    },

    /**
     * @public
     * @description Возвращает форму добавления текущему пользователю имени входа у внешнего провайдера.
     * @param successUrl<commit_msg>UI-2898 Добавить методы в сервис аутентификации<commit_after>/**
 * Провайдер аутентификации.
 * @mixes ajaxRequestMixin
 * @constructor
 */
function AuthenticationProvider( baseAddress ) {
    this.baseAddress = baseAddress;
}

_.extend( AuthenticationProvider.prototype, {

    handlers: {
        onActiveRoleChanged: $.Callbacks(),
        onSignInInternal: $.Callbacks(),
        onSignOut: $.Callbacks()
    },

    /**
     * Возвращает информацию о текущем пользователе.
     * @param resultCallback
     * @param errorCallback
     * @public
     */
    getCurrentUser: function( resultCallback, errorCallback ) {
        this.sendPostRequestForServiceResult( '/Auth/GetCurrentUser', {}, resultCallback, errorCallback );
    },

    /**
     * @public
     * @description Изменяет пароль текущего пользователя.
     * @param oldPassword
     * @param newPassword
     * @param resultCallback
     * @param errorCallback
     */
    changePassword: function( oldPassword, newPassword, resultCallback, errorCallback ) {
        var changePasswordForm = {
            OldPassword: <PASSWORD>,
            NewPassword: <PASSWORD>
        };

        this.sendPostRequestForServiceResult( '/Auth/ChangePassword', changePasswordForm, resultCallback, errorCallback );
    },

    /**
     * @public
     * @description Изменяет персональную информацию текущего пользователя.
     * @param displayName
     * @param description
     * @param resultCallback
     * @param errorCallback
     */
    changeProfile: function( displayName, description, resultCallback, errorCallback ) {
        var changeProfileForm = {
            DisplayName: displayName,
            Description: description
        };

        this.sendPostRequestForServiceResult( '/Auth/ChangeProfile', changeProfileForm, resultCallback, errorCallback );
    },

    /**
     * @public
     * @description Осуществляет вход пользователя в систему через внутренний провайдер.
     * @param userName
     * @param password
     * @param remember
     * @param resultCallback
     * @param errorCallback
     */
    signInInternal: function( userName, password, remember, resultCallback, errorCallback ) {
        var signInInternalForm = {
            UserName: userName,
            Password: password,
            Remember: remember
        };

        this.sendPostRequestForServiceResult( '/Auth/SignInInternal', signInInternalForm, resultCallback, errorCallback );
    },

    /**
     * Осуществляет вход пользователя в систему по любому идентификатору
     *
     * @param {string} userKey - идентификатор (id, имя пользователя, email, номер телефона)
     * @param {string} password - <PASSWORD>
     * @param {string} remember - запомнить
     * @param {function} resultCallback - при успешном результате
     * @param {function} errorCallback - при неудачном результате
     */
    signIn: function( userKey, password, remember, resultCallback, errorCallback ) {
        var signInForm = {
            UserKey: userKey,
            Password: password,
            Remember: remember
        };

        this.sendPostRequest( '/Auth/SignIn', signInForm, resultCallback, errorCallback );
    },

    /**
     * Осуществляет вход пользователя в систему Id
     *
     * @param {string} userId - идентификатор пользователя
     * @param {string} password - <PASSWORD>
     * @param {string} remember - запомнить
     * @param {function} resultCallback - при успешном результате
     * @param {function} errorCallback - при неудачном результате
     */
    signInById: function( userId, password, remember, resultCallback, errorCallback ) {
        var signInForm = {
            Id: userId,
            Password: password,
            Remember: remember
        };

        this.sendPostRequest( '/Auth/SignInById', signInForm, resultCallback, errorCallback );
    },

    /**
     * Осуществляет вход пользователя в систему по имени
     *
     * @param {string} userName - имя пользователя
     * @param {string} password - <PASSWORD>
     * @param {string} remember - запомнить
     * @param {function} resultCallback - при успешном результате
     * @param {function} errorCallback - при неудачном результате
     */
    signInByUserName: function( userName, password, remember, resultCallback, errorCallback ) {
        var signInForm = {
            UserName: userName,
            Password: password,
            Remember: remember
        };

        this.sendPostRequest( '/Auth/SignInByUserName', signInForm, resultCallback, errorCallback );
    },

    /**
     * Осуществляет вход пользователя в систему по электронной почте
     *
     * @param {string} email - электронная почта
     * @param {string} password - <PASSWORD>
     * @param {string} remember - запомнить
     * @param {function} resultCallback - при успешном результате
     * @param {function} errorCallback - при неудачном результате
     */
    signInByEmail: function( email, password, remember, resultCallback, errorCallback ) {
        var signInForm = {
            Email: email,
            Password: password,
            Remember: remember
        };

        this.sendPostRequest( '/Auth/SignInByEmail', signInForm, resultCallback, errorCallback );
    },

    /**
     * Осуществляет вход пользователя в систему по номеру телефона
     *
     * @param {string} phoneNumber - номер телефона
     * @param {string} password - <PASSWORD>
     * @param {string} remember - запомнить
     * @param {function} resultCallback - при успешном результате
     * @param {function} errorCallback - при неудачном результате
     */
    signInByPhoneNumber: function( phoneNumber, password, remember, resultCallback, errorCallback ) {
        var signInForm = {
            PhoneNumber: phoneNumber,
            Password: password,
            Remember: remember
        };

        this.sendPostRequest( '/Auth/SignInByPhoneNumber', signInForm, resultCallback, errorCallback );
    },

    /**
     * @public
     * @description Возвращает форму входа пользователя в систему через внешний провайдер.
     * @param successUrl
     * @param failureUrl
     * @param resultCallback
     * @param errorCallback
     */
    getSignInExternalForm: function( successUrl, failureUrl, resultCallback, errorCallback ) {
        this.getExternalLoginForm( '/Auth/SignInExternal', successUrl, failureUrl, resultCallback, errorCallback );
    },

    /**
     * @public
     * @description Возвращает форму добавления текущему пользователю имени входа у внешнего провайдера.
     * @param successUrl
{'fraction_non_alphanumeric': 0.09131846266624777, 'fraction_numerical': 0.00041889203057911826, 'mean_word_length': 2.726102223956301, 'pattern_counts': {'":': 0, '<': 12, '<?xml version=': 0, '>': 12, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '7040137', 'n_tokens_mistral': 2671, 'n_tokens_neox': 2852, 'n_words': 643}