浏览代码

Merge branch 'minor' of sindre/Beelance into master

master
父节点
当前提交
5fee2971bd
共有 11 个文件被更改,包括 69 次插入88 次删除
  1. +2
    -3
      src/app/models/project.py
  2. +1
    -12
      src/app/views/app.py
  3. +4
    -6
      src/app/views/apply.py
  4. +5
    -7
      src/app/views/index.py
  5. +3
    -5
      src/app/views/login.py
  6. +0
    -3
      src/app/views/logout.py
  7. +32
    -36
      src/app/views/new_project.py
  8. +2
    -5
      src/app/views/open_projects.py
  9. +4
    -6
      src/app/views/project.py
  10. +3
    -5
      src/app/views/register.py
  11. +13
    -0
      src/app/views/utils.py

+ 2
- 3
src/app/models/project.py 查看文件

@@ -127,6 +127,8 @@ def get_user_permissions(userid, projectid):
try: try:
cursor.execute(query, (projectid, userid)) cursor.execute(query, (projectid, userid))
permissions = cursor.fetchall() permissions = cursor.fetchall()
if len(permissions):
return permissions[0]
except mysql.connector.Error as err: except mysql.connector.Error as err:
logger.error("Failed executing query: %s", err) logger.error("Failed executing query: %s", err)
cursor.fetchall() cursor.fetchall()
@@ -135,9 +137,6 @@ def get_user_permissions(userid, projectid):
cursor.close() cursor.close()
db.close() db.close()


if len(permissions):
return permissions[0]

return [0, 0, 0] return [0, 0, 0]






+ 1
- 12
src/app/views/app.py 查看文件

@@ -1,6 +1,5 @@
import os import os
import web import web
from views.utils import get_nav_bar, csrf_field
from views.login import Login from views.login import Login
from views.logout import Logout from views.logout import Logout
from views.register import Register from views.register import Register
@@ -13,7 +12,7 @@ from views.apply import Apply
# Connect to smtp server, enables web.sendmail() # Connect to smtp server, enables web.sendmail()
try: try:
smtp_server = os.getenv("smtp_server") + ":25" smtp_server = os.getenv("smtp_server") + ":25"
web.config.smtp_server = smtp_server
web.config.smtp_server = smtp_server
except: except:
smtp_server = "molde.idi.ntnu.no:25" smtp_server = "molde.idi.ntnu.no:25"
web.config.smtp_server = smtp_server web.config.smtp_server = smtp_server
@@ -39,9 +38,6 @@ urls = (
# Initialize application using the web py framework # Initialize application using the web py framework
app = web.application(urls, globals()) app = web.application(urls, globals())


# Get html templates
render = web.template.render('templates/')

# Set session timeout # Set session timeout
web.config.session_parameters['timeout'] = 15000000 web.config.session_parameters['timeout'] = 15000000


@@ -52,16 +48,9 @@ if web.config.get('_session') is None:
else: else:
session = web.config._session session = web.config._session


# Add session to global variables
render._add_global(session, 'session')

# Add CSRF field to global variables
web.template.Template.globals['csrf_field'] = csrf_field

# Make the session available cross modules through webctx # Make the session available cross modules through webctx
def session_hook(): def session_hook():
web.ctx.session = session web.ctx.session = session
web.template.Template.globals['session'] = session


app.add_processor(web.loadhook(session_hook)) app.add_processor(web.loadhook(session_hook))




+ 4
- 6
src/app/views/apply.py 查看文件

@@ -1,11 +1,9 @@
import web import web
import models.project import models.project
from models.user import get_user_name_by_id from models.user import get_user_name_by_id
from views.utils import get_nav_bar, get_element_count, csrf_protected
from views.utils import get_nav_bar, get_element_count, csrf_protected, get_render
from views.forms import get_apply_form, get_apply_permissions_form from views.forms import get_apply_form, get_apply_permissions_form


# Get html templates
render = web.template.render('templates/')


class Apply: class Apply:


@@ -30,8 +28,7 @@ class Apply:
apply_permissions_form = get_apply_permissions_form() apply_permissions_form = get_apply_permissions_form()
applicants = [[session.userid, session.username]] applicants = [[session.userid, session.username]]
permissions = [["TRUE", "TRUE", "TRUE"]] permissions = [["TRUE", "TRUE", "TRUE"]]
render = web.template.render('templates/', globals={"get_apply_permissions_form":get_apply_permissions_form, 'session':session})

render = get_render(globals={"get_apply_permissions_form": get_apply_permissions_form})
return render.apply(nav, apply_form, get_apply_permissions_form, project, applicants, permissions) return render.apply(nav, apply_form, get_apply_permissions_form, project, applicants, permissions)


@csrf_protected @csrf_protected
@@ -49,7 +46,8 @@ class Apply:
apply_permission_form = get_apply_permissions_form() apply_permission_form = get_apply_permissions_form()


# Prepare globals # Prepare globals
render = web.template.render('templates/', globals={"get_apply_permissions_form":get_apply_permissions_form, 'session':session})
render = get_render(globals={"get_apply_permissions_form": get_apply_permissions_form})

if data.projectid: if data.projectid:
project = models.project.get_project_by_id(data.projectid) project = models.project.get_project_by_id(data.projectid)




+ 5
- 7
src/app/views/index.py 查看文件

@@ -1,17 +1,15 @@
import web import web
import models.project import models.project
from views.utils import get_nav_bar
from views.utils import get_nav_bar, get_render


# Get html templates
render = web.template.render('templates/')


class Index: class Index:
def GET(self): def GET(self):
"""
"""
Get main page using the projects URL input variable to Get main page using the projects URL input variable to
determine which projects to show. determine which projects to show.
:return: index page :return: index page
""" """
session = web.ctx.session session = web.ctx.session
@@ -31,4 +29,4 @@ class Index:
project_bulk_one = models.project.get_projects_by_status_and_owner(str(session.userid), "finished") project_bulk_one = models.project.get_projects_by_status_and_owner(str(session.userid), "finished")
project_bulk_two = models.project.get_projects_by_participant_and_status(str(session.userid), "finished") project_bulk_two = models.project.get_projects_by_participant_and_status(str(session.userid), "finished")


return render.index(nav, project_bulk_one, project_bulk_two, data.projects, categories)
return get_render().index(nav, project_bulk_one, project_bulk_two, data.projects, categories)

+ 3
- 5
src/app/views/login.py 查看文件

@@ -1,6 +1,6 @@
import web import web
from views.forms import login_form from views.forms import login_form
from views.utils import get_nav_bar, csrf_protected
from views.utils import get_nav_bar, csrf_protected, get_render
import models.session import models.session
import models.user import models.user
import logging import logging
@@ -11,9 +11,6 @@ import time


logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)


# Get html templates
render = web.template.render('templates/')

# The remember cookie should be valid for a week # The remember cookie should be valid for a week
remember_timeout = 3600*24*7 remember_timeout = 3600*24*7


@@ -39,7 +36,7 @@ class Login():
# Log the user in if the rememberme cookie is set and valid # Log the user in if the rememberme cookie is set and valid
self.check_rememberme() self.check_rememberme()


return render.login(nav, login_form, "")
return get_render().login(nav, login_form, "")


@csrf_protected @csrf_protected
def POST(self): def POST(self):
@@ -50,6 +47,7 @@ class Login():
session = web.ctx.session session = web.ctx.session
nav = get_nav_bar(session) nav = get_nav_bar(session)
data = web.input(username="", password="", remember=False) data = web.input(username="", password="", remember=False)
render = get_render()


# Validate login credential with database query # Validate login credential with database query
user = models.user.get_user(data.username) user = models.user.get_user(data.username)


+ 0
- 3
src/app/views/logout.py 查看文件

@@ -2,9 +2,6 @@ import web
from views.utils import get_nav_bar from views.utils import get_nav_bar
import models.session import models.session


# Get html templates
render = web.template.render('templates/')



class Logout: class Logout:




+ 32
- 36
src/app/views/new_project.py 查看文件

@@ -1,13 +1,10 @@
import web import web
from web import form from web import form
from views.forms import get_task_form_elements, get_project_form_elements, get_user_form_elements, project_buttons from views.forms import get_task_form_elements, get_project_form_elements, get_user_form_elements, project_buttons
from views.utils import get_nav_bar, get_element_count, csrf_protected
from views.utils import get_nav_bar, get_element_count, csrf_protected, get_render
import models.project import models.project
import models.user import models.user


# Get html templates
render = web.template.render('templates/')



class New_project: class New_project:
def GET(self): def GET(self):
@@ -24,7 +21,7 @@ class New_project:
task_form_elements = get_task_form_elements() task_form_elements = get_task_form_elements()
user_form_elements = get_user_form_elements() user_form_elements = get_user_form_elements()
project_form = form.Form(*(project_form_elements + task_form_elements + user_form_elements)) project_form = form.Form(*(project_form_elements + task_form_elements + user_form_elements))
return render.new_project(nav, project_form, project_buttons, "")
return get_render().new_project(nav, project_form, project_buttons, "")


@csrf_protected @csrf_protected
def POST(self): def POST(self):
@@ -35,6 +32,7 @@ class New_project:
""" """
session = web.ctx.session session = web.ctx.session
nav = get_nav_bar(session) nav = get_nav_bar(session)
render = get_render()


# Try the different URL input parameters to determine how to generate the form # Try the different URL input parameters to determine how to generate the form
data = web.input(add_user=None, remove_user=None, data = web.input(add_user=None, remove_user=None,
@@ -72,44 +70,42 @@ class New_project:
if len(data.user_name_0): if len(data.user_name_0):
status = "in progress" status = "in progress"


# Validate the input user names
for i in range(0, user_count):
if len(data["user_name_"+str(i)]) and not models.user.get_user_id_by_name(data["user_name_"+str(i)]):
return render.new_project(nav, project_form, project_buttons, "Invalid user: " + data["user_name_"+str(i)])

# Save the project to the database # Save the project to the database
projectid = models.project.set_project(data.category_name, str(session.userid), projectid = models.project.set_project(data.category_name, str(session.userid),
data.project_title, data.project_description, status)
data.project_title, data.project_description, status)


# Save the tasks in the database # Save the tasks in the database
for i in range(0, task_count): for i in range(0, task_count):
models.project.set_task(str(projectid), (data["task_title_" + str(i)]),
(data["task_description_" + str(i)]), (data["budget_" + str(i)]))
models.project.set_task(str(projectid),
(data["task_title_" + str(i)]),
(data["task_description_" + str(i)]),
(data["budget_" + str(i)]))


# Save the users in the database given that the input field is not empty
# Validate the input user names. If the user doesn't exist we silently ignore it
for i in range(0, user_count): for i in range(0, user_count):
if len(data["user_name_"+str(i)]):
userid = models.user.get_user_id_by_name(data["user_name_"+str(i)])
read, write, modify = "FALSE", "FALSE", "FALSE"
try:
data["read_permission_"+str(i)]
read = "TRUE"
except Exception as e:
read = "FALSE"
pass
try:
data["write_permission_"+str(i)]
write = "TRUE"
except Exception as e:
write = "FALSE"
pass
try:
data["modify_permission_"+str(i)]
modify = "TRUE"
except Exception as e:
modify = "FALSE"
pass
models.project.set_projects_user(str(projectid), str(userid), read, write, modify)
username = data["user_name_"+str(i)]
if len(username):
userid = models.user.get_user_id_by_name(username)
if userid:
# Save the users in the database given that the input field is not empty
read, write, modify = 0, 0, 0
try:
data["read_permission_"+str(i)]
read = 1
except Exception as e:
pass
try:
data["write_permission_"+str(i)]
write = 1
except Exception as e:
pass
try:
data["modify_permission_"+str(i)]
modify = 1
except Exception as e:
pass
models.project.set_projects_user(projectid, userid, read, write, modify)

raise web.seeother('/?projects=my') raise web.seeother('/?projects=my')


def compose_form(self, data, operation): def compose_form(self, data, operation):


+ 2
- 5
src/app/views/open_projects.py 查看文件

@@ -1,10 +1,7 @@
import web import web
from views.utils import get_nav_bar
from views.utils import get_nav_bar, get_render
from models.project import get_categories, get_projects_by_status_and_category from models.project import get_categories, get_projects_by_status_and_category


# Get html templates
render = web.template.render('templates/')



class Open_projects: class Open_projects:
def GET(self): def GET(self):
@@ -20,4 +17,4 @@ class Open_projects:
open_projects = get_projects_by_status_and_category(data.categoryid, "open") open_projects = get_projects_by_status_and_category(data.categoryid, "open")
nav = get_nav_bar(session) nav = get_nav_bar(session)
categories = get_categories() categories = get_categories()
return render.open_projects(nav, categories, open_projects)
return get_render().open_projects(nav, categories, open_projects)

+ 4
- 6
src/app/views/project.py 查看文件

@@ -1,13 +1,10 @@
import web import web
import models.project import models.project
from views.utils import get_nav_bar, csrf_protected
from views.utils import get_nav_bar, csrf_protected, get_render
from views.forms import project_form from views.forms import project_form
import os import os
from time import sleep from time import sleep


# Get html templates
render = web.template.render('templates/')



class Project: class Project:


@@ -38,8 +35,9 @@ class Project:
else: else:
project = [[]] project = [[]]
tasks = [[]] tasks = [[]]
render = web.template.render('templates/', globals={'get_task_files':models.project.get_task_files, 'session':session})
return render.project(nav, project_form, project, tasks,permissions, categories)

render = get_render(globals={'get_task_files': models.project.get_task_files})
return render.project(nav, project_form, project, tasks, permissions, categories)


@csrf_protected @csrf_protected
def POST(self): def POST(self):


+ 3
- 5
src/app/views/register.py 查看文件

@@ -1,6 +1,6 @@
import web import web
from views.forms import register_form from views.forms import register_form
from views.utils import get_nav_bar, csrf_protected, password_weakness
from views.utils import get_nav_bar, csrf_protected, password_weakness, get_render
import models.register import models.register
import models.user import models.user
import logging import logging
@@ -9,9 +9,6 @@ import re


logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)


# Get html templates
render = web.template.render('templates/')



class Register: class Register:


@@ -23,7 +20,7 @@ class Register:
""" """
session = web.ctx.session session = web.ctx.session
nav = get_nav_bar(session) nav = get_nav_bar(session)
return render.register(nav, register_form, "")
return get_render().register(nav, register_form, "")


@csrf_protected @csrf_protected
def POST(self): def POST(self):
@@ -35,6 +32,7 @@ class Register:
session = web.ctx.session session = web.ctx.session
nav = get_nav_bar(session) nav = get_nav_bar(session)
data = web.input() data = web.input()
render = get_render()


register = register_form() register = register_form()
if not register.validates(): if not register.validates():


+ 13
- 0
src/app/views/utils.py 查看文件

@@ -2,6 +2,19 @@ import web
from uuid import uuid4 from uuid import uuid4




def get_render(path='templates/', globals={}, **kwargs):
default_globals = {
'session': web.config._session,
'csrf_field': csrf_field,
}

return web.template.render(
path,
globals={**default_globals, **globals},
**kwargs,
)


def get_nav_bar(session): def get_nav_bar(session):
""" """
Generates the page nav bar Generates the page nav bar


正在加载...
取消
保存