示例#1
0
 def get(self):
   user = users.get_current_user()
   authz = Authorize()
   if not authz.authorize():
     self.error(403)
     return
   class_id = self.request.get('class_id')
   class_key = ndb.Key('Class', int(class_id))
   the_class = class_key.get()
   the_class.id = the_class.key.id()
   date_ordinal = self.request.get('date')
   errmsg = self.request.get('errmsg')
   today_as_ordinal = self.today_as_ordinal(the_class.timezone)
   if not date_ordinal:
     date_ordinal = today_as_ordinal
   if int(date_ordinal) == today_as_ordinal:
     today = True
   else:
     today = False
   date_struct = datetime.date.fromordinal(int(date_ordinal))
   attendance_key = ndb.Key('Class', int(class_id), 'Attendance', int(date_ordinal))
   attendance = attendance_key.get()
   students = ndb.get_multi(the_class.enrolled)
   students.sort(key= lambda x: x.first_name, reverse=False)
   for student in students:
     student.present = False
     student.hours = the_class.default_hours
     student.id = student.key.id()
     if attendance:
       for student_present in attendance.attending:
         if student_present.student == student.key:
           student.present = True
           student.hours = student_present.hours
           break
   
   school = namespace_manager.google_apps_namespace()
   if not school: school = 'Test school'
   template_values = { 'students': students,
                       'date_ordinal': date_ordinal,
                       'today': today,
                       'class': the_class,
                       'school': school,
                       'date_struct': date_struct,
                       'username': authz.get_name(),
                       'errmsg': errmsg }
   path = os.path.join(os.path.dirname(__file__), 'templates/students.html')
   self.response.out.write(template.render(path, template_values))
示例#2
0
 def get(self):
   authz = Authorize()
   if not authz.authorize():
     self.error(403)
     return
   query = Class.query()
   # Max classes that can be handled is 50 per school
   classes = query.fetch(50)
   for the_class in classes:
     the_class.id = the_class.key.id()
   school = namespace_manager.google_apps_namespace()
   if not school: school = 'Test school'
   template_values = { 'classes': classes,
                       'school': school,
                       'username': authz.get_name(),
                       'logout': users.create_logout_url("/") }
   path = os.path.join(os.path.dirname(__file__), 'templates/classes.html')
   self.response.out.write(template.render(path, template_values))
示例#3
0
  def get(self):
    user = users.get_current_user()
    authz = Authorize()
    if not authz.authorize():
      self.error(403)
      return
    self.response.headers['Content-Type'] = 'text/plain'
    class_id = self.request.get('class_id')
    class_key = ndb.Key('Class', int(class_id))
    the_class = class_key.get()
    enrolled = the_class.enrolled
    all_students = {}
    self.response.out.write(',')
    for student_key in enrolled:
      if student_key not in all_students:
        the_student = student_key.get()
        all_students[student_key] = the_student
        self.response.out.write('%s %s,' % (the_student.first_name, the_student.last_name))
    self.response.out.write('\n')

    qry = Attendance.query(ancestor=class_key).order(Attendance.key)
    attendance = qry.fetch(200)
    for the_attendance in attendance:
      the_attendance_key = the_attendance.key
      date_ordinal = the_attendance_key.id()
      date_struct = datetime.date.fromordinal(int(date_ordinal))
      date_str = date_struct.isoformat()
      self.response.out.write('%s,' % (date_str))
      students = the_attendance.attending
      attending_students = {}
      for student in students:
        student_key = student.student
        attending_students[student_key] = student.hours
      for the_enrolled in enrolled:
        if the_enrolled in attending_students:
          output = attending_students[the_enrolled]
          if not output: output = 1
          self.response.out.write('%s,' % (output))
        else:
          self.response.out.write(',')
      self.response.out.write('\n')
示例#4
0
def get_all_details():
    try:
        if request.method == "POST":
            jwt_token = request.headers["token"]
            driver_number = request.headers["number"]
            stat, tok = Authorize.verify_jwt(driver_number, jwt_token)
            if stat == 0:
                raise ValueError("Not authorized")

            logging.debug("incoming POST request: " + str(request.form))
            response = Details.get_all(driver_number)
            logging.debug("getalldetails returned:\n" + str(response))
            return response
    except RuntimeError as e:
        logging.critical("failure in v1/getalldetails with error: " + str(e))
        return default_error
示例#5
0
def update_vehicle():
    try:
        if request.method == "POST":
            jwt_token = request.headers["token"]
            driver_number = request.headers["number"]
            stat, tok = Authorize.verify_jwt(driver_number, jwt_token)
            if stat == 0:
                raise ValueError("Not authorized")

            logging.debug("incoming POST request: " + str(request.form))
            driver_vehicle = request.form["vehicle"]
            response = Vehicle.update_vehicle(driver_number, driver_vehicle)
            logging.debug("updateVehicle returned:\n" + str(response))
            return response
    except RuntimeError as e:
        logging.critical("failure in v1/updateVehicle with error: " + str(e))
        return default_error
示例#6
0
def get_distance():
    try:
        if request.method == "GET":
            jwt_token = request.headers["token"]
            stat, tok = Authorize.verify_jwt(jwt_token)
            if stat == 0:
                raise ValueError("Not authorized")
            if len(tok) > 0:
                logging.critical(
                    "failure in v1/bookingPath with token expired: ")
                return token_expiry_error
            user_number = request.args["number"]
            response = Book.path(user_number)
            response = json.dumps(response)
            response = make_response(response)
            return response
    except RuntimeError as e:
        logging.critical("failure in v1/bookingPath with error: " + str(e))
        return default_error
示例#7
0
def reject():
    try:
        jwt_token = request.headers["token"]
        stat, tok = Authorize.verify_jwt(jwt_token)
        if stat == 0:
            raise ValueError("Not authorized")
        if request.method == "POST":
            driver_number = request.args["number"]
            response = Book.reject(driver_number)
            if len(tok) > 0:
                response["data"]["tokenStatus"] = "new"
                response["data"]["token"] = tok
            else:
                response["data"]["tokenStatus"] = "same"
                response["data"]["token"] = jwt_token
            response = json.dumps(response)
            return response
    except RuntimeError as e:
        logging.critical("failure in v1/reject with error: " + str(e))
        return default_error
示例#8
0
def cancel():
    try:
        if request.method == "POST":
            jwt_token = request.headers["token"]
            stat, tok = Authorize.verify_jwt(jwt_token)
            if stat == 0:
                raise ValueError("Not authorized")
            if len(tok) > 0:
                logging.critical("failure in v1/cancel with token expired: ")
                return token_expiry_error
            user_number = request.form["number"]
            booking_id = request.form["bookingId"]
            response = Book.cancel_booking(user_number, booking_id)
            response = json.dumps(response)
            with app.app_context():
                response = make_response(response)
            return response
    except RuntimeError as e:
        logging.critical("failure in v1/cancel with error: " + str(e))
        return default_error
示例#9
0
def book():
    try:
        if request.method == "POST":
            jwt_token = request.headers["token"]
            stat, tok = Authorize.verify_jwt(jwt_token)
            if stat == 0:
                raise ValueError("Not authorized")
            if len(tok) > 0:
                logging.critical("failure in v1/book with token expired: ")
                return token_expiry_error

            if "fromLatitude" in request.form:
                user_number = request.form["number"]
                from_latitude = request.form["fromLatitude"]
                from_longitude = request.form["fromLongitude"]
                to_latitude = request.form["toLatitude"]
                to_longitude = request.form["toLongitude"]
                seats = request.form["seats"]
                response, s = Book.find_drivers(user_number, from_longitude,
                                                from_latitude, to_longitude,
                                                to_latitude, seats)
                response = json.dumps(response)
                if s == 1:
                    t = threading.Thread(name="create booking",
                                         target=Book.create_booking,
                                         args=(
                                             user_number,
                                             from_longitude,
                                             from_latitude,
                                             to_longitude,
                                             to_latitude,
                                             seats,
                                         ))
                    t.setDaemon(True)
                    t.start()
                with app.app_context():
                    response = make_response(response)
                return response
    except RuntimeError as e:
        logging.critical("failure in v1/book with error: " + str(e))
        return default_error
示例#10
0
    def __init__(self,
                 league_id,
                 year,
                 username=None,
                 password=None,
                 swid=None,
                 espn_s2=None):
        self.league_id = league_id
        self.year = year
        if username and password and not (swid or espn_s2):
            client = Authorize(username, password)
            self.swid = client.swid
            self.espn_s2 = client.espn_s2
        else:
            self.username = username
            self.password = password
            self.swid = swid
            self.espn_s2 = espn_s2

        buildLeague(self)
        return
示例#11
0
def start_trip():
    try:
        jwt_token = request.headers["token"]
        stat, tok = Authorize.verify_jwt(jwt_token)
        if stat == 0:
            raise ValueError("Not authorized")
        if request.method == "POST":
            user_number = request.args["userNumber"]
            booking_id = request.args["bookingId"]
            response = Book.start_trip(user_number, booking_id)
            if len(tok) > 0:
                response["data"]["tokenStatus"] = "new"
                response["data"]["token"] = tok
            else:
                response["data"]["tokenStatus"] = "same"
                response["data"]["token"] = jwt_token
            response = json.dumps(response)
            return response
    except RuntimeError as e:
        logging.critical("failure in v1/startTrip with error: " + str(e))
        return default_error
示例#12
0
import predict
import predict_info
import precisao
from hasher import digest, hash_all
from authorize import Authorize

app = Flask(__name__)
app.config['SECRET_KEY'] = os.urandom(12)
app.config['JWT_BLACKLIST_ENABLED'] = True
app.config['JWT_BLACKLIST_STORE'] = simplekv.memory.DictStore()
app.config['JWT_BLACKLIST_TOKEN_CHECKS'] = 'all'
app.config['JWT_ACCESS_TOKEN_EXPIRES'] = datetime.timedelta(minutes=5)

jwt = JWTManager(app)

auth = Authorize("INSA")
completion = False


#CORS headers
@app.after_request
def add_headers(response):
    response.headers.add('Access-Control-Allow-Origin', '*')
    response.headers.add(
        'Access-Control-Allow-Headers',
        'Content-Type, Access-Control-Allow-Headers, Authorization, X-Requested-With'
    )
    return response


#Authentication
示例#13
0
import consulta_db
import os
from authorize import Authorize
from hasher import hash_all

app = Flask(__name__)
app.config['SECRET_KEY'] = os.urandom(12)
app.config['JWT_BLACKLIST_ENABLED'] = True
app.config['JWT_BLACKLIST_STORE'] = simplekv.memory.DictStore()
app.config['JWT_BLACKLIST_TOKEN_CHECKS'] = 'all'
app.config['JWT_ACCESS_TOKEN_EXPIRES'] = datetime.timedelta(days=365)

jwt = JWTManager(app)

realm = "DESCUBRA"
auth = Authorize(realm)
completion = False


#CORS headers
@app.after_request
def add_headers(response):
    response.headers.add('Access-Control-Allow-Origin', '*')
    response.headers.add(
        'Access-Control-Allow-Headers',
        'Content-Type, Access-Control-Allow-Headers, Authorization, X-Requested-With'
    )
    return response


#Authentication
示例#14
0
import aux_actions_db
import api_riso
from hasher import digest, hash_all
from authorize import Authorize

app = Flask(__name__)
app.config['SECRET_KEY'] = os.urandom(12)
app.config['JWT_BLACKLIST_ENABLED'] = True
app.config['JWT_BLACKLIST_STORE'] = simplekv.memory.DictStore()
app.config['JWT_BLACKLIST_TOKEN_CHECKS'] = 'all'
app.config['JWT_ACCESS_TOKEN_EXPIRES'] = datetime.timedelta(minutes=5)

jwt = JWTManager(app)

auth = Authorize("RISO")
completion = False


#CORS headers
@app.after_request
def add_headers(response):
    response.headers.add('Access-Control-Allow-Origin', '*')
    response.headers.add(
        'Access-Control-Allow-Headers',
        'Content-Type, Access-Control-Allow-Headers, Authorization, X-Requested-With'
    )
    return response


#Authentication
示例#15
0
  def get(self):
    # authorize web requests
    user = users.get_current_user()
    authz = Authorize()
    if not authz.authorize():
      self.error(403)
      return
    # get the form input
    yes = int(self.request.get('yes'))
    class_id = self.request.get('class_id')
    student_id = self.request.get('student_id')
    if student_id:
      student_key = ndb.Key('Student', int(student_id))
      student = student_key.get()
    date_ordinal = self.request.get('date')
    date_struct = datetime.date.fromordinal(int(date_ordinal))
    class_key = ndb.Key('Class', int(class_id))
    the_class = class_key.get()
    hours = self.request.get('hours')
    today_as_ordinal = self.today_as_ordinal(the_class.timezone)
    # can only edit attendance for today
    attendance = None
    if int(date_ordinal) == today_as_ordinal:
      attendance_key = ndb.Key('Class', int(class_id), 'Attendance', int(date_ordinal))
      attendance = attendance_key.get()
      attendance_already_exists = False
      try:
        if attendance:
          attendance_already_exists = True
          if yes:
            if student_id:
              self.add_student(student_key, hours, attendance.attending)
            else:
              students = ndb.get_multi(the_class.enrolled)
              for student in students:
                self.add_student(student.key, hours, attendance.attending)
          else:
            self.remove_student(student_key, attendance.attending)
        else:
          if yes:
            attendance = Attendance(key=attendance_key, attending=[])
            if student_id:
              self.add_student(student_key, hours, attendance.attending)
            else:
              students = ndb.get_multi(the_class.enrolled)
              for student in students:
                self.add_student(student.key, hours, attendance.attending)

      except ValueError:
        # hours was not a float
        self.redirect('/students?class_id=%s&date=%s&errmsg=Invalid%%20value%%20for%%20hours' % (class_id, date_ordinal))
        return
    if attendance:
      if yes:
        status = "present"
      else:
        status = "absent"
      logging.info('Change by %s: %s %s marked as %s for %s (hours: %s)' % 
                   (authz.get_name(), student.first_name, student.last_name, status, the_class.name, hours))
      attendance.put()
    elif attendance_already_exists:
      attendance_key.delete()
    self.redirect('/students?class_id=%s&date=%s' % (class_id, date_ordinal))