import json
import boto3
import time

def lambda_handler(event, context):
    print(event)
    msg = json.loads(event['body'])
    secret = msg['secret_code']
    print(secret)
    
    client = boto3.client('dynamodb')
    
    table_name = "xdctb"
    # timedata = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())
    response = client.update_item(
        TableName=table_name,
        # ExpressionAttributeNames={
        #     'skip': secret,
        # },
        ExpressionAttributeValues={
            ':y': {
                'S': secret,
            }
        },
        Key={
        'dtime': {
            'S': '20200605',
        }
        },
        UpdateExpression='SET skip = :y',
        ReturnValues="UPDATED_NEW"
    )
    
    return {
    "statusCode": 200,
    "isBase64Encoded": False,
    "headers": {
        "Content-Type": "application/json; charset=utf-8"
        },
    "body": "OK ! "
    }


#=======================ç¬¬ä¸€ç‰ˆæœ¬=========================#

import json
import boto3
import time

def lambda_handler(event, context):
    print(event)
    msg = json.loads(event['body'])
    secret = msg['secret_code']
    print(secret)
    
    client = boto3.client('dynamodb')
    
    table_name = "xdctb"
    # timedata = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())
    response = client.update_item(
        TableName=table_name,
        Key={
        'dtime': {
            'S': '20200605',
        },
        'skip': {
            'S': secret,
        },
        })
        
    # print(timedata)
    return {
    "statusCode": 200,
    "isBase64Encoded": False,
    "headers": {
        "Content-Type": "application/json; charset=utf-8"
        },
    "body": "OK ! "
    } 


# ========================? v2 ========================

import boto3
import json
import time
import base64
from botocore.exceptions import ClientError

print('Loading function')
dynamodb = boto3.client('dynamodb')


def respond(err, res=None):
    return {
        'statusCode': '400' if err else '200',
        'body': err.message if err else json.dumps(res),
        'headers': {
            'Content-Type': 'application/json',
        },
    }


def lambda_handler(event, context):
    response = {}
    response["headers"] = event["headers"]
    #dynamodb.put_item(TableName='K12D', Item= {'id':{"S": json.loads(event['body'])["secret_code"]},'key':{"S": str(round(time.time()))}})
    #ret_data=dynamodb.scan(TableName='K12D')

    secret_name = "test"
    region_name = "cn-northwest-1"

    # Create a Secrets Manager client
    session = boto3.session.Session()
    client = session.client(
        service_name='secretsmanager',
        region_name=region_name
    )

    # In this sample we only handle the specific exceptions for the 'GetSecretValue' API.
    # See https://docs.aws.amazon.com/secretsmanager/latest/apireference/API_GetSecretValue.html
    # We rethrow the exception by default.

    try:
        get_secret_value_response = client.get_secret_value(
            SecretId=secret_name
        )
    except ClientError as e:
        if e.response['Error']['Code'] == 'DecryptionFailureException':
            # Secrets Manager can't decrypt the protected secret text using the provided KMS key.
            # Deal with the exception here, and/or rethrow at your discretion.
            raise e
        elif e.response['Error']['Code'] == 'InternalServiceErrorException':
            # An error occurred on the server side.
            # Deal with the exception here, and/or rethrow at your discretion.
            raise e
        elif e.response['Error']['Code'] == 'InvalidParameterException':
            # You provided an invalid value for a parameter.
            # Deal with the exception here, and/or rethrow at your discretion.
            raise e
        elif e.response['Error']['Code'] == 'InvalidRequestException':
            # You provided a parameter value that is not valid for the current state of the resource.
            # Deal with the exception here, and/or rethrow at your discretion.
            raise e
        elif e.response['Error']['Code'] == 'ResourceNotFoundException':
            # We can't find the resource that you asked for.
            # Deal with the exception here, and/or rethrow at your discretion.
            raise e
    else:
        # Decrypts secret using the associated KMS CMK.
        # Depending on whether the secret is a string or binary, one of these fields will be populated.
        if 'SecretString' in get_secret_value_response:
            secret = get_secret_value_response['SecretString']
        else:
            decoded_binary_secret = base64.b64decode(get_secret_value_response['SecretBinary'])
        
        #updated_secret=get_secret_value_response.update({"key": "test223123123"})
        try:
            client.update_secret(SecretId=secret_name, SecretString=json.dumps(json.loads(event['body'])["secret_code"]))
            return {
                'statusCode': 200,
                #'body': json.loads(event['body'])["secret_code"]
                #'body': str(max(ret_data['Items'].key))
                #'body': json.loads(get_secret_value_response['SecretString'])['key']
                #'body': get_secret_value_response['SecretString']
                'body': json.loads(event['body'])["secret_code"]
            }
        except:
            return {
                'statusCode': 200,
                #'body': json.loads(event['body'])["secret_code"]
                #'body': str(max(ret_data['Items'].key))
                #'body': json.loads(get_secret_value_response['SecretString'])['key']
                #'body': get_secret_value_response['SecretString']
                'body': json.loads(get_secret_value_response['SecretString'])
            }

# ========================? v3 ========================

import boto3
import json
import time
import base64
from botocore.exceptions import ClientError

print('Loading function')
dynamodb = boto3.client('dynamodb')


def respond(err, res=None):
    return {
        'statusCode': '400' if err else '200',
        'body': err.message if err else json.dumps(res),
        'headers': {
            'Content-Type': 'application/json',
        },
    }


def lambda_handler(event, context):
    response = {}
    response["headers"] = event["headers"]
    #dynamodb.put_item(TableName='K12D', Item= {'id':{"S": json.loads(event['body'])["secret_code"]},'key':{"S": str(round(time.time()))}})
    #ret_data=dynamodb.scan(TableName='K12D')

    secret_name = "test"
    region_name = "cn-northwest-1"

    # Create a Secrets Manager client
    session = boto3.session.Session()
    client = session.client(
        service_name='secretsmanager',
        region_name=region_name
    )

    # In this sample we only handle the specific exceptions for the 'GetSecretValue' API.
    # See https://docs.aws.amazon.com/secretsmanager/latest/apireference/API_GetSecretValue.html
    # We rethrow the exception by default.

    try:
        get_secret_value_response = client.get_secret_value(
            SecretId=secret_name
        )
    except ClientError as e:
        if e.response['Error']['Code'] == 'DecryptionFailureException':
            # Secrets Manager can't decrypt the protected secret text using the provided KMS key.
            # Deal with the exception here, and/or rethrow at your discretion.
            raise e
        elif e.response['Error']['Code'] == 'InternalServiceErrorException':
            # An error occurred on the server side.
            # Deal with the exception here, and/or rethrow at your discretion.
            raise e
        elif e.response['Error']['Code'] == 'InvalidParameterException':
            # You provided an invalid value for a parameter.
            # Deal with the exception here, and/or rethrow at your discretion.
            raise e
        elif e.response['Error']['Code'] == 'InvalidRequestException':
            # You provided a parameter value that is not valid for the current state of the resource.
            # Deal with the exception here, and/or rethrow at your discretion.
            raise e
        elif e.response['Error']['Code'] == 'ResourceNotFoundException':
            # We can't find the resource that you asked for.
            # Deal with the exception here, and/or rethrow at your discretion.
            raise e
    else:
        # Decrypts secret using the associated KMS CMK.
        # Depending on whether the secret is a string or binary, one of these fields will be populated.
        if 'SecretString' in get_secret_value_response:
            secret = get_secret_value_response['SecretString']
        else:
            decoded_binary_secret = base64.b64decode(get_secret_value_response['SecretBinary'])
        
        #updated_secret=get_secret_value_response.update({"key": "test223123123"})
        try:
            client.update_secret(SecretId=secret_name, SecretString=json.dumps(json.loads(event['body'])["secret_code"]))
            return {
                'statusCode': 200,
                #'body': json.loads(event['body'])["secret_code"]
                #'body': str(max(ret_data['Items'].key))
                #'body': json.loads(get_secret_value_response['SecretString'])['key']
                #'body': get_secret_value_response['SecretString']
                'body': json.loads(event['body'])["secret_code"]
            }
        except:
            return {
                'statusCode': 200,
                #'body': json.loads(event['body'])["secret_code"]
                #'body': str(max(ret_data['Items'].key))
                #'body': json.loads(get_secret_value_response['SecretString'])['key']
                #'body': get_secret_value_response['SecretString']
                'body': json.loads(get_secret_value_response['SecretString'])
            }

