#controllers/signup.py
import config, lib, datetime, uuid
from bottle import route, template, request, redirect
from models import userdb
@route('/signup')
def signup():
config.kargs['blogTitle'] = "ទំព័រសមាជិក"
config.kargs['posts'] = userdb.select(config.kargs['dashboardPostLimit'])
config.kargs['thumbs'] = lib.getPostThumbs(config.kargs['posts'], type="user")
config.kargs['page'] = 1
return template('dashboard/signup', data=config.kargs)
@route('/user/<id:int>')
def post(id):
config.kargs['blogTitle'] = "ទំព័រសមាជិក"
config.kargs['frontPagePostLimit'] = 20
config.kargs['post'] = userdb.select(1, id)
config.kargs['posts'] = userdb.select(config.kargs['frontPagePostLimit'])
config.kargs['thumbs'] = lib.getPostThumbs(config.kargs['posts'], "user")
config.kargs['page'] = 1
author = request.get_cookie("logged-in", secret=config.kargs['secretKey'])
if author:
config.kargs['showEdit'] = True
return template('user', data=config.kargs)
@route('/signup', method="POST")
def signupPost():
author = request.get_cookie("logged-in", secret=config.kargs['secretKey'])
user = userdb.createTable()
username = request.forms.getunicode('fusername')
password = request.forms.getunicode('fpassword')
rights = request.forms.getunicode('frights')
email = request.forms.getunicode('femail')
profile = request.forms.getunicode('fprofile')
gender = request.forms.getunicode('fgender')
if not user:
userdb.insert(str(uuid.uuid4().int), username, password, "Admin", email, profile, gender)
else:
if ((author != "Guest") and userdb.checkAdmin(author)):
if 'postId' in config.kargs:
id = config.kargs['postId']
userdb.update(username, password, rights, email, profile, gender, id)
del config.kargs['postId']
else:
userdb.insert(str(uuid.uuid4().int), username, password, rights, email, profile, gender)
redirect('/signup')
redirect('/login')
@route('/user/edit/<id:int>')
def edit(id):
author = request.get_cookie("logged-in", secret=config.kargs['secretKey'])
if ((author != "Guest") and userdb.checkAdmin(author)):
config.kargs['blogTitle'] = "ទំព័រកែតំរូវ"
config.kargs['posts'] = userdb.select(config.kargs['dashboardPostLimit'])
config.kargs['thumbs'] = lib.getPostThumbs(config.kargs['posts'], type="user")
config.kargs['post'] = userdb.select(1, id)
config.kargs['edit'] = True
config.kargs['postId'] = id
config.kargs['page'] = 1
return template('dashboard/signup', data=config.kargs)
redirect('/signup')
@route('/user/delete/<id:int>')
def delete(id):
author = request.get_cookie("logged-in", secret=config.kargs['secretKey'])
if ((author != "Guest") and userdb.checkAdmin(author)):
userdb.delete(id)
redirect('/signup')
@route('/user/paginate/<place>')
def paginate(place):
if place == "frontEnd":
postLimit = config.kargs['frontPagePostLimit']
else:
postLimit = config.kargs['dashboardPostLimit']
posts = userdb.select(postLimit, page=config.kargs['page'])
if posts:
config.kargs['page'] += 1
thumbs = lib.getPostThumbs(posts, type='user')
return {'json':posts, 'thumbs':thumbs}
else:
return {'json':0}
#models/userdb.py
import os
import psycopg2
def createTable():
if 'DYNO' in os.environ:
DATABASE_URL = os.environ['DATABASE_URL']
conn = psycopg2.connect(DATABASE_URL, sslmode='require')
cursor = conn.cursor()
else:
conn = psycopg2.connect(
database="postgres",
user="postgres",
password="sokhavuth",
host="localhost",
port="5432"
)
cursor = conn.cursor()
SQL = '''CREATE TABLE IF NOT EXISTS USERS(
ID TEXT,
USERNAME TEXT,
PASSWORD TEXT,
RIGHTS TEXT,
EMAIL TEXT,
PROFILE TEXT,
GENDER TEXT
)'''
cursor.execute(SQL)
cursor.execute("SELECT ID FROM USERS LIMIT 1")
result = cursor.fetchone()
conn.commit()
conn.close()
return result
def insert(*user):
if 'DYNO' in os.environ:
DATABASE_URL = os.environ['DATABASE_URL']
conn = psycopg2.connect(DATABASE_URL, sslmode='require')
cursor = conn.cursor()
else:
conn = psycopg2.connect(
database="postgres",
user="postgres",
password="sokhavuth",
host="localhost",
port="5432"
)
cursor = conn.cursor()
cursor.execute("INSERT INTO USERS (ID, USERNAME, PASSWORD, RIGHTS, EMAIL, PROFILE, GENDER) VALUES %s ", (user,))
conn.commit()
conn.close()
def check(username, password):
if 'DYNO' in os.environ:
DATABASE_URL = os.environ['DATABASE_URL']
conn = psycopg2.connect(DATABASE_URL, sslmode='require')
cursor = conn.cursor()
else:
conn = psycopg2.connect(
database="postgres",
user="postgres",
password="sokhavuth",
host="localhost",
port="5432"
)
cursor = conn.cursor()
cursor.execute("SELECT USERNAME, PASSWORD FROM USERS WHERE USERNAME = '"+ username + "' and PASSWORD = '" + password + "' LIMIT 1")
result = cursor.fetchone()
if result:
return True
else:
return False
def checkAdmin(username):
if 'DYNO' in os.environ:
DATABASE_URL = os.environ['DATABASE_URL']
conn = psycopg2.connect(DATABASE_URL, sslmode='require')
cursor = conn.cursor()
else:
conn = psycopg2.connect(
database="postgres",
user="postgres",
password="sokhavuth",
host="localhost",
port="5432"
)
cursor = conn.cursor()
cursor.execute("SELECT USERNAME, RIGHTS FROM USERS WHERE USERNAME = '"+ username + "' and RIGHTS = 'Admin' LIMIT 1")
result = cursor.fetchone()
if result:
return True
else:
return False
def select(amount, id=None, page=0):
createTable()
if 'DYNO' in os.environ:
DATABASE_URL = os.environ['DATABASE_URL']
conn = psycopg2.connect(DATABASE_URL, sslmode='require')
cursor = conn.cursor()
else:
conn = psycopg2.connect(
database="postgres",
user="postgres",
password="sokhavuth",
host="localhost",
port="5432"
)
cursor = conn.cursor()
if id and (amount == 1):
cursor.execute("SELECT * FROM USERS WHERE ID = '" + str(id) +"'")
elif page:
SQL = "SELECT * FROM USERS ORDER BY CTID DESC OFFSET %s ROWS FETCH NEXT %s ROWS ONLY"
cursor.execute(SQL, (amount*page, amount))
else:
cursor.execute("SELECT * FROM USERS ORDER BY CTID DESC LIMIT " + str(amount))
result = cursor.fetchall()
return result
def update(*args):
if 'DYNO' in os.environ:
DATABASE_URL = os.environ['DATABASE_URL']
conn = psycopg2.connect(DATABASE_URL, sslmode='require')
cursor = conn.cursor()
else:
conn = psycopg2.connect(
database="postgres",
user="postgres",
password="sokhavuth",
host="localhost",
port="5432"
)
cursor = conn.cursor()
sql = "UPDATE USERS SET USERNAME = %s, PASSWORD = %s, RIGHTS = %s, EMAIL = %s, PROFILE = %s, GENDER = %s WHERE ID = '%s' "
cursor.execute(sql, args)
conn.commit()
conn.close()
def delete(id):
if 'DYNO' in os.environ:
DATABASE_URL = os.environ['DATABASE_URL']
conn = psycopg2.connect(DATABASE_URL, sslmode='require')
cursor = conn.cursor()
else:
conn = psycopg2.connect(
database="postgres",
user="postgres",
password="sokhavuth",
host="localhost",
port="5432"
)
cursor = conn.cursor()
cursor.execute("DELETE FROM USERS WHERE ID = '" + str(id) + "'")
conn.commit()
conn.close()
GitHub: https://github.com/Sokhavuth/kwblog
Heroku: https://khmerweb-kwblog.herokuapp.com/














