From owner-svn-soc-all@FreeBSD.ORG Sat Aug 25 19:55:50 2012 Return-Path: Delivered-To: svn-soc-all@FreeBSD.org Received: from socsvn.FreeBSD.org (unknown [IPv6:2001:4f8:fff6::2f]) by hub.freebsd.org (Postfix) with SMTP id 2D193106566B for ; Sat, 25 Aug 2012 19:55:48 +0000 (UTC) (envelope-from tzabal@FreeBSD.org) Received: by socsvn.FreeBSD.org (sSMTP sendmail emulation); Sat, 25 Aug 2012 19:55:48 +0000 Date: Sat, 25 Aug 2012 19:55:48 +0000 From: tzabal@FreeBSD.org To: svn-soc-all@FreeBSD.org MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Message-Id: <20120825195548.2D193106566B@hub.freebsd.org> Cc: Subject: socsvn commit: r240850 - in soc2012/tzabal/server-side/akcrs-website: . akcrswebsite akcrswebsite/scripts akcrswebsite/static akcrswebsite/templates X-BeenThere: svn-soc-all@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: SVN commit messages for the entire Summer of Code repository List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 25 Aug 2012 19:55:50 -0000 Author: tzabal Date: Sat Aug 25 19:55:46 2012 New Revision: 240850 URL: http://svnweb.FreeBSD.org/socsvn/?view=rev&rev=240850 Log: The fresh akcrs-website directory. Added: soc2012/tzabal/server-side/akcrs-website/ soc2012/tzabal/server-side/akcrs-website/CHANGES.txt soc2012/tzabal/server-side/akcrs-website/MANIFEST.in soc2012/tzabal/server-side/akcrs-website/README.txt soc2012/tzabal/server-side/akcrs-website/akcrswebsite/ soc2012/tzabal/server-side/akcrs-website/akcrswebsite/__init__.py soc2012/tzabal/server-side/akcrs-website/akcrswebsite/models.py soc2012/tzabal/server-side/akcrs-website/akcrswebsite/scripts/ soc2012/tzabal/server-side/akcrs-website/akcrswebsite/scripts/__init__.py soc2012/tzabal/server-side/akcrs-website/akcrswebsite/scripts/initializedb.py soc2012/tzabal/server-side/akcrs-website/akcrswebsite/static/ soc2012/tzabal/server-side/akcrs-website/akcrswebsite/static/style.css soc2012/tzabal/server-side/akcrs-website/akcrswebsite/templates/ soc2012/tzabal/server-side/akcrs-website/akcrswebsite/templates/account.mako soc2012/tzabal/server-side/akcrs-website/akcrswebsite/templates/base.mako soc2012/tzabal/server-side/akcrs-website/akcrswebsite/templates/bug.mako soc2012/tzabal/server-side/akcrs-website/akcrswebsite/templates/bugs.mako soc2012/tzabal/server-side/akcrs-website/akcrswebsite/templates/change_bugstate.mako soc2012/tzabal/server-side/akcrs-website/akcrswebsite/templates/change_password.mako soc2012/tzabal/server-side/akcrs-website/akcrswebsite/templates/check_for_user.mako soc2012/tzabal/server-side/akcrs-website/akcrswebsite/templates/evaluate_report.mako soc2012/tzabal/server-side/akcrs-website/akcrswebsite/templates/index.mako soc2012/tzabal/server-side/akcrs-website/akcrswebsite/templates/login.mako soc2012/tzabal/server-side/akcrs-website/akcrswebsite/templates/menu.html soc2012/tzabal/server-side/akcrs-website/akcrswebsite/templates/report.mako soc2012/tzabal/server-side/akcrs-website/akcrswebsite/templates/reports.mako soc2012/tzabal/server-side/akcrs-website/akcrswebsite/views.py soc2012/tzabal/server-side/akcrs-website/development.ini soc2012/tzabal/server-side/akcrs-website/production.ini soc2012/tzabal/server-side/akcrs-website/setup.cfg soc2012/tzabal/server-side/akcrs-website/setup.py Added: soc2012/tzabal/server-side/akcrs-website/CHANGES.txt ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ soc2012/tzabal/server-side/akcrs-website/CHANGES.txt Sat Aug 25 19:55:46 2012 (r240850) @@ -0,0 +1,4 @@ +0.0 +--- + +- Initial version Added: soc2012/tzabal/server-side/akcrs-website/MANIFEST.in ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ soc2012/tzabal/server-side/akcrs-website/MANIFEST.in Sat Aug 25 19:55:46 2012 (r240850) @@ -0,0 +1,2 @@ +include *.txt *.ini *.cfg *.rst +recursive-include akcrswebsite *.ico *.png *.css *.gif *.jpg *.pt *.txt *.mak *.mako *.js *.html *.xml Added: soc2012/tzabal/server-side/akcrs-website/README.txt ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ soc2012/tzabal/server-side/akcrs-website/README.txt Sat Aug 25 19:55:46 2012 (r240850) @@ -0,0 +1,14 @@ +akcrs-website README +================== + +Getting Started +--------------- + +- cd + +- $venv/bin/python setup.py develop + +- $venv/bin/populate_akcrs-website development.ini + +- $venv/bin/pserve development.ini + Added: soc2012/tzabal/server-side/akcrs-website/akcrswebsite/__init__.py ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ soc2012/tzabal/server-side/akcrs-website/akcrswebsite/__init__.py Sat Aug 25 19:55:46 2012 (r240850) @@ -0,0 +1,34 @@ +from pyramid.authentication import AuthTktAuthenticationPolicy +from pyramid.authorization import ACLAuthorizationPolicy +from pyramid.config import Configurator +from sqlalchemy import engine_from_config + +from .models import DBSession + +def main(global_config, **settings): + """ This function returns a Pyramid WSGI application.""" + engine = engine_from_config(settings, 'sqlalchemy.') + DBSession.configure(bind=engine) + authn_policy = AuthTktAuthenticationPolicy('z3VfW0PhQy7g') + authz_policy = ACLAuthorizationPolicy() + config = Configurator(settings=settings) + # Authentication and Authorization + config.set_authentication_policy(authn_policy) + config.set_authorization_policy(authz_policy) + # Static + config.add_static_view('static', 'static', cache_max_age=3600) + # Routes + config.add_route('index', '/') + config.add_route('login', '/login') + config.add_route('logout', '/logout') + config.add_route('account', '/account') + config.add_route('change_password', '/change_password') + config.add_route('reports', '/reports') + config.add_route('report', '/reports/{id}') + config.add_route('evaluate_report', '/reports/{id}/evaluate') + config.add_route('bugs', '/bugs') + config.add_route('bug', '/bugs/{id}') + config.add_route('change_bugstate', '/bugs/{id}/change_state') + # Scan + config.scan() + return config.make_wsgi_app() \ No newline at end of file Added: soc2012/tzabal/server-side/akcrs-website/akcrswebsite/models.py ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ soc2012/tzabal/server-side/akcrs-website/akcrswebsite/models.py Sat Aug 25 19:55:46 2012 (r240850) @@ -0,0 +1,87 @@ +import datetime + +from sqlalchemy.dialects.postgresql import ARRAY +from sqlalchemy.dialects.postgresql import ENUM +from sqlalchemy.ext.declarative import declarative_base +from sqlalchemy.orm import relationship +from sqlalchemy.orm import scoped_session +from sqlalchemy.orm import sessionmaker +from sqlalchemy.schema import Column +from sqlalchemy.schema import ForeignKey +from sqlalchemy.schema import Sequence +from sqlalchemy.types import Boolean +from sqlalchemy.types import CHAR +from sqlalchemy.types import Integer +from sqlalchemy.types import String +from sqlalchemy.types import Text +from sqlalchemy.types import TIMESTAMP +from zope.sqlalchemy import ZopeTransactionExtension + + +DBSession = scoped_session(sessionmaker(extension=ZopeTransactionExtension())) +Base = declarative_base() + + +class User(Base): + __tablename__ = 'users' + + id = Column(Integer, Sequence('users_id_seq'), primary_key=True) + email = Column(String(254), nullable=False) + password = Column(CHAR(64), nullable=False) + is_developer = Column(Boolean, default='false') + + reports = relationship('Report') + + +class Bug(Base): + __tablename__ = 'bugs' + + id = Column(Integer, Sequence('bugs_id_seq'), primary_key=True) + state = Column(ENUM('NOSTATE', 'Open', 'Analyzed', 'Feedback', 'Closed', 'Suspended', name='bugstate'), nullable=False) + reported = Column(Integer, nullable=False) + + reports = relationship('Report') + + +class Report(Base): + __tablename__ = 'reports' + + id = Column(Integer, Sequence('reports_id_seq'), primary_key=True) + bug_id = Column(Integer, ForeignKey('bugs.id')) + user_id = Column(Integer, ForeignKey('users.id'), nullable=False) + received_datetime = Column(TIMESTAMP, default=datetime.datetime.now) + confirmation_code = Column(CHAR(length=16), nullable=False) + confirmed = Column(Boolean, default='false') + bugs_id = Column(ARRAY(Integer)) + crashtype = Column(Text) + crashdate = Column(Text) + hostname = Column(Text) + ostype = Column(Text) + osrelease = Column(Text) + version = Column(Text) + machine = Column(Text) + panic = Column(Text) + backtrace = Column(Text) + top_significant_func = Column(Text) + rem_significant_funcs = Column(ARRAY(Text)) + ps_axl = Column(Text) + vmstat_s = Column(Text) + vmstat_m = Column(Text) + vmstat_z = Column(Text) + vmstat_i = Column(Text) + pstat_t = Column(Text) + pstat_s = Column(Text) + iostat = Column(Text) + ipcs_a = Column(Text) + ipcs_t = Column(Text) + nfsstat = Column(Text) + netstat_s = Column(Text) + netstat_m = Column(Text) + netstat_id = Column(Text) + netstat_anr = Column(Text) + netstat_ana = Column(Text) + netstat_al = Column(Text) + fstat = Column(Text) + dmesg = Column(Text) + kernelconfig = Column(Text) + ddbcapturebuffer = Column(Text) \ No newline at end of file Added: soc2012/tzabal/server-side/akcrs-website/akcrswebsite/scripts/__init__.py ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ soc2012/tzabal/server-side/akcrs-website/akcrswebsite/scripts/__init__.py Sat Aug 25 19:55:46 2012 (r240850) @@ -0,0 +1 @@ +# package Added: soc2012/tzabal/server-side/akcrs-website/akcrswebsite/scripts/initializedb.py ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ soc2012/tzabal/server-side/akcrs-website/akcrswebsite/scripts/initializedb.py Sat Aug 25 19:55:46 2012 (r240850) @@ -0,0 +1,37 @@ +import os +import sys +import transaction + +from sqlalchemy import engine_from_config + +from pyramid.paster import ( + get_appsettings, + setup_logging, + ) + +from ..models import ( + DBSession, + User, + Bug, + Report, + Base, + ) + +def usage(argv): + cmd = os.path.basename(argv[0]) + print('usage: %s \n' + '(example: "%s development.ini")' % (cmd, cmd)) + sys.exit(1) + +def main(argv=sys.argv): + if len(argv) != 2: + usage(argv) + config_uri = argv[1] + setup_logging(config_uri) + settings = get_appsettings(config_uri) + engine = engine_from_config(settings, 'sqlalchemy.') + DBSession.configure(bind=engine) + Base.metadata.create_all(engine) + #with transaction.manager: + # model = MyModel(name='one', value=1) + # DBSession.add(model) Added: soc2012/tzabal/server-side/akcrs-website/akcrswebsite/static/style.css ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ soc2012/tzabal/server-side/akcrs-website/akcrswebsite/static/style.css Sat Aug 25 19:55:46 2012 (r240850) @@ -0,0 +1,105 @@ +/* HTML Elements */ +body { + margin: 0; + padding: 0; + font-family: tahoma, helvetica, sans-serif; + font-size: 12pt; +} + + +/* Container */ +#container { + width: 1024px; + margin: auto; + position: relative; +} + + +/* Header */ +#header { + height: 5em; +} + +/* Header Left Side */ +#header-left { + height: 5em; + position: absolute; +} + +/* Header Right Side */ +#header-right { + top: 1em; + right: 1em; + position: absolute; +} + +#header-right a { + color: black; + text-decoration: none; +} + +#header-right a:hover { + text-decoration: underline; +} + + +/* Menu */ +#menu { + border-top: 1px solid #E4E1DB; + border-bottom: 1px solid #E4E1DB; +} + +#menu ul li { + display: inline; + padding: 2em; +} + +#menu ul li a { + color: black; + text-decoration: none; +} + +#menu ul li a:hover { + text-decoration: underline; +} + + +/* Reports and Bugs */ +#reports-bugs-tables { + border-collapse:collapse; + text-align: left; +} + +#reports-bugs-tables th { + border-bottom: 2px solid #E4E1DB; + padding: 10px 12px; +} + +#reports-bugs-tables td { + border-bottom: 1px solid #E4E1DB; + padding: 6px 12px; +} + + +/* Report */ +#report-contents-table { + margin-top: 1em; + margin-bottom: 2em; +} + +#report-contents-table td { + padding-right: 3em; +} + +.report-data { + margin-bottom: 1em; +} + +.report-data textarea { + width: 768px; + height: 256px; + border-color: #E4E1DB; + border-style: solid; + border-width: thin; + padding: 0.3em; +} \ No newline at end of file Added: soc2012/tzabal/server-side/akcrs-website/akcrswebsite/templates/account.mako ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ soc2012/tzabal/server-side/akcrs-website/akcrswebsite/templates/account.mako Sat Aug 25 19:55:46 2012 (r240850) @@ -0,0 +1,21 @@ +<%inherit file="base.mako"/> + +<%block name="headerleft"> +Account + + +
+

+
+ +

+

+
+ +

+

+
+ +

+ +
\ No newline at end of file Added: soc2012/tzabal/server-side/akcrs-website/akcrswebsite/templates/base.mako ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ soc2012/tzabal/server-side/akcrs-website/akcrswebsite/templates/base.mako Sat Aug 25 19:55:46 2012 (r240850) @@ -0,0 +1,26 @@ + + + + + Automated Kernel Crash Reporting System + + + +
+ + +
+ ${next.body()} +
+
+ + Added: soc2012/tzabal/server-side/akcrs-website/akcrswebsite/templates/bug.mako ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ soc2012/tzabal/server-side/akcrs-website/akcrswebsite/templates/bug.mako Sat Aug 25 19:55:46 2012 (r240850) @@ -0,0 +1,36 @@ +<%inherit file="base.mako"/> + +<%block name="headerleft"> +Details for the Kernel Bug with ID ${request.matchdict['id']} + + +

+ The state of the bug ${request.matchdict['id']} is marked as ${bug.state}.
+ % if bug.reported == 1: + This bug has been reported only ${bug.reported} time. The crash report that refers to it is:
+

+ % else: + This bug has been reported ${bug.reported} times. The crash reports that refer to it are: +
    + % for report in reports: +
  • Report
  • + %endfor +
+ % endif +

+ +% if is_developer: +

+ As a FreeBSD developer, you can change the state of the bug. Please choose below the new state.
+

+ + +
+

+% endif \ No newline at end of file Added: soc2012/tzabal/server-side/akcrs-website/akcrswebsite/templates/bugs.mako ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ soc2012/tzabal/server-side/akcrs-website/akcrswebsite/templates/bugs.mako Sat Aug 25 19:55:46 2012 (r240850) @@ -0,0 +1,25 @@ +<%inherit file="base.mako"/> + +<%block name="headerleft"> +Kernel Bugs + + +

A list that contains all the bugs that we have identified.

+ + + + + + + + + + % for bug in bugs: + + + + + + % endfor + +
StateReportedDetails
${bug.state}${bug.reported}Bug
Added: soc2012/tzabal/server-side/akcrs-website/akcrswebsite/templates/change_bugstate.mako ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ soc2012/tzabal/server-side/akcrs-website/akcrswebsite/templates/change_bugstate.mako Sat Aug 25 19:55:46 2012 (r240850) @@ -0,0 +1,11 @@ +<%inherit file="base.mako"/> + +<%block name="headerleft"> +Change state for the Kernel Bug with ID ${request.matchdict['id']} + + +% if is_developer and not failed_attempt: +

The state of the bug has changed successfully.

+% else: +

You are not allowed to view this page.

+% endif \ No newline at end of file Added: soc2012/tzabal/server-side/akcrs-website/akcrswebsite/templates/change_password.mako ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ soc2012/tzabal/server-side/akcrs-website/akcrswebsite/templates/change_password.mako Sat Aug 25 19:55:46 2012 (r240850) @@ -0,0 +1,11 @@ +<%inherit file="base.mako"/> + +<%block name="headerleft"> +Change Password + + +% if not result: +

Your password did not change. Please try again.

+% else: +

Your password has changed successfully.

+% endif \ No newline at end of file Added: soc2012/tzabal/server-side/akcrs-website/akcrswebsite/templates/check_for_user.mako ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ soc2012/tzabal/server-side/akcrs-website/akcrswebsite/templates/check_for_user.mako Sat Aug 25 19:55:46 2012 (r240850) @@ -0,0 +1,8 @@ +% if not logged_in: +Login +% else: + <% + userid = logged_in.replace('@', '').replace('.', '') + %> +My Account | Logout +% endif \ No newline at end of file Added: soc2012/tzabal/server-side/akcrs-website/akcrswebsite/templates/evaluate_report.mako ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ soc2012/tzabal/server-side/akcrs-website/akcrswebsite/templates/evaluate_report.mako Sat Aug 25 19:55:46 2012 (r240850) @@ -0,0 +1,7 @@ +<%inherit file="base.mako"/> + +<%block name="headerleft"> +Evaluate the Crash Report with ID ${request.matchdict['id']} + + +

Sorry, but this feature is not ready yet.

\ No newline at end of file Added: soc2012/tzabal/server-side/akcrs-website/akcrswebsite/templates/index.mako ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ soc2012/tzabal/server-side/akcrs-website/akcrswebsite/templates/index.mako Sat Aug 25 19:55:46 2012 (r240850) @@ -0,0 +1,17 @@ +<%inherit file="base.mako"/> + +<%block name="headerleft"> +Welcome to AKCRS! + + +

Please remember the following facts: +

    +
  • One report refers to exactly one bug
  • +
  • One bug may be referred from more than one reports
  • +
+

+

Generally, a problem report or an issue ticket is an indication of a problem. +The ultimate goal is to fix the problem. The problem report or the issue ticket contains the information that we have for the problem. Multiple problem reports or issue tickets may refer to one problem. That means that we have more information about it. +Because our domain is kernel crashes, we use the terms kernel crash report (or report for short) and kernel bug (or bug for short). +We these things in mind, have a happy browsing :)

+

For more information about the Automated Kernel Crash Reporting System, please visit the wiki page of the project.

Added: soc2012/tzabal/server-side/akcrs-website/akcrswebsite/templates/login.mako ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ soc2012/tzabal/server-side/akcrs-website/akcrswebsite/templates/login.mako Sat Aug 25 19:55:46 2012 (r240850) @@ -0,0 +1,23 @@ +<%inherit file="base.mako"/> + +<%block name="headerleft"> +Login + + +% if failed_attempt: +

Invalid credentials, try again.

+% endif + +

There is no registration. In order to login into the system, you use the email address that you have provided in the crashreport program, and the password that has been sent to you via email.

+ +
+

+
+ +

+

+
+ +

+ +
\ No newline at end of file Added: soc2012/tzabal/server-side/akcrs-website/akcrswebsite/templates/menu.html ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ soc2012/tzabal/server-side/akcrs-website/akcrswebsite/templates/menu.html Sat Aug 25 19:55:46 2012 (r240850) @@ -0,0 +1,5 @@ + \ No newline at end of file Added: soc2012/tzabal/server-side/akcrs-website/akcrswebsite/templates/report.mako ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ soc2012/tzabal/server-side/akcrs-website/akcrswebsite/templates/report.mako Sat Aug 25 19:55:46 2012 (r240850) @@ -0,0 +1,198 @@ +<%inherit file="base.mako"/> + +<%block name="headerleft"> +Details for the Kernel Crash Report with ID ${request.matchdict['id']} + + +

All the data of the requested crash report.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Crash typeCrash dateHostname
Operating SystemReleaseVersion
PlatformPanic MessageBacktrace
ps -axlvmstat -svmstat -m
vmstat -zvmstat -ipstat -t
pstat -siostatipcs -a
ipcs -tnfsstatnetstat -s
netstat -mnetstat -idnetstat -anr
netstat -ananetstat -alfstat
dmesgKernel configDDB capture buffer
+ +
+ Crash type
+
+
+
+ Crash date
+
+
+ +
+ Hostname
+
+
+
+ Operating System
+
+
+
+ Release
+
+
+
+ Version
+
+
+
+ Platform
+
+
+
+ Panic Message
+
+
+
+ Backtrace
+
+
+
+ ps -axl
+
+
+
+ vmstat -s
+
+
+
+ vmstat -m
+
+
+
+ vmstat -z
+
+
+
+ vmstat -i
+
+
+
+ pstat -t
+
+
+
+ pstat -s
+
+
+
+ iostat
+
+
+
+ ipcs -a
+
+
+
+ ipcs -t
+
+
+
+ nfsstat
+
+
+
+ netstat -s
+
+
+
+ netstat -m
+
+
+
+ netstat -id
+
+
+
+ netstat -anr
+
+
+
+ netstat -ana
+
+
+
+ netstat -al
+
+
+
+ fstat
+
+
+
+ dmesg
+
+
+
+ Kernel config
+
+
+
+ DDB capture buffer
+
+
+ +% if is_developer: +

+ As a FreeBSD developer, you can view the email address of the submitter in order to contact him for any feedback.
+ The email address of the submitter that sent this report is ${user.email}. +

+

+ Also, if you think that this report refers correctly to the bug with ID ${report.bug_id}, click the checkbox below.
+ Otherwise, suggest in which bug this report should point to or suggest the creation of a new bug for this report. Please write the ID of the bug below or write "new". +

+
+ It refers correctly to the existing bug

+ Bug ID or "new"

+
+
+% endif \ No newline at end of file Added: soc2012/tzabal/server-side/akcrs-website/akcrswebsite/templates/reports.mako ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ soc2012/tzabal/server-side/akcrs-website/akcrswebsite/templates/reports.mako Sat Aug 25 19:55:46 2012 (r240850) @@ -0,0 +1,29 @@ +<%inherit file="base.mako"/> + +<%block name="headerleft"> +Kernel Crash Reports + + +

A list that contains all the crash reports that we have collected.

+ + + + + + + + + + + + % for report in reports: + + + + + + + + % endfor + +
ReceivedReleasePlatformDetailsRefers to
${str(report.received_datetime)[:10]}${report.osrelease}${report.machine}ReportBug
Added: soc2012/tzabal/server-side/akcrs-website/akcrswebsite/views.py ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ soc2012/tzabal/server-side/akcrs-website/akcrswebsite/views.py Sat Aug 25 19:55:46 2012 (r240850) @@ -0,0 +1,186 @@ +import hashlib + +from pyramid.httpexceptions import HTTPForbidden +from pyramid.httpexceptions import HTTPFound +from pyramid.httpexceptions import HTTPNotFound +from pyramid.security import authenticated_userid +from pyramid.security import forget +from pyramid.security import remember +from pyramid.view import view_config +from sqlalchemy.exc import DBAPIError + +from .models import DBSession, User, Bug, Report + + +@view_config(route_name='index', renderer='index.mako') +def index(request): + logged_in = authenticated_userid(request) + return {'logged_in': logged_in} + + +@view_config(route_name='login', renderer='login.mako') +def login(request): + logged_in = authenticated_userid(request) + if logged_in: + goto = request.route_url('index') + return HTTPFound(location=goto) + + if request.method == 'POST': + email = request.POST.get('email') + password = request.POST.get('password') + + if email and password: + query = DBSession.query(User).filter(User.email == email) + try: + user = query.one() + except: + pass # either no such email in db or more than 2 times in db! + else: + hashobj = hashlib.sha256() + hashobj.update(password) + hashpass = hashobj.hexdigest() + if hashpass == user.password: + goto = request.route_url('index') + headers = remember(request, email) + return HTTPFound(location=goto, headers=headers) + + return {'failed_attempt': True} + + return {'failed_attempt': False, 'logged_in': logged_in} + + +@view_config(route_name='logout') +def logout(request): + logged_in = authenticated_userid(request) + goto = request.route_url('index') + if not logged_in: + return HTTPFound(location=goto) + headers = forget(request) + return HTTPFound(location=goto, headers=headers) + + +@view_config(route_name='account', renderer='account.mako') +def account(request): + logged_in = authenticated_userid(request) + return {'logged_in': logged_in} + +@view_config(route_name='change_password', renderer='change_password.mako') +def change_password(request): + logged_in = authenticated_userid(request) + goto = request.route_url('index') + if not logged_in: + # change it to HTTPForbidden + return HTTPFound(location=goto) + + result = False + if request.method == 'POST': + curr = request.POST.get('current_password') + new1 = request.POST.get('new_password_1') + new2 = request.POST.get('new_password_2') + + if curr and new1 and new2: + if new1 == new2: + query = DBSession.query(User).filter(User.email == logged_in) + try: + user = query.one() + except: + pass # either no such email in db or more than 2 times in db! + else: + hashcurr = hashlib.sha256() + hashcurr.update(curr) + if user.password == hashcurr.hexdigest(): + hashnew = hashlib.sha256() + hashnew.update(new1) + user.password = hashnew.hexdigest() + DBSession.flush() + result = True + + return {'result': result, 'logged_in': logged_in} + + +@view_config(route_name='reports', renderer='reports.mako') +def reports(request): + logged_in = authenticated_userid(request) + reports = DBSession.query(Report).filter(Report.confirmed == True).all() + return {'reports': reports, 'logged_in': logged_in} + + +@view_config(route_name='report', renderer='report.mako') +def report(request): + logged_in = authenticated_userid(request) + is_developer = None + if logged_in: + user = DBSession.query(User).filter(User.email == logged_in).one() + is_developer = user.is_developer + + id = request.matchdict['id'] + query = DBSession.query(Report).filter(Report.confirmed == True, Report.id == id) + report = query.one() + + # To have the email address of the submitter + query = DBSession.query(User).filter(User.id == report.user_id) + user = query.one() + + return {'report': report, 'user': user, 'logged_in': logged_in, 'is_developer': is_developer} + + +@view_config(route_name='evaluate_report', renderer='evaluate_report.mako') +def evaluate_report(request): + logged_in = authenticated_userid(request) + return {'logged_in': logged_in} + + +@view_config(route_name='bugs', renderer='bugs.mako') +def bugs(request): + logged_in = authenticated_userid(request) + bugs = DBSession.query(Bug).filter(Bug.reported > 0).all() + return {'bugs': bugs, 'logged_in': logged_in} + + +@view_config(route_name='bug', renderer='bug.mako') +def bug(request): + logged_in = authenticated_userid(request) + is_developer = None + if logged_in: + user = DBSession.query(User).filter(User.email == logged_in).one() + is_developer = user.is_developer + + id = request.matchdict['id'] + + # All the data related to the requested bug + # A bug is considered valid when it is reported from at least one report + # A bug can have reported equals to zero if the report that refers to it + # is unconfirmed. + query = DBSession.query(Bug).filter(Bug.reported > 0, Bug.id == id) + bug = query.one() + + # The reports that refer to the requested bug + query = DBSession.query(Report).filter(Report.bug_id == id, Report.confirmed == True) + reports = query.all() + return {'bug': bug, 'reports': reports, 'logged_in': logged_in, 'is_developer': is_developer} + + +@view_config(route_name='change_bugstate', renderer='change_bugstate.mako') +def change_bugstate(request): + logged_in = authenticated_userid(request) + failed_attempt = True + id = request.matchdict['id'] + + is_developer = None + if logged_in: + user = DBSession.query(User).filter(User.email == logged_in).one() + is_developer = user.is_developer + else: + # change it to HTTPForbidden + HTTPFound(location=request.route_url('index')) + + if request.method == 'POST': + newstate = request.POST.get('bugstate') + if newstate: + query = DBSession.query(Bug).filter(Bug.reported > 0, Bug.id == id) + bug = query.one() + bug.state = newstate + DBSession.flush() + failed_attempt = False + + return {'failed_attempt': failed_attempt, 'is_developer': is_developer, 'logged_in': logged_in} \ No newline at end of file Added: soc2012/tzabal/server-side/akcrs-website/development.ini ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ soc2012/tzabal/server-side/akcrs-website/development.ini Sat Aug 25 19:55:46 2012 (r240850) @@ -0,0 +1,58 @@ +[app:main] +use = egg:akcrs-website + +pyramid.reload_templates = true +pyramid.debug_authorization = false +pyramid.debug_notfound = false +pyramid.debug_routematch = false +pyramid.default_locale_name = en +pyramid.includes = + pyramid_debugtoolbar + pyramid_tm + +sqlalchemy.url = postgresql+psycopg2://username:password@host/database +mako.directories = akcrswebsite:templates + +[server:main] +use = egg:waitress#main +host = 0.0.0.0 +port = 6543 + +# Begin logging configuration + +[loggers] +keys = root, akcrswebsite, sqlalchemy + +[handlers] +keys = console + +[formatters] +keys = generic + *** DIFF OUTPUT TRUNCATED AT 1000 LINES ***