# coding=utf-8
# *** WARNING: this file was generated by the Pulumi Terraform Bridge (tfgen) Tool. ***
# *** Do not edit by hand unless you're certain you know what you are doing! ***

import copy
import warnings
import pulumi
import pulumi.runtime
from typing import Any, Callable, Mapping, Optional, Sequence, Union, overload
from .. import _utilities
from . import outputs
from ._inputs import *

__all__ = ['UserArgs', 'User']

@pulumi.input_type
class UserArgs:
    def __init__(__self__, *,
                 email: pulumi.Input[str],
                 first_name: pulumi.Input[str],
                 last_name: pulumi.Input[str],
                 login: pulumi.Input[str],
                 city: Optional[pulumi.Input[str]] = None,
                 cost_center: Optional[pulumi.Input[str]] = None,
                 country_code: Optional[pulumi.Input[str]] = None,
                 custom_profile_attributes: Optional[pulumi.Input[str]] = None,
                 custom_profile_attributes_to_ignores: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None,
                 department: Optional[pulumi.Input[str]] = None,
                 display_name: Optional[pulumi.Input[str]] = None,
                 division: Optional[pulumi.Input[str]] = None,
                 employee_number: Optional[pulumi.Input[str]] = None,
                 expire_password_on_create: Optional[pulumi.Input[bool]] = None,
                 honorific_prefix: Optional[pulumi.Input[str]] = None,
                 honorific_suffix: Optional[pulumi.Input[str]] = None,
                 locale: Optional[pulumi.Input[str]] = None,
                 manager: Optional[pulumi.Input[str]] = None,
                 manager_id: Optional[pulumi.Input[str]] = None,
                 middle_name: Optional[pulumi.Input[str]] = None,
                 mobile_phone: Optional[pulumi.Input[str]] = None,
                 nick_name: Optional[pulumi.Input[str]] = None,
                 old_password: Optional[pulumi.Input[str]] = None,
                 organization: Optional[pulumi.Input[str]] = None,
                 password: Optional[pulumi.Input[str]] = None,
                 password_hash: Optional[pulumi.Input['UserPasswordHashArgs']] = None,
                 password_inline_hook: Optional[pulumi.Input[str]] = None,
                 postal_address: Optional[pulumi.Input[str]] = None,
                 preferred_language: Optional[pulumi.Input[str]] = None,
                 primary_phone: Optional[pulumi.Input[str]] = None,
                 profile_url: Optional[pulumi.Input[str]] = None,
                 recovery_answer: Optional[pulumi.Input[str]] = None,
                 recovery_question: Optional[pulumi.Input[str]] = None,
                 second_email: Optional[pulumi.Input[str]] = None,
                 skip_roles: Optional[pulumi.Input[bool]] = None,
                 state: Optional[pulumi.Input[str]] = None,
                 status: Optional[pulumi.Input[str]] = None,
                 street_address: Optional[pulumi.Input[str]] = None,
                 timezone: Optional[pulumi.Input[str]] = None,
                 title: Optional[pulumi.Input[str]] = None,
                 user_type: Optional[pulumi.Input[str]] = None,
                 zip_code: Optional[pulumi.Input[str]] = None):
        """
        The set of arguments for constructing a User resource.
        :param pulumi.Input[str] email: User primary email address
        :param pulumi.Input[str] first_name: User first name
        :param pulumi.Input[str] last_name: User last name
        :param pulumi.Input[str] login: User Okta login
        :param pulumi.Input[str] city: User city
        :param pulumi.Input[str] cost_center: User cost center
        :param pulumi.Input[str] country_code: User country code
        :param pulumi.Input[str] custom_profile_attributes: JSON formatted custom attributes for a user. It must be JSON due to various types Okta allows.
        :param pulumi.Input[Sequence[pulumi.Input[str]]] custom_profile_attributes_to_ignores: List of custom_profile_attribute keys that should be excluded from being managed by Terraform.
        :param pulumi.Input[str] department: User department
        :param pulumi.Input[str] display_name: User display name, suitable to show end users
        :param pulumi.Input[str] division: User division
        :param pulumi.Input[str] employee_number: User employee number
        :param pulumi.Input[bool] expire_password_on_create: If set to `true`, the user will have to change the password at the next login. This property will be used when user is being created and works only when `password` field is set
        :param pulumi.Input[str] honorific_prefix: User honorific prefix
        :param pulumi.Input[str] honorific_suffix: User honorific suffix
        :param pulumi.Input[str] locale: User default location
        :param pulumi.Input[str] manager: Manager of User
        :param pulumi.Input[str] manager_id: Manager ID of User
        :param pulumi.Input[str] middle_name: User middle name
        :param pulumi.Input[str] mobile_phone: User mobile phone number
        :param pulumi.Input[str] nick_name: User nickname
        :param pulumi.Input[str] old_password: Old User Password. Should be only set in case the password was not changed using the provider
        :param pulumi.Input[str] organization: User organization
        :param pulumi.Input[str] password: User Password
        :param pulumi.Input['UserPasswordHashArgs'] password_hash: Specifies a hashed password to import into Okta.
        :param pulumi.Input[str] password_inline_hook: When specified, the Password Inline Hook is triggered to handle verification of the end user's password the first time the user tries to sign in
        :param pulumi.Input[str] postal_address: User mailing address
        :param pulumi.Input[str] preferred_language: User preferred language
        :param pulumi.Input[str] primary_phone: User primary phone number
        :param pulumi.Input[str] profile_url: User online profile (web page)
        :param pulumi.Input[str] recovery_answer: User Password Recovery Answer
        :param pulumi.Input[str] recovery_question: User Password Recovery Question
        :param pulumi.Input[str] second_email: User secondary email address, used for account recovery
        :param pulumi.Input[bool] skip_roles: Do not populate user roles information (prevents additional API call)
        :param pulumi.Input[str] state: User state or region
        :param pulumi.Input[str] status: The status of the User in Okta - remove to set user back to active/provisioned
        :param pulumi.Input[str] street_address: User street address
        :param pulumi.Input[str] timezone: User default timezone
        :param pulumi.Input[str] title: User title
        :param pulumi.Input[str] user_type: User employee type
        :param pulumi.Input[str] zip_code: User zipcode or postal code
        """
        UserArgs._configure(
            lambda key, value: pulumi.set(__self__, key, value),
            email=email,
            first_name=first_name,
            last_name=last_name,
            login=login,
            city=city,
            cost_center=cost_center,
            country_code=country_code,
            custom_profile_attributes=custom_profile_attributes,
            custom_profile_attributes_to_ignores=custom_profile_attributes_to_ignores,
            department=department,
            display_name=display_name,
            division=division,
            employee_number=employee_number,
            expire_password_on_create=expire_password_on_create,
            honorific_prefix=honorific_prefix,
            honorific_suffix=honorific_suffix,
            locale=locale,
            manager=manager,
            manager_id=manager_id,
            middle_name=middle_name,
            mobile_phone=mobile_phone,
            nick_name=nick_name,
            old_password=old_password,
            organization=organization,
            password=password,
            password_hash=password_hash,
            password_inline_hook=password_inline_hook,
            postal_address=postal_address,
            preferred_language=preferred_language,
            primary_phone=primary_phone,
            profile_url=profile_url,
            recovery_answer=recovery_answer,
            recovery_question=recovery_question,
            second_email=second_email,
            skip_roles=skip_roles,
            state=state,
            status=status,
            street_address=street_address,
            timezone=timezone,
            title=title,
            user_type=user_type,
            zip_code=zip_code,
        )
    @staticmethod
    def _configure(
             _setter: Callable[[Any, Any], None],
             email: pulumi.Input[str],
             first_name: pulumi.Input[str],
             last_name: pulumi.Input[str],
             login: pulumi.Input[str],
             city: Optional[pulumi.Input[str]] = None,
             cost_center: Optional[pulumi.Input[str]] = None,
             country_code: Optional[pulumi.Input[str]] = None,
             custom_profile_attributes: Optional[pulumi.Input[str]] = None,
             custom_profile_attributes_to_ignores: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None,
             department: Optional[pulumi.Input[str]] = None,
             display_name: Optional[pulumi.Input[str]] = None,
             division: Optional[pulumi.Input[str]] = None,
             employee_number: Optional[pulumi.Input[str]] = None,
             expire_password_on_create: Optional[pulumi.Input[bool]] = None,
             honorific_prefix: Optional[pulumi.Input[str]] = None,
             honorific_suffix: Optional[pulumi.Input[str]] = None,
             locale: Optional[pulumi.Input[str]] = None,
             manager: Optional[pulumi.Input[str]] = None,
             manager_id: Optional[pulumi.Input[str]] = None,
             middle_name: Optional[pulumi.Input[str]] = None,
             mobile_phone: Optional[pulumi.Input[str]] = None,
             nick_name: Optional[pulumi.Input[str]] = None,
             old_password: Optional[pulumi.Input[str]] = None,
             organization: Optional[pulumi.Input[str]] = None,
             password: Optional[pulumi.Input[str]] = None,
             password_hash: Optional[pulumi.Input['UserPasswordHashArgs']] = None,
             password_inline_hook: Optional[pulumi.Input[str]] = None,
             postal_address: Optional[pulumi.Input[str]] = None,
             preferred_language: Optional[pulumi.Input[str]] = None,
             primary_phone: Optional[pulumi.Input[str]] = None,
             profile_url: Optional[pulumi.Input[str]] = None,
             recovery_answer: Optional[pulumi.Input[str]] = None,
             recovery_question: Optional[pulumi.Input[str]] = None,
             second_email: Optional[pulumi.Input[str]] = None,
             skip_roles: Optional[pulumi.Input[bool]] = None,
             state: Optional[pulumi.Input[str]] = None,
             status: Optional[pulumi.Input[str]] = None,
             street_address: Optional[pulumi.Input[str]] = None,
             timezone: Optional[pulumi.Input[str]] = None,
             title: Optional[pulumi.Input[str]] = None,
             user_type: Optional[pulumi.Input[str]] = None,
             zip_code: Optional[pulumi.Input[str]] = None,
             opts: Optional[pulumi.ResourceOptions]=None,
             **kwargs):
        if 'firstName' in kwargs:
            first_name = kwargs['firstName']
        if 'lastName' in kwargs:
            last_name = kwargs['lastName']
        if 'costCenter' in kwargs:
            cost_center = kwargs['costCenter']
        if 'countryCode' in kwargs:
            country_code = kwargs['countryCode']
        if 'customProfileAttributes' in kwargs:
            custom_profile_attributes = kwargs['customProfileAttributes']
        if 'customProfileAttributesToIgnores' in kwargs:
            custom_profile_attributes_to_ignores = kwargs['customProfileAttributesToIgnores']
        if 'displayName' in kwargs:
            display_name = kwargs['displayName']
        if 'employeeNumber' in kwargs:
            employee_number = kwargs['employeeNumber']
        if 'expirePasswordOnCreate' in kwargs:
            expire_password_on_create = kwargs['expirePasswordOnCreate']
        if 'honorificPrefix' in kwargs:
            honorific_prefix = kwargs['honorificPrefix']
        if 'honorificSuffix' in kwargs:
            honorific_suffix = kwargs['honorificSuffix']
        if 'managerId' in kwargs:
            manager_id = kwargs['managerId']
        if 'middleName' in kwargs:
            middle_name = kwargs['middleName']
        if 'mobilePhone' in kwargs:
            mobile_phone = kwargs['mobilePhone']
        if 'nickName' in kwargs:
            nick_name = kwargs['nickName']
        if 'oldPassword' in kwargs:
            old_password = kwargs['oldPassword']
        if 'passwordHash' in kwargs:
            password_hash = kwargs['passwordHash']
        if 'passwordInlineHook' in kwargs:
            password_inline_hook = kwargs['passwordInlineHook']
        if 'postalAddress' in kwargs:
            postal_address = kwargs['postalAddress']
        if 'preferredLanguage' in kwargs:
            preferred_language = kwargs['preferredLanguage']
        if 'primaryPhone' in kwargs:
            primary_phone = kwargs['primaryPhone']
        if 'profileUrl' in kwargs:
            profile_url = kwargs['profileUrl']
        if 'recoveryAnswer' in kwargs:
            recovery_answer = kwargs['recoveryAnswer']
        if 'recoveryQuestion' in kwargs:
            recovery_question = kwargs['recoveryQuestion']
        if 'secondEmail' in kwargs:
            second_email = kwargs['secondEmail']
        if 'skipRoles' in kwargs:
            skip_roles = kwargs['skipRoles']
        if 'streetAddress' in kwargs:
            street_address = kwargs['streetAddress']
        if 'userType' in kwargs:
            user_type = kwargs['userType']
        if 'zipCode' in kwargs:
            zip_code = kwargs['zipCode']

        _setter("email", email)
        _setter("first_name", first_name)
        _setter("last_name", last_name)
        _setter("login", login)
        if city is not None:
            _setter("city", city)
        if cost_center is not None:
            _setter("cost_center", cost_center)
        if country_code is not None:
            _setter("country_code", country_code)
        if custom_profile_attributes is not None:
            _setter("custom_profile_attributes", custom_profile_attributes)
        if custom_profile_attributes_to_ignores is not None:
            _setter("custom_profile_attributes_to_ignores", custom_profile_attributes_to_ignores)
        if department is not None:
            _setter("department", department)
        if display_name is not None:
            _setter("display_name", display_name)
        if division is not None:
            _setter("division", division)
        if employee_number is not None:
            _setter("employee_number", employee_number)
        if expire_password_on_create is not None:
            _setter("expire_password_on_create", expire_password_on_create)
        if honorific_prefix is not None:
            _setter("honorific_prefix", honorific_prefix)
        if honorific_suffix is not None:
            _setter("honorific_suffix", honorific_suffix)
        if locale is not None:
            _setter("locale", locale)
        if manager is not None:
            _setter("manager", manager)
        if manager_id is not None:
            _setter("manager_id", manager_id)
        if middle_name is not None:
            _setter("middle_name", middle_name)
        if mobile_phone is not None:
            _setter("mobile_phone", mobile_phone)
        if nick_name is not None:
            _setter("nick_name", nick_name)
        if old_password is not None:
            _setter("old_password", old_password)
        if organization is not None:
            _setter("organization", organization)
        if password is not None:
            _setter("password", password)
        if password_hash is not None:
            _setter("password_hash", password_hash)
        if password_inline_hook is not None:
            _setter("password_inline_hook", password_inline_hook)
        if postal_address is not None:
            _setter("postal_address", postal_address)
        if preferred_language is not None:
            _setter("preferred_language", preferred_language)
        if primary_phone is not None:
            _setter("primary_phone", primary_phone)
        if profile_url is not None:
            _setter("profile_url", profile_url)
        if recovery_answer is not None:
            _setter("recovery_answer", recovery_answer)
        if recovery_question is not None:
            _setter("recovery_question", recovery_question)
        if second_email is not None:
            _setter("second_email", second_email)
        if skip_roles is not None:
            warnings.warn("""Because admin_roles has been removed, this attribute is a no op and will be removed""", DeprecationWarning)
            pulumi.log.warn("""skip_roles is deprecated: Because admin_roles has been removed, this attribute is a no op and will be removed""")
        if skip_roles is not None:
            _setter("skip_roles", skip_roles)
        if state is not None:
            _setter("state", state)
        if status is not None:
            _setter("status", status)
        if street_address is not None:
            _setter("street_address", street_address)
        if timezone is not None:
            _setter("timezone", timezone)
        if title is not None:
            _setter("title", title)
        if user_type is not None:
            _setter("user_type", user_type)
        if zip_code is not None:
            _setter("zip_code", zip_code)

    @property
    @pulumi.getter
    def email(self) -> pulumi.Input[str]:
        """
        User primary email address
        """
        return pulumi.get(self, "email")

    @email.setter
    def email(self, value: pulumi.Input[str]):
        pulumi.set(self, "email", value)

    @property
    @pulumi.getter(name="firstName")
    def first_name(self) -> pulumi.Input[str]:
        """
        User first name
        """
        return pulumi.get(self, "first_name")

    @first_name.setter
    def first_name(self, value: pulumi.Input[str]):
        pulumi.set(self, "first_name", value)

    @property
    @pulumi.getter(name="lastName")
    def last_name(self) -> pulumi.Input[str]:
        """
        User last name
        """
        return pulumi.get(self, "last_name")

    @last_name.setter
    def last_name(self, value: pulumi.Input[str]):
        pulumi.set(self, "last_name", value)

    @property
    @pulumi.getter
    def login(self) -> pulumi.Input[str]:
        """
        User Okta login
        """
        return pulumi.get(self, "login")

    @login.setter
    def login(self, value: pulumi.Input[str]):
        pulumi.set(self, "login", value)

    @property
    @pulumi.getter
    def city(self) -> Optional[pulumi.Input[str]]:
        """
        User city
        """
        return pulumi.get(self, "city")

    @city.setter
    def city(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "city", value)

    @property
    @pulumi.getter(name="costCenter")
    def cost_center(self) -> Optional[pulumi.Input[str]]:
        """
        User cost center
        """
        return pulumi.get(self, "cost_center")

    @cost_center.setter
    def cost_center(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "cost_center", value)

    @property
    @pulumi.getter(name="countryCode")
    def country_code(self) -> Optional[pulumi.Input[str]]:
        """
        User country code
        """
        return pulumi.get(self, "country_code")

    @country_code.setter
    def country_code(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "country_code", value)

    @property
    @pulumi.getter(name="customProfileAttributes")
    def custom_profile_attributes(self) -> Optional[pulumi.Input[str]]:
        """
        JSON formatted custom attributes for a user. It must be JSON due to various types Okta allows.
        """
        return pulumi.get(self, "custom_profile_attributes")

    @custom_profile_attributes.setter
    def custom_profile_attributes(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "custom_profile_attributes", value)

    @property
    @pulumi.getter(name="customProfileAttributesToIgnores")
    def custom_profile_attributes_to_ignores(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]:
        """
        List of custom_profile_attribute keys that should be excluded from being managed by Terraform.
        """
        return pulumi.get(self, "custom_profile_attributes_to_ignores")

    @custom_profile_attributes_to_ignores.setter
    def custom_profile_attributes_to_ignores(self, value: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]):
        pulumi.set(self, "custom_profile_attributes_to_ignores", value)

    @property
    @pulumi.getter
    def department(self) -> Optional[pulumi.Input[str]]:
        """
        User department
        """
        return pulumi.get(self, "department")

    @department.setter
    def department(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "department", value)

    @property
    @pulumi.getter(name="displayName")
    def display_name(self) -> Optional[pulumi.Input[str]]:
        """
        User display name, suitable to show end users
        """
        return pulumi.get(self, "display_name")

    @display_name.setter
    def display_name(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "display_name", value)

    @property
    @pulumi.getter
    def division(self) -> Optional[pulumi.Input[str]]:
        """
        User division
        """
        return pulumi.get(self, "division")

    @division.setter
    def division(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "division", value)

    @property
    @pulumi.getter(name="employeeNumber")
    def employee_number(self) -> Optional[pulumi.Input[str]]:
        """
        User employee number
        """
        return pulumi.get(self, "employee_number")

    @employee_number.setter
    def employee_number(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "employee_number", value)

    @property
    @pulumi.getter(name="expirePasswordOnCreate")
    def expire_password_on_create(self) -> Optional[pulumi.Input[bool]]:
        """
        If set to `true`, the user will have to change the password at the next login. This property will be used when user is being created and works only when `password` field is set
        """
        return pulumi.get(self, "expire_password_on_create")

    @expire_password_on_create.setter
    def expire_password_on_create(self, value: Optional[pulumi.Input[bool]]):
        pulumi.set(self, "expire_password_on_create", value)

    @property
    @pulumi.getter(name="honorificPrefix")
    def honorific_prefix(self) -> Optional[pulumi.Input[str]]:
        """
        User honorific prefix
        """
        return pulumi.get(self, "honorific_prefix")

    @honorific_prefix.setter
    def honorific_prefix(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "honorific_prefix", value)

    @property
    @pulumi.getter(name="honorificSuffix")
    def honorific_suffix(self) -> Optional[pulumi.Input[str]]:
        """
        User honorific suffix
        """
        return pulumi.get(self, "honorific_suffix")

    @honorific_suffix.setter
    def honorific_suffix(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "honorific_suffix", value)

    @property
    @pulumi.getter
    def locale(self) -> Optional[pulumi.Input[str]]:
        """
        User default location
        """
        return pulumi.get(self, "locale")

    @locale.setter
    def locale(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "locale", value)

    @property
    @pulumi.getter
    def manager(self) -> Optional[pulumi.Input[str]]:
        """
        Manager of User
        """
        return pulumi.get(self, "manager")

    @manager.setter
    def manager(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "manager", value)

    @property
    @pulumi.getter(name="managerId")
    def manager_id(self) -> Optional[pulumi.Input[str]]:
        """
        Manager ID of User
        """
        return pulumi.get(self, "manager_id")

    @manager_id.setter
    def manager_id(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "manager_id", value)

    @property
    @pulumi.getter(name="middleName")
    def middle_name(self) -> Optional[pulumi.Input[str]]:
        """
        User middle name
        """
        return pulumi.get(self, "middle_name")

    @middle_name.setter
    def middle_name(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "middle_name", value)

    @property
    @pulumi.getter(name="mobilePhone")
    def mobile_phone(self) -> Optional[pulumi.Input[str]]:
        """
        User mobile phone number
        """
        return pulumi.get(self, "mobile_phone")

    @mobile_phone.setter
    def mobile_phone(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "mobile_phone", value)

    @property
    @pulumi.getter(name="nickName")
    def nick_name(self) -> Optional[pulumi.Input[str]]:
        """
        User nickname
        """
        return pulumi.get(self, "nick_name")

    @nick_name.setter
    def nick_name(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "nick_name", value)

    @property
    @pulumi.getter(name="oldPassword")
    def old_password(self) -> Optional[pulumi.Input[str]]:
        """
        Old User Password. Should be only set in case the password was not changed using the provider
        """
        return pulumi.get(self, "old_password")

    @old_password.setter
    def old_password(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "old_password", value)

    @property
    @pulumi.getter
    def organization(self) -> Optional[pulumi.Input[str]]:
        """
        User organization
        """
        return pulumi.get(self, "organization")

    @organization.setter
    def organization(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "organization", value)

    @property
    @pulumi.getter
    def password(self) -> Optional[pulumi.Input[str]]:
        """
        User Password
        """
        return pulumi.get(self, "password")

    @password.setter
    def password(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "password", value)

    @property
    @pulumi.getter(name="passwordHash")
    def password_hash(self) -> Optional[pulumi.Input['UserPasswordHashArgs']]:
        """
        Specifies a hashed password to import into Okta.
        """
        return pulumi.get(self, "password_hash")

    @password_hash.setter
    def password_hash(self, value: Optional[pulumi.Input['UserPasswordHashArgs']]):
        pulumi.set(self, "password_hash", value)

    @property
    @pulumi.getter(name="passwordInlineHook")
    def password_inline_hook(self) -> Optional[pulumi.Input[str]]:
        """
        When specified, the Password Inline Hook is triggered to handle verification of the end user's password the first time the user tries to sign in
        """
        return pulumi.get(self, "password_inline_hook")

    @password_inline_hook.setter
    def password_inline_hook(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "password_inline_hook", value)

    @property
    @pulumi.getter(name="postalAddress")
    def postal_address(self) -> Optional[pulumi.Input[str]]:
        """
        User mailing address
        """
        return pulumi.get(self, "postal_address")

    @postal_address.setter
    def postal_address(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "postal_address", value)

    @property
    @pulumi.getter(name="preferredLanguage")
    def preferred_language(self) -> Optional[pulumi.Input[str]]:
        """
        User preferred language
        """
        return pulumi.get(self, "preferred_language")

    @preferred_language.setter
    def preferred_language(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "preferred_language", value)

    @property
    @pulumi.getter(name="primaryPhone")
    def primary_phone(self) -> Optional[pulumi.Input[str]]:
        """
        User primary phone number
        """
        return pulumi.get(self, "primary_phone")

    @primary_phone.setter
    def primary_phone(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "primary_phone", value)

    @property
    @pulumi.getter(name="profileUrl")
    def profile_url(self) -> Optional[pulumi.Input[str]]:
        """
        User online profile (web page)
        """
        return pulumi.get(self, "profile_url")

    @profile_url.setter
    def profile_url(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "profile_url", value)

    @property
    @pulumi.getter(name="recoveryAnswer")
    def recovery_answer(self) -> Optional[pulumi.Input[str]]:
        """
        User Password Recovery Answer
        """
        return pulumi.get(self, "recovery_answer")

    @recovery_answer.setter
    def recovery_answer(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "recovery_answer", value)

    @property
    @pulumi.getter(name="recoveryQuestion")
    def recovery_question(self) -> Optional[pulumi.Input[str]]:
        """
        User Password Recovery Question
        """
        return pulumi.get(self, "recovery_question")

    @recovery_question.setter
    def recovery_question(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "recovery_question", value)

    @property
    @pulumi.getter(name="secondEmail")
    def second_email(self) -> Optional[pulumi.Input[str]]:
        """
        User secondary email address, used for account recovery
        """
        return pulumi.get(self, "second_email")

    @second_email.setter
    def second_email(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "second_email", value)

    @property
    @pulumi.getter(name="skipRoles")
    def skip_roles(self) -> Optional[pulumi.Input[bool]]:
        """
        Do not populate user roles information (prevents additional API call)
        """
        warnings.warn("""Because admin_roles has been removed, this attribute is a no op and will be removed""", DeprecationWarning)
        pulumi.log.warn("""skip_roles is deprecated: Because admin_roles has been removed, this attribute is a no op and will be removed""")

        return pulumi.get(self, "skip_roles")

    @skip_roles.setter
    def skip_roles(self, value: Optional[pulumi.Input[bool]]):
        pulumi.set(self, "skip_roles", value)

    @property
    @pulumi.getter
    def state(self) -> Optional[pulumi.Input[str]]:
        """
        User state or region
        """
        return pulumi.get(self, "state")

    @state.setter
    def state(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "state", value)

    @property
    @pulumi.getter
    def status(self) -> Optional[pulumi.Input[str]]:
        """
        The status of the User in Okta - remove to set user back to active/provisioned
        """
        return pulumi.get(self, "status")

    @status.setter
    def status(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "status", value)

    @property
    @pulumi.getter(name="streetAddress")
    def street_address(self) -> Optional[pulumi.Input[str]]:
        """
        User street address
        """
        return pulumi.get(self, "street_address")

    @street_address.setter
    def street_address(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "street_address", value)

    @property
    @pulumi.getter
    def timezone(self) -> Optional[pulumi.Input[str]]:
        """
        User default timezone
        """
        return pulumi.get(self, "timezone")

    @timezone.setter
    def timezone(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "timezone", value)

    @property
    @pulumi.getter
    def title(self) -> Optional[pulumi.Input[str]]:
        """
        User title
        """
        return pulumi.get(self, "title")

    @title.setter
    def title(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "title", value)

    @property
    @pulumi.getter(name="userType")
    def user_type(self) -> Optional[pulumi.Input[str]]:
        """
        User employee type
        """
        return pulumi.get(self, "user_type")

    @user_type.setter
    def user_type(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "user_type", value)

    @property
    @pulumi.getter(name="zipCode")
    def zip_code(self) -> Optional[pulumi.Input[str]]:
        """
        User zipcode or postal code
        """
        return pulumi.get(self, "zip_code")

    @zip_code.setter
    def zip_code(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "zip_code", value)


@pulumi.input_type
class _UserState:
    def __init__(__self__, *,
                 city: Optional[pulumi.Input[str]] = None,
                 cost_center: Optional[pulumi.Input[str]] = None,
                 country_code: Optional[pulumi.Input[str]] = None,
                 custom_profile_attributes: Optional[pulumi.Input[str]] = None,
                 custom_profile_attributes_to_ignores: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None,
                 department: Optional[pulumi.Input[str]] = None,
                 display_name: Optional[pulumi.Input[str]] = None,
                 division: Optional[pulumi.Input[str]] = None,
                 email: Optional[pulumi.Input[str]] = None,
                 employee_number: Optional[pulumi.Input[str]] = None,
                 expire_password_on_create: Optional[pulumi.Input[bool]] = None,
                 first_name: Optional[pulumi.Input[str]] = None,
                 honorific_prefix: Optional[pulumi.Input[str]] = None,
                 honorific_suffix: Optional[pulumi.Input[str]] = None,
                 last_name: Optional[pulumi.Input[str]] = None,
                 locale: Optional[pulumi.Input[str]] = None,
                 login: Optional[pulumi.Input[str]] = None,
                 manager: Optional[pulumi.Input[str]] = None,
                 manager_id: Optional[pulumi.Input[str]] = None,
                 middle_name: Optional[pulumi.Input[str]] = None,
                 mobile_phone: Optional[pulumi.Input[str]] = None,
                 nick_name: Optional[pulumi.Input[str]] = None,
                 old_password: Optional[pulumi.Input[str]] = None,
                 organization: Optional[pulumi.Input[str]] = None,
                 password: Optional[pulumi.Input[str]] = None,
                 password_hash: Optional[pulumi.Input['UserPasswordHashArgs']] = None,
                 password_inline_hook: Optional[pulumi.Input[str]] = None,
                 postal_address: Optional[pulumi.Input[str]] = None,
                 preferred_language: Optional[pulumi.Input[str]] = None,
                 primary_phone: Optional[pulumi.Input[str]] = None,
                 profile_url: Optional[pulumi.Input[str]] = None,
                 raw_status: Optional[pulumi.Input[str]] = None,
                 recovery_answer: Optional[pulumi.Input[str]] = None,
                 recovery_question: Optional[pulumi.Input[str]] = None,
                 second_email: Optional[pulumi.Input[str]] = None,
                 skip_roles: Optional[pulumi.Input[bool]] = None,
                 state: Optional[pulumi.Input[str]] = None,
                 status: Optional[pulumi.Input[str]] = None,
                 street_address: Optional[pulumi.Input[str]] = None,
                 timezone: Optional[pulumi.Input[str]] = None,
                 title: Optional[pulumi.Input[str]] = None,
                 user_type: Optional[pulumi.Input[str]] = None,
                 zip_code: Optional[pulumi.Input[str]] = None):
        """
        Input properties used for looking up and filtering User resources.
        :param pulumi.Input[str] city: User city
        :param pulumi.Input[str] cost_center: User cost center
        :param pulumi.Input[str] country_code: User country code
        :param pulumi.Input[str] custom_profile_attributes: JSON formatted custom attributes for a user. It must be JSON due to various types Okta allows.
        :param pulumi.Input[Sequence[pulumi.Input[str]]] custom_profile_attributes_to_ignores: List of custom_profile_attribute keys that should be excluded from being managed by Terraform.
        :param pulumi.Input[str] department: User department
        :param pulumi.Input[str] display_name: User display name, suitable to show end users
        :param pulumi.Input[str] division: User division
        :param pulumi.Input[str] email: User primary email address
        :param pulumi.Input[str] employee_number: User employee number
        :param pulumi.Input[bool] expire_password_on_create: If set to `true`, the user will have to change the password at the next login. This property will be used when user is being created and works only when `password` field is set
        :param pulumi.Input[str] first_name: User first name
        :param pulumi.Input[str] honorific_prefix: User honorific prefix
        :param pulumi.Input[str] honorific_suffix: User honorific suffix
        :param pulumi.Input[str] last_name: User last name
        :param pulumi.Input[str] locale: User default location
        :param pulumi.Input[str] login: User Okta login
        :param pulumi.Input[str] manager: Manager of User
        :param pulumi.Input[str] manager_id: Manager ID of User
        :param pulumi.Input[str] middle_name: User middle name
        :param pulumi.Input[str] mobile_phone: User mobile phone number
        :param pulumi.Input[str] nick_name: User nickname
        :param pulumi.Input[str] old_password: Old User Password. Should be only set in case the password was not changed using the provider
        :param pulumi.Input[str] organization: User organization
        :param pulumi.Input[str] password: User Password
        :param pulumi.Input['UserPasswordHashArgs'] password_hash: Specifies a hashed password to import into Okta.
        :param pulumi.Input[str] password_inline_hook: When specified, the Password Inline Hook is triggered to handle verification of the end user's password the first time the user tries to sign in
        :param pulumi.Input[str] postal_address: User mailing address
        :param pulumi.Input[str] preferred_language: User preferred language
        :param pulumi.Input[str] primary_phone: User primary phone number
        :param pulumi.Input[str] profile_url: User online profile (web page)
        :param pulumi.Input[str] raw_status: The raw status of the User in Okta - (status is mapped)
        :param pulumi.Input[str] recovery_answer: User Password Recovery Answer
        :param pulumi.Input[str] recovery_question: User Password Recovery Question
        :param pulumi.Input[str] second_email: User secondary email address, used for account recovery
        :param pulumi.Input[bool] skip_roles: Do not populate user roles information (prevents additional API call)
        :param pulumi.Input[str] state: User state or region
        :param pulumi.Input[str] status: The status of the User in Okta - remove to set user back to active/provisioned
        :param pulumi.Input[str] street_address: User street address
        :param pulumi.Input[str] timezone: User default timezone
        :param pulumi.Input[str] title: User title
        :param pulumi.Input[str] user_type: User employee type
        :param pulumi.Input[str] zip_code: User zipcode or postal code
        """
        _UserState._configure(
            lambda key, value: pulumi.set(__self__, key, value),
            city=city,
            cost_center=cost_center,
            country_code=country_code,
            custom_profile_attributes=custom_profile_attributes,
            custom_profile_attributes_to_ignores=custom_profile_attributes_to_ignores,
            department=department,
            display_name=display_name,
            division=division,
            email=email,
            employee_number=employee_number,
            expire_password_on_create=expire_password_on_create,
            first_name=first_name,
            honorific_prefix=honorific_prefix,
            honorific_suffix=honorific_suffix,
            last_name=last_name,
            locale=locale,
            login=login,
            manager=manager,
            manager_id=manager_id,
            middle_name=middle_name,
            mobile_phone=mobile_phone,
            nick_name=nick_name,
            old_password=old_password,
            organization=organization,
            password=password,
            password_hash=password_hash,
            password_inline_hook=password_inline_hook,
            postal_address=postal_address,
            preferred_language=preferred_language,
            primary_phone=primary_phone,
            profile_url=profile_url,
            raw_status=raw_status,
            recovery_answer=recovery_answer,
            recovery_question=recovery_question,
            second_email=second_email,
            skip_roles=skip_roles,
            state=state,
            status=status,
            street_address=street_address,
            timezone=timezone,
            title=title,
            user_type=user_type,
            zip_code=zip_code,
        )
    @staticmethod
    def _configure(
             _setter: Callable[[Any, Any], None],
             city: Optional[pulumi.Input[str]] = None,
             cost_center: Optional[pulumi.Input[str]] = None,
             country_code: Optional[pulumi.Input[str]] = None,
             custom_profile_attributes: Optional[pulumi.Input[str]] = None,
             custom_profile_attributes_to_ignores: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None,
             department: Optional[pulumi.Input[str]] = None,
             display_name: Optional[pulumi.Input[str]] = None,
             division: Optional[pulumi.Input[str]] = None,
             email: Optional[pulumi.Input[str]] = None,
             employee_number: Optional[pulumi.Input[str]] = None,
             expire_password_on_create: Optional[pulumi.Input[bool]] = None,
             first_name: Optional[pulumi.Input[str]] = None,
             honorific_prefix: Optional[pulumi.Input[str]] = None,
             honorific_suffix: Optional[pulumi.Input[str]] = None,
             last_name: Optional[pulumi.Input[str]] = None,
             locale: Optional[pulumi.Input[str]] = None,
             login: Optional[pulumi.Input[str]] = None,
             manager: Optional[pulumi.Input[str]] = None,
             manager_id: Optional[pulumi.Input[str]] = None,
             middle_name: Optional[pulumi.Input[str]] = None,
             mobile_phone: Optional[pulumi.Input[str]] = None,
             nick_name: Optional[pulumi.Input[str]] = None,
             old_password: Optional[pulumi.Input[str]] = None,
             organization: Optional[pulumi.Input[str]] = None,
             password: Optional[pulumi.Input[str]] = None,
             password_hash: Optional[pulumi.Input['UserPasswordHashArgs']] = None,
             password_inline_hook: Optional[pulumi.Input[str]] = None,
             postal_address: Optional[pulumi.Input[str]] = None,
             preferred_language: Optional[pulumi.Input[str]] = None,
             primary_phone: Optional[pulumi.Input[str]] = None,
             profile_url: Optional[pulumi.Input[str]] = None,
             raw_status: Optional[pulumi.Input[str]] = None,
             recovery_answer: Optional[pulumi.Input[str]] = None,
             recovery_question: Optional[pulumi.Input[str]] = None,
             second_email: Optional[pulumi.Input[str]] = None,
             skip_roles: Optional[pulumi.Input[bool]] = None,
             state: Optional[pulumi.Input[str]] = None,
             status: Optional[pulumi.Input[str]] = None,
             street_address: Optional[pulumi.Input[str]] = None,
             timezone: Optional[pulumi.Input[str]] = None,
             title: Optional[pulumi.Input[str]] = None,
             user_type: Optional[pulumi.Input[str]] = None,
             zip_code: Optional[pulumi.Input[str]] = None,
             opts: Optional[pulumi.ResourceOptions]=None,
             **kwargs):
        if 'costCenter' in kwargs:
            cost_center = kwargs['costCenter']
        if 'countryCode' in kwargs:
            country_code = kwargs['countryCode']
        if 'customProfileAttributes' in kwargs:
            custom_profile_attributes = kwargs['customProfileAttributes']
        if 'customProfileAttributesToIgnores' in kwargs:
            custom_profile_attributes_to_ignores = kwargs['customProfileAttributesToIgnores']
        if 'displayName' in kwargs:
            display_name = kwargs['displayName']
        if 'employeeNumber' in kwargs:
            employee_number = kwargs['employeeNumber']
        if 'expirePasswordOnCreate' in kwargs:
            expire_password_on_create = kwargs['expirePasswordOnCreate']
        if 'firstName' in kwargs:
            first_name = kwargs['firstName']
        if 'honorificPrefix' in kwargs:
            honorific_prefix = kwargs['honorificPrefix']
        if 'honorificSuffix' in kwargs:
            honorific_suffix = kwargs['honorificSuffix']
        if 'lastName' in kwargs:
            last_name = kwargs['lastName']
        if 'managerId' in kwargs:
            manager_id = kwargs['managerId']
        if 'middleName' in kwargs:
            middle_name = kwargs['middleName']
        if 'mobilePhone' in kwargs:
            mobile_phone = kwargs['mobilePhone']
        if 'nickName' in kwargs:
            nick_name = kwargs['nickName']
        if 'oldPassword' in kwargs:
            old_password = kwargs['oldPassword']
        if 'passwordHash' in kwargs:
            password_hash = kwargs['passwordHash']
        if 'passwordInlineHook' in kwargs:
            password_inline_hook = kwargs['passwordInlineHook']
        if 'postalAddress' in kwargs:
            postal_address = kwargs['postalAddress']
        if 'preferredLanguage' in kwargs:
            preferred_language = kwargs['preferredLanguage']
        if 'primaryPhone' in kwargs:
            primary_phone = kwargs['primaryPhone']
        if 'profileUrl' in kwargs:
            profile_url = kwargs['profileUrl']
        if 'rawStatus' in kwargs:
            raw_status = kwargs['rawStatus']
        if 'recoveryAnswer' in kwargs:
            recovery_answer = kwargs['recoveryAnswer']
        if 'recoveryQuestion' in kwargs:
            recovery_question = kwargs['recoveryQuestion']
        if 'secondEmail' in kwargs:
            second_email = kwargs['secondEmail']
        if 'skipRoles' in kwargs:
            skip_roles = kwargs['skipRoles']
        if 'streetAddress' in kwargs:
            street_address = kwargs['streetAddress']
        if 'userType' in kwargs:
            user_type = kwargs['userType']
        if 'zipCode' in kwargs:
            zip_code = kwargs['zipCode']

        if city is not None:
            _setter("city", city)
        if cost_center is not None:
            _setter("cost_center", cost_center)
        if country_code is not None:
            _setter("country_code", country_code)
        if custom_profile_attributes is not None:
            _setter("custom_profile_attributes", custom_profile_attributes)
        if custom_profile_attributes_to_ignores is not None:
            _setter("custom_profile_attributes_to_ignores", custom_profile_attributes_to_ignores)
        if department is not None:
            _setter("department", department)
        if display_name is not None:
            _setter("display_name", display_name)
        if division is not None:
            _setter("division", division)
        if email is not None:
            _setter("email", email)
        if employee_number is not None:
            _setter("employee_number", employee_number)
        if expire_password_on_create is not None:
            _setter("expire_password_on_create", expire_password_on_create)
        if first_name is not None:
            _setter("first_name", first_name)
        if honorific_prefix is not None:
            _setter("honorific_prefix", honorific_prefix)
        if honorific_suffix is not None:
            _setter("honorific_suffix", honorific_suffix)
        if last_name is not None:
            _setter("last_name", last_name)
        if locale is not None:
            _setter("locale", locale)
        if login is not None:
            _setter("login", login)
        if manager is not None:
            _setter("manager", manager)
        if manager_id is not None:
            _setter("manager_id", manager_id)
        if middle_name is not None:
            _setter("middle_name", middle_name)
        if mobile_phone is not None:
            _setter("mobile_phone", mobile_phone)
        if nick_name is not None:
            _setter("nick_name", nick_name)
        if old_password is not None:
            _setter("old_password", old_password)
        if organization is not None:
            _setter("organization", organization)
        if password is not None:
            _setter("password", password)
        if password_hash is not None:
            _setter("password_hash", password_hash)
        if password_inline_hook is not None:
            _setter("password_inline_hook", password_inline_hook)
        if postal_address is not None:
            _setter("postal_address", postal_address)
        if preferred_language is not None:
            _setter("preferred_language", preferred_language)
        if primary_phone is not None:
            _setter("primary_phone", primary_phone)
        if profile_url is not None:
            _setter("profile_url", profile_url)
        if raw_status is not None:
            _setter("raw_status", raw_status)
        if recovery_answer is not None:
            _setter("recovery_answer", recovery_answer)
        if recovery_question is not None:
            _setter("recovery_question", recovery_question)
        if second_email is not None:
            _setter("second_email", second_email)
        if skip_roles is not None:
            warnings.warn("""Because admin_roles has been removed, this attribute is a no op and will be removed""", DeprecationWarning)
            pulumi.log.warn("""skip_roles is deprecated: Because admin_roles has been removed, this attribute is a no op and will be removed""")
        if skip_roles is not None:
            _setter("skip_roles", skip_roles)
        if state is not None:
            _setter("state", state)
        if status is not None:
            _setter("status", status)
        if street_address is not None:
            _setter("street_address", street_address)
        if timezone is not None:
            _setter("timezone", timezone)
        if title is not None:
            _setter("title", title)
        if user_type is not None:
            _setter("user_type", user_type)
        if zip_code is not None:
            _setter("zip_code", zip_code)

    @property
    @pulumi.getter
    def city(self) -> Optional[pulumi.Input[str]]:
        """
        User city
        """
        return pulumi.get(self, "city")

    @city.setter
    def city(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "city", value)

    @property
    @pulumi.getter(name="costCenter")
    def cost_center(self) -> Optional[pulumi.Input[str]]:
        """
        User cost center
        """
        return pulumi.get(self, "cost_center")

    @cost_center.setter
    def cost_center(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "cost_center", value)

    @property
    @pulumi.getter(name="countryCode")
    def country_code(self) -> Optional[pulumi.Input[str]]:
        """
        User country code
        """
        return pulumi.get(self, "country_code")

    @country_code.setter
    def country_code(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "country_code", value)

    @property
    @pulumi.getter(name="customProfileAttributes")
    def custom_profile_attributes(self) -> Optional[pulumi.Input[str]]:
        """
        JSON formatted custom attributes for a user. It must be JSON due to various types Okta allows.
        """
        return pulumi.get(self, "custom_profile_attributes")

    @custom_profile_attributes.setter
    def custom_profile_attributes(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "custom_profile_attributes", value)

    @property
    @pulumi.getter(name="customProfileAttributesToIgnores")
    def custom_profile_attributes_to_ignores(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]:
        """
        List of custom_profile_attribute keys that should be excluded from being managed by Terraform.
        """
        return pulumi.get(self, "custom_profile_attributes_to_ignores")

    @custom_profile_attributes_to_ignores.setter
    def custom_profile_attributes_to_ignores(self, value: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]):
        pulumi.set(self, "custom_profile_attributes_to_ignores", value)

    @property
    @pulumi.getter
    def department(self) -> Optional[pulumi.Input[str]]:
        """
        User department
        """
        return pulumi.get(self, "department")

    @department.setter
    def department(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "department", value)

    @property
    @pulumi.getter(name="displayName")
    def display_name(self) -> Optional[pulumi.Input[str]]:
        """
        User display name, suitable to show end users
        """
        return pulumi.get(self, "display_name")

    @display_name.setter
    def display_name(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "display_name", value)

    @property
    @pulumi.getter
    def division(self) -> Optional[pulumi.Input[str]]:
        """
        User division
        """
        return pulumi.get(self, "division")

    @division.setter
    def division(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "division", value)

    @property
    @pulumi.getter
    def email(self) -> Optional[pulumi.Input[str]]:
        """
        User primary email address
        """
        return pulumi.get(self, "email")

    @email.setter
    def email(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "email", value)

    @property
    @pulumi.getter(name="employeeNumber")
    def employee_number(self) -> Optional[pulumi.Input[str]]:
        """
        User employee number
        """
        return pulumi.get(self, "employee_number")

    @employee_number.setter
    def employee_number(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "employee_number", value)

    @property
    @pulumi.getter(name="expirePasswordOnCreate")
    def expire_password_on_create(self) -> Optional[pulumi.Input[bool]]:
        """
        If set to `true`, the user will have to change the password at the next login. This property will be used when user is being created and works only when `password` field is set
        """
        return pulumi.get(self, "expire_password_on_create")

    @expire_password_on_create.setter
    def expire_password_on_create(self, value: Optional[pulumi.Input[bool]]):
        pulumi.set(self, "expire_password_on_create", value)

    @property
    @pulumi.getter(name="firstName")
    def first_name(self) -> Optional[pulumi.Input[str]]:
        """
        User first name
        """
        return pulumi.get(self, "first_name")

    @first_name.setter
    def first_name(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "first_name", value)

    @property
    @pulumi.getter(name="honorificPrefix")
    def honorific_prefix(self) -> Optional[pulumi.Input[str]]:
        """
        User honorific prefix
        """
        return pulumi.get(self, "honorific_prefix")

    @honorific_prefix.setter
    def honorific_prefix(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "honorific_prefix", value)

    @property
    @pulumi.getter(name="honorificSuffix")
    def honorific_suffix(self) -> Optional[pulumi.Input[str]]:
        """
        User honorific suffix
        """
        return pulumi.get(self, "honorific_suffix")

    @honorific_suffix.setter
    def honorific_suffix(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "honorific_suffix", value)

    @property
    @pulumi.getter(name="lastName")
    def last_name(self) -> Optional[pulumi.Input[str]]:
        """
        User last name
        """
        return pulumi.get(self, "last_name")

    @last_name.setter
    def last_name(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "last_name", value)

    @property
    @pulumi.getter
    def locale(self) -> Optional[pulumi.Input[str]]:
        """
        User default location
        """
        return pulumi.get(self, "locale")

    @locale.setter
    def locale(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "locale", value)

    @property
    @pulumi.getter
    def login(self) -> Optional[pulumi.Input[str]]:
        """
        User Okta login
        """
        return pulumi.get(self, "login")

    @login.setter
    def login(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "login", value)

    @property
    @pulumi.getter
    def manager(self) -> Optional[pulumi.Input[str]]:
        """
        Manager of User
        """
        return pulumi.get(self, "manager")

    @manager.setter
    def manager(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "manager", value)

    @property
    @pulumi.getter(name="managerId")
    def manager_id(self) -> Optional[pulumi.Input[str]]:
        """
        Manager ID of User
        """
        return pulumi.get(self, "manager_id")

    @manager_id.setter
    def manager_id(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "manager_id", value)

    @property
    @pulumi.getter(name="middleName")
    def middle_name(self) -> Optional[pulumi.Input[str]]:
        """
        User middle name
        """
        return pulumi.get(self, "middle_name")

    @middle_name.setter
    def middle_name(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "middle_name", value)

    @property
    @pulumi.getter(name="mobilePhone")
    def mobile_phone(self) -> Optional[pulumi.Input[str]]:
        """
        User mobile phone number
        """
        return pulumi.get(self, "mobile_phone")

    @mobile_phone.setter
    def mobile_phone(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "mobile_phone", value)

    @property
    @pulumi.getter(name="nickName")
    def nick_name(self) -> Optional[pulumi.Input[str]]:
        """
        User nickname
        """
        return pulumi.get(self, "nick_name")

    @nick_name.setter
    def nick_name(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "nick_name", value)

    @property
    @pulumi.getter(name="oldPassword")
    def old_password(self) -> Optional[pulumi.Input[str]]:
        """
        Old User Password. Should be only set in case the password was not changed using the provider
        """
        return pulumi.get(self, "old_password")

    @old_password.setter
    def old_password(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "old_password", value)

    @property
    @pulumi.getter
    def organization(self) -> Optional[pulumi.Input[str]]:
        """
        User organization
        """
        return pulumi.get(self, "organization")

    @organization.setter
    def organization(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "organization", value)

    @property
    @pulumi.getter
    def password(self) -> Optional[pulumi.Input[str]]:
        """
        User Password
        """
        return pulumi.get(self, "password")

    @password.setter
    def password(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "password", value)

    @property
    @pulumi.getter(name="passwordHash")
    def password_hash(self) -> Optional[pulumi.Input['UserPasswordHashArgs']]:
        """
        Specifies a hashed password to import into Okta.
        """
        return pulumi.get(self, "password_hash")

    @password_hash.setter
    def password_hash(self, value: Optional[pulumi.Input['UserPasswordHashArgs']]):
        pulumi.set(self, "password_hash", value)

    @property
    @pulumi.getter(name="passwordInlineHook")
    def password_inline_hook(self) -> Optional[pulumi.Input[str]]:
        """
        When specified, the Password Inline Hook is triggered to handle verification of the end user's password the first time the user tries to sign in
        """
        return pulumi.get(self, "password_inline_hook")

    @password_inline_hook.setter
    def password_inline_hook(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "password_inline_hook", value)

    @property
    @pulumi.getter(name="postalAddress")
    def postal_address(self) -> Optional[pulumi.Input[str]]:
        """
        User mailing address
        """
        return pulumi.get(self, "postal_address")

    @postal_address.setter
    def postal_address(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "postal_address", value)

    @property
    @pulumi.getter(name="preferredLanguage")
    def preferred_language(self) -> Optional[pulumi.Input[str]]:
        """
        User preferred language
        """
        return pulumi.get(self, "preferred_language")

    @preferred_language.setter
    def preferred_language(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "preferred_language", value)

    @property
    @pulumi.getter(name="primaryPhone")
    def primary_phone(self) -> Optional[pulumi.Input[str]]:
        """
        User primary phone number
        """
        return pulumi.get(self, "primary_phone")

    @primary_phone.setter
    def primary_phone(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "primary_phone", value)

    @property
    @pulumi.getter(name="profileUrl")
    def profile_url(self) -> Optional[pulumi.Input[str]]:
        """
        User online profile (web page)
        """
        return pulumi.get(self, "profile_url")

    @profile_url.setter
    def profile_url(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "profile_url", value)

    @property
    @pulumi.getter(name="rawStatus")
    def raw_status(self) -> Optional[pulumi.Input[str]]:
        """
        The raw status of the User in Okta - (status is mapped)
        """
        return pulumi.get(self, "raw_status")

    @raw_status.setter
    def raw_status(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "raw_status", value)

    @property
    @pulumi.getter(name="recoveryAnswer")
    def recovery_answer(self) -> Optional[pulumi.Input[str]]:
        """
        User Password Recovery Answer
        """
        return pulumi.get(self, "recovery_answer")

    @recovery_answer.setter
    def recovery_answer(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "recovery_answer", value)

    @property
    @pulumi.getter(name="recoveryQuestion")
    def recovery_question(self) -> Optional[pulumi.Input[str]]:
        """
        User Password Recovery Question
        """
        return pulumi.get(self, "recovery_question")

    @recovery_question.setter
    def recovery_question(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "recovery_question", value)

    @property
    @pulumi.getter(name="secondEmail")
    def second_email(self) -> Optional[pulumi.Input[str]]:
        """
        User secondary email address, used for account recovery
        """
        return pulumi.get(self, "second_email")

    @second_email.setter
    def second_email(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "second_email", value)

    @property
    @pulumi.getter(name="skipRoles")
    def skip_roles(self) -> Optional[pulumi.Input[bool]]:
        """
        Do not populate user roles information (prevents additional API call)
        """
        warnings.warn("""Because admin_roles has been removed, this attribute is a no op and will be removed""", DeprecationWarning)
        pulumi.log.warn("""skip_roles is deprecated: Because admin_roles has been removed, this attribute is a no op and will be removed""")

        return pulumi.get(self, "skip_roles")

    @skip_roles.setter
    def skip_roles(self, value: Optional[pulumi.Input[bool]]):
        pulumi.set(self, "skip_roles", value)

    @property
    @pulumi.getter
    def state(self) -> Optional[pulumi.Input[str]]:
        """
        User state or region
        """
        return pulumi.get(self, "state")

    @state.setter
    def state(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "state", value)

    @property
    @pulumi.getter
    def status(self) -> Optional[pulumi.Input[str]]:
        """
        The status of the User in Okta - remove to set user back to active/provisioned
        """
        return pulumi.get(self, "status")

    @status.setter
    def status(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "status", value)

    @property
    @pulumi.getter(name="streetAddress")
    def street_address(self) -> Optional[pulumi.Input[str]]:
        """
        User street address
        """
        return pulumi.get(self, "street_address")

    @street_address.setter
    def street_address(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "street_address", value)

    @property
    @pulumi.getter
    def timezone(self) -> Optional[pulumi.Input[str]]:
        """
        User default timezone
        """
        return pulumi.get(self, "timezone")

    @timezone.setter
    def timezone(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "timezone", value)

    @property
    @pulumi.getter
    def title(self) -> Optional[pulumi.Input[str]]:
        """
        User title
        """
        return pulumi.get(self, "title")

    @title.setter
    def title(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "title", value)

    @property
    @pulumi.getter(name="userType")
    def user_type(self) -> Optional[pulumi.Input[str]]:
        """
        User employee type
        """
        return pulumi.get(self, "user_type")

    @user_type.setter
    def user_type(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "user_type", value)

    @property
    @pulumi.getter(name="zipCode")
    def zip_code(self) -> Optional[pulumi.Input[str]]:
        """
        User zipcode or postal code
        """
        return pulumi.get(self, "zip_code")

    @zip_code.setter
    def zip_code(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "zip_code", value)


class User(pulumi.CustomResource):
    @overload
    def __init__(__self__,
                 resource_name: str,
                 opts: Optional[pulumi.ResourceOptions] = None,
                 city: Optional[pulumi.Input[str]] = None,
                 cost_center: Optional[pulumi.Input[str]] = None,
                 country_code: Optional[pulumi.Input[str]] = None,
                 custom_profile_attributes: Optional[pulumi.Input[str]] = None,
                 custom_profile_attributes_to_ignores: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None,
                 department: Optional[pulumi.Input[str]] = None,
                 display_name: Optional[pulumi.Input[str]] = None,
                 division: Optional[pulumi.Input[str]] = None,
                 email: Optional[pulumi.Input[str]] = None,
                 employee_number: Optional[pulumi.Input[str]] = None,
                 expire_password_on_create: Optional[pulumi.Input[bool]] = None,
                 first_name: Optional[pulumi.Input[str]] = None,
                 honorific_prefix: Optional[pulumi.Input[str]] = None,
                 honorific_suffix: Optional[pulumi.Input[str]] = None,
                 last_name: Optional[pulumi.Input[str]] = None,
                 locale: Optional[pulumi.Input[str]] = None,
                 login: Optional[pulumi.Input[str]] = None,
                 manager: Optional[pulumi.Input[str]] = None,
                 manager_id: Optional[pulumi.Input[str]] = None,
                 middle_name: Optional[pulumi.Input[str]] = None,
                 mobile_phone: Optional[pulumi.Input[str]] = None,
                 nick_name: Optional[pulumi.Input[str]] = None,
                 old_password: Optional[pulumi.Input[str]] = None,
                 organization: Optional[pulumi.Input[str]] = None,
                 password: Optional[pulumi.Input[str]] = None,
                 password_hash: Optional[pulumi.Input[pulumi.InputType['UserPasswordHashArgs']]] = None,
                 password_inline_hook: Optional[pulumi.Input[str]] = None,
                 postal_address: Optional[pulumi.Input[str]] = None,
                 preferred_language: Optional[pulumi.Input[str]] = None,
                 primary_phone: Optional[pulumi.Input[str]] = None,
                 profile_url: Optional[pulumi.Input[str]] = None,
                 recovery_answer: Optional[pulumi.Input[str]] = None,
                 recovery_question: Optional[pulumi.Input[str]] = None,
                 second_email: Optional[pulumi.Input[str]] = None,
                 skip_roles: Optional[pulumi.Input[bool]] = None,
                 state: Optional[pulumi.Input[str]] = None,
                 status: Optional[pulumi.Input[str]] = None,
                 street_address: Optional[pulumi.Input[str]] = None,
                 timezone: Optional[pulumi.Input[str]] = None,
                 title: Optional[pulumi.Input[str]] = None,
                 user_type: Optional[pulumi.Input[str]] = None,
                 zip_code: Optional[pulumi.Input[str]] = None,
                 __props__=None):
        """
        Create a User resource with the given unique name, props, and options.
        :param str resource_name: The name of the resource.
        :param pulumi.ResourceOptions opts: Options for the resource.
        :param pulumi.Input[str] city: User city
        :param pulumi.Input[str] cost_center: User cost center
        :param pulumi.Input[str] country_code: User country code
        :param pulumi.Input[str] custom_profile_attributes: JSON formatted custom attributes for a user. It must be JSON due to various types Okta allows.
        :param pulumi.Input[Sequence[pulumi.Input[str]]] custom_profile_attributes_to_ignores: List of custom_profile_attribute keys that should be excluded from being managed by Terraform.
        :param pulumi.Input[str] department: User department
        :param pulumi.Input[str] display_name: User display name, suitable to show end users
        :param pulumi.Input[str] division: User division
        :param pulumi.Input[str] email: User primary email address
        :param pulumi.Input[str] employee_number: User employee number
        :param pulumi.Input[bool] expire_password_on_create: If set to `true`, the user will have to change the password at the next login. This property will be used when user is being created and works only when `password` field is set
        :param pulumi.Input[str] first_name: User first name
        :param pulumi.Input[str] honorific_prefix: User honorific prefix
        :param pulumi.Input[str] honorific_suffix: User honorific suffix
        :param pulumi.Input[str] last_name: User last name
        :param pulumi.Input[str] locale: User default location
        :param pulumi.Input[str] login: User Okta login
        :param pulumi.Input[str] manager: Manager of User
        :param pulumi.Input[str] manager_id: Manager ID of User
        :param pulumi.Input[str] middle_name: User middle name
        :param pulumi.Input[str] mobile_phone: User mobile phone number
        :param pulumi.Input[str] nick_name: User nickname
        :param pulumi.Input[str] old_password: Old User Password. Should be only set in case the password was not changed using the provider
        :param pulumi.Input[str] organization: User organization
        :param pulumi.Input[str] password: User Password
        :param pulumi.Input[pulumi.InputType['UserPasswordHashArgs']] password_hash: Specifies a hashed password to import into Okta.
        :param pulumi.Input[str] password_inline_hook: When specified, the Password Inline Hook is triggered to handle verification of the end user's password the first time the user tries to sign in
        :param pulumi.Input[str] postal_address: User mailing address
        :param pulumi.Input[str] preferred_language: User preferred language
        :param pulumi.Input[str] primary_phone: User primary phone number
        :param pulumi.Input[str] profile_url: User online profile (web page)
        :param pulumi.Input[str] recovery_answer: User Password Recovery Answer
        :param pulumi.Input[str] recovery_question: User Password Recovery Question
        :param pulumi.Input[str] second_email: User secondary email address, used for account recovery
        :param pulumi.Input[bool] skip_roles: Do not populate user roles information (prevents additional API call)
        :param pulumi.Input[str] state: User state or region
        :param pulumi.Input[str] status: The status of the User in Okta - remove to set user back to active/provisioned
        :param pulumi.Input[str] street_address: User street address
        :param pulumi.Input[str] timezone: User default timezone
        :param pulumi.Input[str] title: User title
        :param pulumi.Input[str] user_type: User employee type
        :param pulumi.Input[str] zip_code: User zipcode or postal code
        """
        ...
    @overload
    def __init__(__self__,
                 resource_name: str,
                 args: UserArgs,
                 opts: Optional[pulumi.ResourceOptions] = None):
        """
        Create a User resource with the given unique name, props, and options.
        :param str resource_name: The name of the resource.
        :param UserArgs args: The arguments to use to populate this resource's properties.
        :param pulumi.ResourceOptions opts: Options for the resource.
        """
        ...
    def __init__(__self__, resource_name: str, *args, **kwargs):
        resource_args, opts = _utilities.get_resource_args_opts(UserArgs, pulumi.ResourceOptions, *args, **kwargs)
        if resource_args is not None:
            __self__._internal_init(resource_name, opts, **resource_args.__dict__)
        else:
            kwargs = kwargs or {}
            def _setter(key, value):
                kwargs[key] = value
            UserArgs._configure(_setter, **kwargs)
            __self__._internal_init(resource_name, *args, **kwargs)

    def _internal_init(__self__,
                 resource_name: str,
                 opts: Optional[pulumi.ResourceOptions] = None,
                 city: Optional[pulumi.Input[str]] = None,
                 cost_center: Optional[pulumi.Input[str]] = None,
                 country_code: Optional[pulumi.Input[str]] = None,
                 custom_profile_attributes: Optional[pulumi.Input[str]] = None,
                 custom_profile_attributes_to_ignores: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None,
                 department: Optional[pulumi.Input[str]] = None,
                 display_name: Optional[pulumi.Input[str]] = None,
                 division: Optional[pulumi.Input[str]] = None,
                 email: Optional[pulumi.Input[str]] = None,
                 employee_number: Optional[pulumi.Input[str]] = None,
                 expire_password_on_create: Optional[pulumi.Input[bool]] = None,
                 first_name: Optional[pulumi.Input[str]] = None,
                 honorific_prefix: Optional[pulumi.Input[str]] = None,
                 honorific_suffix: Optional[pulumi.Input[str]] = None,
                 last_name: Optional[pulumi.Input[str]] = None,
                 locale: Optional[pulumi.Input[str]] = None,
                 login: Optional[pulumi.Input[str]] = None,
                 manager: Optional[pulumi.Input[str]] = None,
                 manager_id: Optional[pulumi.Input[str]] = None,
                 middle_name: Optional[pulumi.Input[str]] = None,
                 mobile_phone: Optional[pulumi.Input[str]] = None,
                 nick_name: Optional[pulumi.Input[str]] = None,
                 old_password: Optional[pulumi.Input[str]] = None,
                 organization: Optional[pulumi.Input[str]] = None,
                 password: Optional[pulumi.Input[str]] = None,
                 password_hash: Optional[pulumi.Input[pulumi.InputType['UserPasswordHashArgs']]] = None,
                 password_inline_hook: Optional[pulumi.Input[str]] = None,
                 postal_address: Optional[pulumi.Input[str]] = None,
                 preferred_language: Optional[pulumi.Input[str]] = None,
                 primary_phone: Optional[pulumi.Input[str]] = None,
                 profile_url: Optional[pulumi.Input[str]] = None,
                 recovery_answer: Optional[pulumi.Input[str]] = None,
                 recovery_question: Optional[pulumi.Input[str]] = None,
                 second_email: Optional[pulumi.Input[str]] = None,
                 skip_roles: Optional[pulumi.Input[bool]] = None,
                 state: Optional[pulumi.Input[str]] = None,
                 status: Optional[pulumi.Input[str]] = None,
                 street_address: Optional[pulumi.Input[str]] = None,
                 timezone: Optional[pulumi.Input[str]] = None,
                 title: Optional[pulumi.Input[str]] = None,
                 user_type: Optional[pulumi.Input[str]] = None,
                 zip_code: Optional[pulumi.Input[str]] = None,
                 __props__=None):
        opts = pulumi.ResourceOptions.merge(_utilities.get_resource_opts_defaults(), opts)
        if not isinstance(opts, pulumi.ResourceOptions):
            raise TypeError('Expected resource options to be a ResourceOptions instance')
        if opts.id is None:
            if __props__ is not None:
                raise TypeError('__props__ is only valid when passed in combination with a valid opts.id to get an existing resource')
            __props__ = UserArgs.__new__(UserArgs)

            __props__.__dict__["city"] = city
            __props__.__dict__["cost_center"] = cost_center
            __props__.__dict__["country_code"] = country_code
            __props__.__dict__["custom_profile_attributes"] = custom_profile_attributes
            __props__.__dict__["custom_profile_attributes_to_ignores"] = custom_profile_attributes_to_ignores
            __props__.__dict__["department"] = department
            __props__.__dict__["display_name"] = display_name
            __props__.__dict__["division"] = division
            if email is None and not opts.urn:
                raise TypeError("Missing required property 'email'")
            __props__.__dict__["email"] = email
            __props__.__dict__["employee_number"] = employee_number
            __props__.__dict__["expire_password_on_create"] = expire_password_on_create
            if first_name is None and not opts.urn:
                raise TypeError("Missing required property 'first_name'")
            __props__.__dict__["first_name"] = first_name
            __props__.__dict__["honorific_prefix"] = honorific_prefix
            __props__.__dict__["honorific_suffix"] = honorific_suffix
            if last_name is None and not opts.urn:
                raise TypeError("Missing required property 'last_name'")
            __props__.__dict__["last_name"] = last_name
            __props__.__dict__["locale"] = locale
            if login is None and not opts.urn:
                raise TypeError("Missing required property 'login'")
            __props__.__dict__["login"] = login
            __props__.__dict__["manager"] = manager
            __props__.__dict__["manager_id"] = manager_id
            __props__.__dict__["middle_name"] = middle_name
            __props__.__dict__["mobile_phone"] = mobile_phone
            __props__.__dict__["nick_name"] = nick_name
            __props__.__dict__["old_password"] = None if old_password is None else pulumi.Output.secret(old_password)
            __props__.__dict__["organization"] = organization
            __props__.__dict__["password"] = None if password is None else pulumi.Output.secret(password)
            if password_hash is not None and not isinstance(password_hash, UserPasswordHashArgs):
                password_hash = password_hash or {}
                def _setter(key, value):
                    password_hash[key] = value
                UserPasswordHashArgs._configure(_setter, **password_hash)
            __props__.__dict__["password_hash"] = password_hash
            __props__.__dict__["password_inline_hook"] = password_inline_hook
            __props__.__dict__["postal_address"] = postal_address
            __props__.__dict__["preferred_language"] = preferred_language
            __props__.__dict__["primary_phone"] = primary_phone
            __props__.__dict__["profile_url"] = profile_url
            __props__.__dict__["recovery_answer"] = None if recovery_answer is None else pulumi.Output.secret(recovery_answer)
            __props__.__dict__["recovery_question"] = recovery_question
            __props__.__dict__["second_email"] = second_email
            __props__.__dict__["skip_roles"] = skip_roles
            __props__.__dict__["state"] = state
            __props__.__dict__["status"] = status
            __props__.__dict__["street_address"] = street_address
            __props__.__dict__["timezone"] = timezone
            __props__.__dict__["title"] = title
            __props__.__dict__["user_type"] = user_type
            __props__.__dict__["zip_code"] = zip_code
            __props__.__dict__["raw_status"] = None
        secret_opts = pulumi.ResourceOptions(additional_secret_outputs=["oldPassword", "password", "recoveryAnswer"])
        opts = pulumi.ResourceOptions.merge(opts, secret_opts)
        super(User, __self__).__init__(
            'okta:user/user:User',
            resource_name,
            __props__,
            opts)

    @staticmethod
    def get(resource_name: str,
            id: pulumi.Input[str],
            opts: Optional[pulumi.ResourceOptions] = None,
            city: Optional[pulumi.Input[str]] = None,
            cost_center: Optional[pulumi.Input[str]] = None,
            country_code: Optional[pulumi.Input[str]] = None,
            custom_profile_attributes: Optional[pulumi.Input[str]] = None,
            custom_profile_attributes_to_ignores: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None,
            department: Optional[pulumi.Input[str]] = None,
            display_name: Optional[pulumi.Input[str]] = None,
            division: Optional[pulumi.Input[str]] = None,
            email: Optional[pulumi.Input[str]] = None,
            employee_number: Optional[pulumi.Input[str]] = None,
            expire_password_on_create: Optional[pulumi.Input[bool]] = None,
            first_name: Optional[pulumi.Input[str]] = None,
            honorific_prefix: Optional[pulumi.Input[str]] = None,
            honorific_suffix: Optional[pulumi.Input[str]] = None,
            last_name: Optional[pulumi.Input[str]] = None,
            locale: Optional[pulumi.Input[str]] = None,
            login: Optional[pulumi.Input[str]] = None,
            manager: Optional[pulumi.Input[str]] = None,
            manager_id: Optional[pulumi.Input[str]] = None,
            middle_name: Optional[pulumi.Input[str]] = None,
            mobile_phone: Optional[pulumi.Input[str]] = None,
            nick_name: Optional[pulumi.Input[str]] = None,
            old_password: Optional[pulumi.Input[str]] = None,
            organization: Optional[pulumi.Input[str]] = None,
            password: Optional[pulumi.Input[str]] = None,
            password_hash: Optional[pulumi.Input[pulumi.InputType['UserPasswordHashArgs']]] = None,
            password_inline_hook: Optional[pulumi.Input[str]] = None,
            postal_address: Optional[pulumi.Input[str]] = None,
            preferred_language: Optional[pulumi.Input[str]] = None,
            primary_phone: Optional[pulumi.Input[str]] = None,
            profile_url: Optional[pulumi.Input[str]] = None,
            raw_status: Optional[pulumi.Input[str]] = None,
            recovery_answer: Optional[pulumi.Input[str]] = None,
            recovery_question: Optional[pulumi.Input[str]] = None,
            second_email: Optional[pulumi.Input[str]] = None,
            skip_roles: Optional[pulumi.Input[bool]] = None,
            state: Optional[pulumi.Input[str]] = None,
            status: Optional[pulumi.Input[str]] = None,
            street_address: Optional[pulumi.Input[str]] = None,
            timezone: Optional[pulumi.Input[str]] = None,
            title: Optional[pulumi.Input[str]] = None,
            user_type: Optional[pulumi.Input[str]] = None,
            zip_code: Optional[pulumi.Input[str]] = None) -> 'User':
        """
        Get an existing User resource's state with the given name, id, and optional extra
        properties used to qualify the lookup.

        :param str resource_name: The unique name of the resulting resource.
        :param pulumi.Input[str] id: The unique provider ID of the resource to lookup.
        :param pulumi.ResourceOptions opts: Options for the resource.
        :param pulumi.Input[str] city: User city
        :param pulumi.Input[str] cost_center: User cost center
        :param pulumi.Input[str] country_code: User country code
        :param pulumi.Input[str] custom_profile_attributes: JSON formatted custom attributes for a user. It must be JSON due to various types Okta allows.
        :param pulumi.Input[Sequence[pulumi.Input[str]]] custom_profile_attributes_to_ignores: List of custom_profile_attribute keys that should be excluded from being managed by Terraform.
        :param pulumi.Input[str] department: User department
        :param pulumi.Input[str] display_name: User display name, suitable to show end users
        :param pulumi.Input[str] division: User division
        :param pulumi.Input[str] email: User primary email address
        :param pulumi.Input[str] employee_number: User employee number
        :param pulumi.Input[bool] expire_password_on_create: If set to `true`, the user will have to change the password at the next login. This property will be used when user is being created and works only when `password` field is set
        :param pulumi.Input[str] first_name: User first name
        :param pulumi.Input[str] honorific_prefix: User honorific prefix
        :param pulumi.Input[str] honorific_suffix: User honorific suffix
        :param pulumi.Input[str] last_name: User last name
        :param pulumi.Input[str] locale: User default location
        :param pulumi.Input[str] login: User Okta login
        :param pulumi.Input[str] manager: Manager of User
        :param pulumi.Input[str] manager_id: Manager ID of User
        :param pulumi.Input[str] middle_name: User middle name
        :param pulumi.Input[str] mobile_phone: User mobile phone number
        :param pulumi.Input[str] nick_name: User nickname
        :param pulumi.Input[str] old_password: Old User Password. Should be only set in case the password was not changed using the provider
        :param pulumi.Input[str] organization: User organization
        :param pulumi.Input[str] password: User Password
        :param pulumi.Input[pulumi.InputType['UserPasswordHashArgs']] password_hash: Specifies a hashed password to import into Okta.
        :param pulumi.Input[str] password_inline_hook: When specified, the Password Inline Hook is triggered to handle verification of the end user's password the first time the user tries to sign in
        :param pulumi.Input[str] postal_address: User mailing address
        :param pulumi.Input[str] preferred_language: User preferred language
        :param pulumi.Input[str] primary_phone: User primary phone number
        :param pulumi.Input[str] profile_url: User online profile (web page)
        :param pulumi.Input[str] raw_status: The raw status of the User in Okta - (status is mapped)
        :param pulumi.Input[str] recovery_answer: User Password Recovery Answer
        :param pulumi.Input[str] recovery_question: User Password Recovery Question
        :param pulumi.Input[str] second_email: User secondary email address, used for account recovery
        :param pulumi.Input[bool] skip_roles: Do not populate user roles information (prevents additional API call)
        :param pulumi.Input[str] state: User state or region
        :param pulumi.Input[str] status: The status of the User in Okta - remove to set user back to active/provisioned
        :param pulumi.Input[str] street_address: User street address
        :param pulumi.Input[str] timezone: User default timezone
        :param pulumi.Input[str] title: User title
        :param pulumi.Input[str] user_type: User employee type
        :param pulumi.Input[str] zip_code: User zipcode or postal code
        """
        opts = pulumi.ResourceOptions.merge(opts, pulumi.ResourceOptions(id=id))

        __props__ = _UserState.__new__(_UserState)

        __props__.__dict__["city"] = city
        __props__.__dict__["cost_center"] = cost_center
        __props__.__dict__["country_code"] = country_code
        __props__.__dict__["custom_profile_attributes"] = custom_profile_attributes
        __props__.__dict__["custom_profile_attributes_to_ignores"] = custom_profile_attributes_to_ignores
        __props__.__dict__["department"] = department
        __props__.__dict__["display_name"] = display_name
        __props__.__dict__["division"] = division
        __props__.__dict__["email"] = email
        __props__.__dict__["employee_number"] = employee_number
        __props__.__dict__["expire_password_on_create"] = expire_password_on_create
        __props__.__dict__["first_name"] = first_name
        __props__.__dict__["honorific_prefix"] = honorific_prefix
        __props__.__dict__["honorific_suffix"] = honorific_suffix
        __props__.__dict__["last_name"] = last_name
        __props__.__dict__["locale"] = locale
        __props__.__dict__["login"] = login
        __props__.__dict__["manager"] = manager
        __props__.__dict__["manager_id"] = manager_id
        __props__.__dict__["middle_name"] = middle_name
        __props__.__dict__["mobile_phone"] = mobile_phone
        __props__.__dict__["nick_name"] = nick_name
        __props__.__dict__["old_password"] = old_password
        __props__.__dict__["organization"] = organization
        __props__.__dict__["password"] = password
        __props__.__dict__["password_hash"] = password_hash
        __props__.__dict__["password_inline_hook"] = password_inline_hook
        __props__.__dict__["postal_address"] = postal_address
        __props__.__dict__["preferred_language"] = preferred_language
        __props__.__dict__["primary_phone"] = primary_phone
        __props__.__dict__["profile_url"] = profile_url
        __props__.__dict__["raw_status"] = raw_status
        __props__.__dict__["recovery_answer"] = recovery_answer
        __props__.__dict__["recovery_question"] = recovery_question
        __props__.__dict__["second_email"] = second_email
        __props__.__dict__["skip_roles"] = skip_roles
        __props__.__dict__["state"] = state
        __props__.__dict__["status"] = status
        __props__.__dict__["street_address"] = street_address
        __props__.__dict__["timezone"] = timezone
        __props__.__dict__["title"] = title
        __props__.__dict__["user_type"] = user_type
        __props__.__dict__["zip_code"] = zip_code
        return User(resource_name, opts=opts, __props__=__props__)

    @property
    @pulumi.getter
    def city(self) -> pulumi.Output[Optional[str]]:
        """
        User city
        """
        return pulumi.get(self, "city")

    @property
    @pulumi.getter(name="costCenter")
    def cost_center(self) -> pulumi.Output[Optional[str]]:
        """
        User cost center
        """
        return pulumi.get(self, "cost_center")

    @property
    @pulumi.getter(name="countryCode")
    def country_code(self) -> pulumi.Output[Optional[str]]:
        """
        User country code
        """
        return pulumi.get(self, "country_code")

    @property
    @pulumi.getter(name="customProfileAttributes")
    def custom_profile_attributes(self) -> pulumi.Output[str]:
        """
        JSON formatted custom attributes for a user. It must be JSON due to various types Okta allows.
        """
        return pulumi.get(self, "custom_profile_attributes")

    @property
    @pulumi.getter(name="customProfileAttributesToIgnores")
    def custom_profile_attributes_to_ignores(self) -> pulumi.Output[Optional[Sequence[str]]]:
        """
        List of custom_profile_attribute keys that should be excluded from being managed by Terraform.
        """
        return pulumi.get(self, "custom_profile_attributes_to_ignores")

    @property
    @pulumi.getter
    def department(self) -> pulumi.Output[Optional[str]]:
        """
        User department
        """
        return pulumi.get(self, "department")

    @property
    @pulumi.getter(name="displayName")
    def display_name(self) -> pulumi.Output[Optional[str]]:
        """
        User display name, suitable to show end users
        """
        return pulumi.get(self, "display_name")

    @property
    @pulumi.getter
    def division(self) -> pulumi.Output[Optional[str]]:
        """
        User division
        """
        return pulumi.get(self, "division")

    @property
    @pulumi.getter
    def email(self) -> pulumi.Output[str]:
        """
        User primary email address
        """
        return pulumi.get(self, "email")

    @property
    @pulumi.getter(name="employeeNumber")
    def employee_number(self) -> pulumi.Output[Optional[str]]:
        """
        User employee number
        """
        return pulumi.get(self, "employee_number")

    @property
    @pulumi.getter(name="expirePasswordOnCreate")
    def expire_password_on_create(self) -> pulumi.Output[Optional[bool]]:
        """
        If set to `true`, the user will have to change the password at the next login. This property will be used when user is being created and works only when `password` field is set
        """
        return pulumi.get(self, "expire_password_on_create")

    @property
    @pulumi.getter(name="firstName")
    def first_name(self) -> pulumi.Output[str]:
        """
        User first name
        """
        return pulumi.get(self, "first_name")

    @property
    @pulumi.getter(name="honorificPrefix")
    def honorific_prefix(self) -> pulumi.Output[Optional[str]]:
        """
        User honorific prefix
        """
        return pulumi.get(self, "honorific_prefix")

    @property
    @pulumi.getter(name="honorificSuffix")
    def honorific_suffix(self) -> pulumi.Output[Optional[str]]:
        """
        User honorific suffix
        """
        return pulumi.get(self, "honorific_suffix")

    @property
    @pulumi.getter(name="lastName")
    def last_name(self) -> pulumi.Output[str]:
        """
        User last name
        """
        return pulumi.get(self, "last_name")

    @property
    @pulumi.getter
    def locale(self) -> pulumi.Output[Optional[str]]:
        """
        User default location
        """
        return pulumi.get(self, "locale")

    @property
    @pulumi.getter
    def login(self) -> pulumi.Output[str]:
        """
        User Okta login
        """
        return pulumi.get(self, "login")

    @property
    @pulumi.getter
    def manager(self) -> pulumi.Output[Optional[str]]:
        """
        Manager of User
        """
        return pulumi.get(self, "manager")

    @property
    @pulumi.getter(name="managerId")
    def manager_id(self) -> pulumi.Output[Optional[str]]:
        """
        Manager ID of User
        """
        return pulumi.get(self, "manager_id")

    @property
    @pulumi.getter(name="middleName")
    def middle_name(self) -> pulumi.Output[Optional[str]]:
        """
        User middle name
        """
        return pulumi.get(self, "middle_name")

    @property
    @pulumi.getter(name="mobilePhone")
    def mobile_phone(self) -> pulumi.Output[Optional[str]]:
        """
        User mobile phone number
        """
        return pulumi.get(self, "mobile_phone")

    @property
    @pulumi.getter(name="nickName")
    def nick_name(self) -> pulumi.Output[Optional[str]]:
        """
        User nickname
        """
        return pulumi.get(self, "nick_name")

    @property
    @pulumi.getter(name="oldPassword")
    def old_password(self) -> pulumi.Output[Optional[str]]:
        """
        Old User Password. Should be only set in case the password was not changed using the provider
        """
        return pulumi.get(self, "old_password")

    @property
    @pulumi.getter
    def organization(self) -> pulumi.Output[Optional[str]]:
        """
        User organization
        """
        return pulumi.get(self, "organization")

    @property
    @pulumi.getter
    def password(self) -> pulumi.Output[Optional[str]]:
        """
        User Password
        """
        return pulumi.get(self, "password")

    @property
    @pulumi.getter(name="passwordHash")
    def password_hash(self) -> pulumi.Output[Optional['outputs.UserPasswordHash']]:
        """
        Specifies a hashed password to import into Okta.
        """
        return pulumi.get(self, "password_hash")

    @property
    @pulumi.getter(name="passwordInlineHook")
    def password_inline_hook(self) -> pulumi.Output[Optional[str]]:
        """
        When specified, the Password Inline Hook is triggered to handle verification of the end user's password the first time the user tries to sign in
        """
        return pulumi.get(self, "password_inline_hook")

    @property
    @pulumi.getter(name="postalAddress")
    def postal_address(self) -> pulumi.Output[Optional[str]]:
        """
        User mailing address
        """
        return pulumi.get(self, "postal_address")

    @property
    @pulumi.getter(name="preferredLanguage")
    def preferred_language(self) -> pulumi.Output[Optional[str]]:
        """
        User preferred language
        """
        return pulumi.get(self, "preferred_language")

    @property
    @pulumi.getter(name="primaryPhone")
    def primary_phone(self) -> pulumi.Output[Optional[str]]:
        """
        User primary phone number
        """
        return pulumi.get(self, "primary_phone")

    @property
    @pulumi.getter(name="profileUrl")
    def profile_url(self) -> pulumi.Output[Optional[str]]:
        """
        User online profile (web page)
        """
        return pulumi.get(self, "profile_url")

    @property
    @pulumi.getter(name="rawStatus")
    def raw_status(self) -> pulumi.Output[str]:
        """
        The raw status of the User in Okta - (status is mapped)
        """
        return pulumi.get(self, "raw_status")

    @property
    @pulumi.getter(name="recoveryAnswer")
    def recovery_answer(self) -> pulumi.Output[Optional[str]]:
        """
        User Password Recovery Answer
        """
        return pulumi.get(self, "recovery_answer")

    @property
    @pulumi.getter(name="recoveryQuestion")
    def recovery_question(self) -> pulumi.Output[Optional[str]]:
        """
        User Password Recovery Question
        """
        return pulumi.get(self, "recovery_question")

    @property
    @pulumi.getter(name="secondEmail")
    def second_email(self) -> pulumi.Output[Optional[str]]:
        """
        User secondary email address, used for account recovery
        """
        return pulumi.get(self, "second_email")

    @property
    @pulumi.getter(name="skipRoles")
    def skip_roles(self) -> pulumi.Output[Optional[bool]]:
        """
        Do not populate user roles information (prevents additional API call)
        """
        warnings.warn("""Because admin_roles has been removed, this attribute is a no op and will be removed""", DeprecationWarning)
        pulumi.log.warn("""skip_roles is deprecated: Because admin_roles has been removed, this attribute is a no op and will be removed""")

        return pulumi.get(self, "skip_roles")

    @property
    @pulumi.getter
    def state(self) -> pulumi.Output[Optional[str]]:
        """
        User state or region
        """
        return pulumi.get(self, "state")

    @property
    @pulumi.getter
    def status(self) -> pulumi.Output[Optional[str]]:
        """
        The status of the User in Okta - remove to set user back to active/provisioned
        """
        return pulumi.get(self, "status")

    @property
    @pulumi.getter(name="streetAddress")
    def street_address(self) -> pulumi.Output[Optional[str]]:
        """
        User street address
        """
        return pulumi.get(self, "street_address")

    @property
    @pulumi.getter
    def timezone(self) -> pulumi.Output[Optional[str]]:
        """
        User default timezone
        """
        return pulumi.get(self, "timezone")

    @property
    @pulumi.getter
    def title(self) -> pulumi.Output[Optional[str]]:
        """
        User title
        """
        return pulumi.get(self, "title")

    @property
    @pulumi.getter(name="userType")
    def user_type(self) -> pulumi.Output[Optional[str]]:
        """
        User employee type
        """
        return pulumi.get(self, "user_type")

    @property
    @pulumi.getter(name="zipCode")
    def zip_code(self) -> pulumi.Output[Optional[str]]:
        """
        User zipcode or postal code
        """
        return pulumi.get(self, "zip_code")

