def db_update_task(task):
    if task["_id"] is not None:
        if "username" in session:
            username = session["username"]
            cur_user = User.get_by_username(username)
            if cur_user and cur_user.is_authorized_for_task(int(task["_id"].replace("task",""))):
                task_dict = None
                cfg_dict = None
                task_db_id = task["_id"].replace("task","")
                cur_task = Task.get_by_id(task_db_id)
                if cur_task:
                    cur_task._name = task["_title"]
                    cur_task.detail = task["_text"]
                    cur_task.save()
                    task_dict = cur_task.to_dict()
                    cur_cfg = ConfigTask.get_by_task_id(task_db_id)
                    if cur_cfg:
                        cur_cfg.color_id = int(task["color_id"])
                        cur_cfg.save()
                        cfg_dict = cur_cfg.to_dict()
                    if task_dict is not None and cfg_dict is not None:
                        task_dict.update(cfg_dict)
                        return json.dumps(task_dict)
    else:
        cur_task = Task(None, task["session_id"], "Default value", "", 0)
        cur_task.save()
        return cur_task.to_json()
    return json.dumps({})
def login():
    user_ins = json.loads(request.data)
    cur_user = User.get_by_username(user_ins["username"])
    if cur_user.is_password_valid(user_ins["password"]):
        session["username"] = user_ins["username"]
        return cur_user.to_json()
    else:
        return json.dumps({"Error Message":"Wrong username/password"})
def register():
    user_ins = json.loads(request.data)
    is_name_taken = User.get_by_username(user_ins["username"]) is not None
    if not is_name_taken:
        new_user = User(None, user_ins["username"], user_ins["password"], user_ins["email"], False)
        new_user.save()
        session["username"] = user_ins["username"]
        return new_user.to_json()
    else:
        return redirect(url_for("login_page"))
def new_session():
    if "username" in session:
        username = session["username"]
        cur_user = User.get_by_username(username)
        if cur_user:
            session_json = json.loads(request.data)
            new_session = TaskSession(None, session_json['session_name'])
            new_session.save()
            new_session.add_user(cur_user, new_session)
            return json.dumps({"_id":new_session._id, "name":new_session.name})
        else:
            return json.dumps({"Error Message":"Invalid session, please login"})
    else:
        return json.dumps({"Error Message":"Please login first"})
def get_sessions():
    if "username" in session:
        session_list = []
        username = session["username"]
        cur_user = User.get_by_username(username)
        session_ids = cur_user.get_my_sessions()
        for _id in session_ids:
            cur_session = TaskSession.get_by_id(_id)
            if cur_session:
                session_list.append({'_id':cur_session._id,'name':cur_session.name})
        return json.dumps({
            'sessions': session_list
        })
    else:
        return json.dumps({"Error Message":"Please login first"})
 def decorated_function(*args, **kwargs):
     if "username" in session:
         #debug
         print("User is logged in")
         #debug
         cur_user = User.get_by_username(session["username"])
         if cur_user:
             return f(*args, **kwargs)
         else:
             return redirect(url_for("login_page"))
     else:
         #debug
         print("User is not logged in")
         #debug
         return redirect(url_for("login_page"))