###############################################################################
#  Copyright 2021 Amazon.com, Inc. or its affiliates. All Rights Reserved.    #
#                                                                             #
#  Licensed under the Apache License, Version 2.0 (the "License").            #
#  You may not use this file except in compliance with the License.
#  A copy of the License is located at                                        #
#                                                                             #
#      http://www.apache.org/licenses/LICENSE-2.0                             #
#                                                                             #
#  or in the "license" file accompanying this file. This file is distributed  #
#  on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, express #
#  or implied. See the License for the specific language governing permissions#
#  and limitations under the License.                                         #
###############################################################################

import random
import string


def random_pwd_generator(length, additional_str=""):
    """Generate random password.

    Args:
        length: length of the password
        additional_str: Optional. Input additonal string that is allowed in
                        the password. Default to '' empty string.
    Returns:
        password
    """
    chars = (
        string.ascii_uppercase + string.ascii_lowercase + string.digits + additional_str
    )
    # Making sure the password has two numbers and symbols at the very least
    password = (
        "".join(random.SystemRandom().choice(chars) for _ in range(length - 4))
        + "".join(random.SystemRandom().choice(string.digits) for _ in range(2))
        + "".join(random.SystemRandom().choice(additional_str) for _ in range(2))
    )
    return password