/* tslint:disable */
/* eslint-disable */
/**
 * authentik
 * Making authentication simple.
 *
 * The version of the OpenAPI document: 2025.12.0-rc1
 * Contact: hello@goauthentik.io
 *
 * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
 * https://openapi-generator.tech
 * Do not edit the class manually.
 */

import { mapValues } from '../runtime';
import type { PolicyEngineMode } from './PolicyEngineMode';
import {
    PolicyEngineModeFromJSON,
    PolicyEngineModeFromJSONTyped,
    PolicyEngineModeToJSON,
    PolicyEngineModeToJSONTyped,
} from './PolicyEngineMode';
import type { UserMatchingModeEnum } from './UserMatchingModeEnum';
import {
    UserMatchingModeEnumFromJSON,
    UserMatchingModeEnumFromJSONTyped,
    UserMatchingModeEnumToJSON,
    UserMatchingModeEnumToJSONTyped,
} from './UserMatchingModeEnum';

/**
 * LDAP Source Serializer
 * @export
 * @interface LDAPSourceRequest
 */
export interface LDAPSourceRequest {
    /**
     * Source's display Name.
     * @type {string}
     * @memberof LDAPSourceRequest
     */
    name: string;
    /**
     * Internal source name, used in URLs.
     * @type {string}
     * @memberof LDAPSourceRequest
     */
    slug: string;
    /**
     * 
     * @type {boolean}
     * @memberof LDAPSourceRequest
     */
    enabled?: boolean;
    /**
     * When enabled, this source will be displayed as a prominent button on the login page, instead of a small icon.
     * @type {boolean}
     * @memberof LDAPSourceRequest
     */
    promoted?: boolean;
    /**
     * Flow to use when authenticating existing users.
     * @type {string}
     * @memberof LDAPSourceRequest
     */
    authenticationFlow?: string | null;
    /**
     * Flow to use when enrolling new users.
     * @type {string}
     * @memberof LDAPSourceRequest
     */
    enrollmentFlow?: string | null;
    /**
     * 
     * @type {Array<string>}
     * @memberof LDAPSourceRequest
     */
    userPropertyMappings?: Array<string>;
    /**
     * 
     * @type {Array<string>}
     * @memberof LDAPSourceRequest
     */
    groupPropertyMappings?: Array<string>;
    /**
     * 
     * @type {PolicyEngineMode}
     * @memberof LDAPSourceRequest
     */
    policyEngineMode?: PolicyEngineMode;
    /**
     * How the source determines if an existing user should be authenticated or a new user enrolled.
     * @type {UserMatchingModeEnum}
     * @memberof LDAPSourceRequest
     */
    userMatchingMode?: UserMatchingModeEnum;
    /**
     * 
     * @type {string}
     * @memberof LDAPSourceRequest
     */
    userPathTemplate?: string;
    /**
     * 
     * @type {string}
     * @memberof LDAPSourceRequest
     */
    serverUri: string;
    /**
     * Optionally verify the LDAP Server's Certificate against the CA Chain in this keypair.
     * @type {string}
     * @memberof LDAPSourceRequest
     */
    peerCertificate?: string | null;
    /**
     * Client certificate to authenticate against the LDAP Server's Certificate.
     * @type {string}
     * @memberof LDAPSourceRequest
     */
    clientCertificate?: string | null;
    /**
     * 
     * @type {string}
     * @memberof LDAPSourceRequest
     */
    bindCn?: string;
    /**
     * 
     * @type {string}
     * @memberof LDAPSourceRequest
     */
    bindPassword?: string;
    /**
     * 
     * @type {boolean}
     * @memberof LDAPSourceRequest
     */
    startTls?: boolean;
    /**
     * 
     * @type {boolean}
     * @memberof LDAPSourceRequest
     */
    sni?: boolean;
    /**
     * 
     * @type {string}
     * @memberof LDAPSourceRequest
     */
    baseDn: string;
    /**
     * Prepended to Base DN for User-queries.
     * @type {string}
     * @memberof LDAPSourceRequest
     */
    additionalUserDn?: string;
    /**
     * Prepended to Base DN for Group-queries.
     * @type {string}
     * @memberof LDAPSourceRequest
     */
    additionalGroupDn?: string;
    /**
     * Consider Objects matching this filter to be Users.
     * @type {string}
     * @memberof LDAPSourceRequest
     */
    userObjectFilter?: string;
    /**
     * Consider Objects matching this filter to be Groups.
     * @type {string}
     * @memberof LDAPSourceRequest
     */
    groupObjectFilter?: string;
    /**
     * Field which contains members of a group.
     * @type {string}
     * @memberof LDAPSourceRequest
     */
    groupMembershipField?: string;
    /**
     * Attribute which matches the value of `group_membership_field`.
     * @type {string}
     * @memberof LDAPSourceRequest
     */
    userMembershipAttribute?: string;
    /**
     * Field which contains a unique Identifier.
     * @type {string}
     * @memberof LDAPSourceRequest
     */
    objectUniquenessField?: string;
    /**
     * Update internal authentik password when login succeeds with LDAP
     * @type {boolean}
     * @memberof LDAPSourceRequest
     */
    passwordLoginUpdateInternalPassword?: boolean;
    /**
     * 
     * @type {boolean}
     * @memberof LDAPSourceRequest
     */
    syncUsers?: boolean;
    /**
     * When a user changes their password, sync it back to LDAP. This can only be enabled on a single LDAP source.
     * @type {boolean}
     * @memberof LDAPSourceRequest
     */
    syncUsersPassword?: boolean;
    /**
     * 
     * @type {boolean}
     * @memberof LDAPSourceRequest
     */
    syncGroups?: boolean;
    /**
     * 
     * @type {string}
     * @memberof LDAPSourceRequest
     */
    syncParentGroup?: string | null;
    /**
     * Lookup group membership based on a user attribute instead of a group attribute. This allows nested group resolution on systems like FreeIPA and Active Directory
     * @type {boolean}
     * @memberof LDAPSourceRequest
     */
    lookupGroupsFromUser?: boolean;
    /**
     * Delete authentik users and groups which were previously supplied by this source, but are now missing from it.
     * @type {boolean}
     * @memberof LDAPSourceRequest
     */
    deleteNotFoundObjects?: boolean;
}



/**
 * Check if a given object implements the LDAPSourceRequest interface.
 */
export function instanceOfLDAPSourceRequest(value: object): value is LDAPSourceRequest {
    if (!('name' in value) || value['name'] === undefined) return false;
    if (!('slug' in value) || value['slug'] === undefined) return false;
    if (!('serverUri' in value) || value['serverUri'] === undefined) return false;
    if (!('baseDn' in value) || value['baseDn'] === undefined) return false;
    return true;
}

export function LDAPSourceRequestFromJSON(json: any): LDAPSourceRequest {
    return LDAPSourceRequestFromJSONTyped(json, false);
}

export function LDAPSourceRequestFromJSONTyped(json: any, ignoreDiscriminator: boolean): LDAPSourceRequest {
    if (json == null) {
        return json;
    }
    return {
        
        'name': json['name'],
        'slug': json['slug'],
        'enabled': json['enabled'] == null ? undefined : json['enabled'],
        'promoted': json['promoted'] == null ? undefined : json['promoted'],
        'authenticationFlow': json['authentication_flow'] == null ? undefined : json['authentication_flow'],
        'enrollmentFlow': json['enrollment_flow'] == null ? undefined : json['enrollment_flow'],
        'userPropertyMappings': json['user_property_mappings'] == null ? undefined : json['user_property_mappings'],
        'groupPropertyMappings': json['group_property_mappings'] == null ? undefined : json['group_property_mappings'],
        'policyEngineMode': json['policy_engine_mode'] == null ? undefined : PolicyEngineModeFromJSON(json['policy_engine_mode']),
        'userMatchingMode': json['user_matching_mode'] == null ? undefined : UserMatchingModeEnumFromJSON(json['user_matching_mode']),
        'userPathTemplate': json['user_path_template'] == null ? undefined : json['user_path_template'],
        'serverUri': json['server_uri'],
        'peerCertificate': json['peer_certificate'] == null ? undefined : json['peer_certificate'],
        'clientCertificate': json['client_certificate'] == null ? undefined : json['client_certificate'],
        'bindCn': json['bind_cn'] == null ? undefined : json['bind_cn'],
        'bindPassword': json['bind_password'] == null ? undefined : json['bind_password'],
        'startTls': json['start_tls'] == null ? undefined : json['start_tls'],
        'sni': json['sni'] == null ? undefined : json['sni'],
        'baseDn': json['base_dn'],
        'additionalUserDn': json['additional_user_dn'] == null ? undefined : json['additional_user_dn'],
        'additionalGroupDn': json['additional_group_dn'] == null ? undefined : json['additional_group_dn'],
        'userObjectFilter': json['user_object_filter'] == null ? undefined : json['user_object_filter'],
        'groupObjectFilter': json['group_object_filter'] == null ? undefined : json['group_object_filter'],
        'groupMembershipField': json['group_membership_field'] == null ? undefined : json['group_membership_field'],
        'userMembershipAttribute': json['user_membership_attribute'] == null ? undefined : json['user_membership_attribute'],
        'objectUniquenessField': json['object_uniqueness_field'] == null ? undefined : json['object_uniqueness_field'],
        'passwordLoginUpdateInternalPassword': json['password_login_update_internal_password'] == null ? undefined : json['password_login_update_internal_password'],
        'syncUsers': json['sync_users'] == null ? undefined : json['sync_users'],
        'syncUsersPassword': json['sync_users_password'] == null ? undefined : json['sync_users_password'],
        'syncGroups': json['sync_groups'] == null ? undefined : json['sync_groups'],
        'syncParentGroup': json['sync_parent_group'] == null ? undefined : json['sync_parent_group'],
        'lookupGroupsFromUser': json['lookup_groups_from_user'] == null ? undefined : json['lookup_groups_from_user'],
        'deleteNotFoundObjects': json['delete_not_found_objects'] == null ? undefined : json['delete_not_found_objects'],
    };
}

export function LDAPSourceRequestToJSON(json: any): LDAPSourceRequest {
    return LDAPSourceRequestToJSONTyped(json, false);
}

export function LDAPSourceRequestToJSONTyped(value?: LDAPSourceRequest | null, ignoreDiscriminator: boolean = false): any {
    if (value == null) {
        return value;
    }

    return {
        
        'name': value['name'],
        'slug': value['slug'],
        'enabled': value['enabled'],
        'promoted': value['promoted'],
        'authentication_flow': value['authenticationFlow'],
        'enrollment_flow': value['enrollmentFlow'],
        'user_property_mappings': value['userPropertyMappings'],
        'group_property_mappings': value['groupPropertyMappings'],
        'policy_engine_mode': PolicyEngineModeToJSON(value['policyEngineMode']),
        'user_matching_mode': UserMatchingModeEnumToJSON(value['userMatchingMode']),
        'user_path_template': value['userPathTemplate'],
        'server_uri': value['serverUri'],
        'peer_certificate': value['peerCertificate'],
        'client_certificate': value['clientCertificate'],
        'bind_cn': value['bindCn'],
        'bind_password': value['bindPassword'],
        'start_tls': value['startTls'],
        'sni': value['sni'],
        'base_dn': value['baseDn'],
        'additional_user_dn': value['additionalUserDn'],
        'additional_group_dn': value['additionalGroupDn'],
        'user_object_filter': value['userObjectFilter'],
        'group_object_filter': value['groupObjectFilter'],
        'group_membership_field': value['groupMembershipField'],
        'user_membership_attribute': value['userMembershipAttribute'],
        'object_uniqueness_field': value['objectUniquenessField'],
        'password_login_update_internal_password': value['passwordLoginUpdateInternalPassword'],
        'sync_users': value['syncUsers'],
        'sync_users_password': value['syncUsersPassword'],
        'sync_groups': value['syncGroups'],
        'sync_parent_group': value['syncParentGroup'],
        'lookup_groups_from_user': value['lookupGroupsFromUser'],
        'delete_not_found_objects': value['deleteNotFoundObjects'],
    };
}

