Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import boto3
- import json
- import uuid
- import time
- import hashlib
- import urllib
- from boto3.dynamodb.conditions import Key
- from string import Template
- dynamodb_client = boto3.client('dynamodb')
- def lambda_handler(event, context):
- try:
- return run(event)
- except Exception as e:
- return page(repr(e))
- def run(event):
- path = event.get('path', '')
- if path == '/':
- return main_handle(event)
- elif path == '/register':
- return page(template('register.html', {'title': 'Регистрация'}))
- elif path == '/registerHandle':
- return register_handle(event)
- elif path == '/login':
- return page(template('login.html', {'title': 'Вход'}))
- elif path == '/loginHandle':
- return login_handle(event)
- elif path == '/profile':
- return profile_handle(event)
- elif path == '/logout':
- return logout_handle(event)
- elif path == '/gifts':
- return gifts_handle(event)
- elif path == '/friends':
- return friends_handle(event)
- elif path == '/test':
- return page(repr(event))
- else:
- return page(template('404.html', {'title': 'Страница не найдена!'}))
- def page(html='', status_code=200):
- return {
- 'statusCode': status_code,
- 'headers': {
- 'Content-Type': 'text/html',
- },
- 'body': html
- }
- def with_cookie(response, cookie):
- response['headers']['Set-Cookie'] = str(cookie) + '; Path=/'
- return response
- def get_html(page_name, params={}):
- html_top = read_file('html/header.html')
- html_mid = read_file('html/' + page_name)
- html_bot = read_file('html/footer.html')
- html = html_top + html_mid + html_bot
- return html
- def template(page_name, params={}):
- s = get_html(page_name)
- if params:
- t = Template(s)
- s = t.safe_substitute(params)
- return s
- def read_file(file_name):
- file = open(file_name,'r')
- html = file.read()
- file.close()
- return html
- def redirect(url):
- return {
- 'statusCode': 302,
- 'headers': {
- 'Location': url
- },
- 'body': ''
- }
- def register_handle(event):
- get_params = event.get('queryStringParameters')
- login = get_params.get('login')
- email = get_params.get('email')
- password = get_params.get('password')
- name = get_params.get('name')
- surname = get_params.get('surname')
- if login and email and password and name and surname:
- same_user = find_user(login)
- if same_user:
- return page(template('error.html', {
- 'error': 'Такой логин уже занят.',
- 'backLink': '<a href="/default/register">Вернуться назад</a>'
- }))
- else:
- response = dynamodb_client.put_item(
- TableName='users',
- Item={
- 'login': {
- 'S': login,
- },
- 'email': {
- 'S': email,
- },
- 'password': {
- 'S': hash_password(password),
- },
- 'name': {
- 'S': name,
- },
- 'surname': {
- 'S': surname,
- },
- 'friends': {
- 'L': [],
- },
- 'wantedGifts': {
- 'L': [],
- },
- }
- )
- auth_token = make_auth(login)
- return with_cookie(redirect('/default/gifts'), 'auth='+auth_token)
- else:
- return page(template('error.html', {
- 'error': 'Введенные данные некорректны!',
- 'backLink': '<a href="/default/register">Вернуться назад</a>'
- }))
- def login_handle(event):
- get_params = event.get('queryStringParameters')
- login = get_params.get('login')
- password = get_params.get('password')
- auth_token = None
- if login and password:
- user = find_user(login)
- if user:
- real_password_hash = user.get('password').get('S')
- if real_password_hash == hash_password(password):
- auth_token = make_auth(login)
- if auth_token:
- return with_cookie(redirect('/default/profile'), 'auth='+auth_token)
- else:
- return page(template('error.html', {
- 'error': 'Пользователь с такими данными не найден или данные введены неверно',
- 'backLink': '<a href="/default/login">Вернуться назад</a>'
- }))
- def make_auth(login):
- new_token = str(uuid.uuid4().hex)
- response = dynamodb_client.put_item(
- TableName='auths',
- Item={
- 'token': {
- 'S': new_token,
- },
- 'login': {
- 'S': login,
- },
- 'login_time': {
- 'S': str(time.time()),
- },
- }
- )
- return new_token
- def find_user(login):
- response = dynamodb_client.get_item(
- TableName='users',
- Key={'login': {'S': login}}
- )
- item = response.get('Item')
- return item
- def get_auth_token(event):
- auth_token = None
- headers = event.get('headers')
- cookie_header = headers.get('cookie')
- if (cookie_header):
- cookies = cookie_header.split('; ')
- for ck in cookies:
- ind = ck.index('=')
- ckName = ck[0:ind]
- ckVal = ck[ind+1:]
- if ckName == 'auth' and ckVal:
- auth_token = str(ckVal)
- return auth_token
- def get_auth_user(event):
- auth_user = None
- auth_token = get_auth_token(event)
- if auth_token:
- response = dynamodb_client.get_item(
- TableName='auths',
- Key={'token': {'S': auth_token}}
- )
- item = response.get('Item')
- if item:
- auth_user = item.get('login').get('S')
- return auth_user
- def profile_handle(event):
- login = get_auth_user(event)
- if not login:
- return redirect('/default/')
- get_params = event.get('queryStringParameters')
- userid = None
- if get_params:
- userid = get_params.get('id')
- if userid:
- user = find_user(userid)
- if not user:
- return redirect('/default/404')
- name = user.get('name').get('S')
- surname = user.get('surname').get('S')
- email = user.get('email').get('S')
- return page(template('other_profile.html', {
- 'title': 'Профиль',
- 'name': name,
- 'surname': surname,
- 'email': email,
- 'login': userid,
- }))
- else:
- user = find_user(login)
- if not user:
- return redirect('/default/')
- name = user.get('name').get('S')
- surname = user.get('surname').get('S')
- email = user.get('email').get('S')
- friends_html = ''
- gifts_html = ''
- return page(template('my_profile.html', {
- 'title': 'Профиль',
- 'name': name,
- 'surname': surname,
- 'email': email,
- 'login': login,
- 'friends_html': friends_html,
- 'gifts_html': gifts_html,
- 'profile_url_encoded': urllib.parse.quote(make_profile_link(login)),
- }))
- def make_profile_link(login):
- return 'https://adfx152135.execute-api.us-east-1.amazonaws.com/default/profile?id='+str(login)
- def logout_handle(event):
- token = get_auth_token(event)
- if token:
- dynamodb_client.delete_item(
- TableName='auths',
- Key={'token': {'S': token}}
- )
- return with_cookie(redirect('/default/'), 'auth=')
- def main_handle(event):
- login = get_auth_user(event)
- if login:
- return redirect('/default/profile')
- else:
- return page(template('index.html', {'title': 'Главная страница'}))
- def md5(s):
- return hashlib.md5(s.encode('utf-8')).hexdigest()
- def hash_password(passwd):
- s = passwd + '_z04a02b14c'
- hash = md5(s)
- return hash
- def gifts_handle(event):
- return page(template('gifts.html'))
- def friends_handle(event):
- return page('<h2>Friends</h2>')
- def get_gifts(event):
- pass
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement