Beispiel #1
0
    def post(self):
        user = get_jwt_identity()
        # claims = get_jwt_claims()
        # if not claims['manager']:
        #     return {'msg': 'Manager rights needed'}, 403

        data = ProjectRes.parser.parse_args()
        print(data['project_members'])
        if Project.find_by_project_name(data['project_name']):
            return {'msg': 'Project already exists'}, 400

        proj = Project(id=None, **data, owner=user)
        proj.members.append(User.find_by_id(user))
        err = []
        resp = {'msg': 'Project created successfully', 'err': err}
        if data['project_members']:
            for member in data['project_members']:
                mem = User.find_by_username(member['username'])
                if mem:
                    proj.members.append(mem)
                else:
                    err.append(member['username'])
        proj.create_project()

        return resp, 201
Beispiel #2
0
    def delete(self):
        logged_in_user_id = get_jwt_identity()
        logged_in_user = User.find_by_id(logged_in_user_id)

        parser = reqparse.RequestParser()
        parser.add_argument('id', type=str, required=True,
                            help='ID Required')
        data = parser.parse_args()
        tsk = Task.find_by_taskID(data['id'])
        if tsk and logged_in_user.has_project(tsk.project):
            assigned_user = User.find_by_id(tsk.user_id)
            if (assigned_user is not logged_in_user):
                return {'msg': 'Not a task assignee'}, 403
            tsk.delete_task()
            return {'msg': 'Task deleted successfully'}, 202
        return {'msg': 'Task not found in your account'}, 404
Beispiel #3
0
 def post(self):
     data = TaskRes.parser.parse_args()
     logged_in_user_id = get_jwt_identity()
     logged_in_user = User.find_by_id(logged_in_user_id)
     proj = Project.find_by_project_id(data['project_id'])
     assigned_user = User.find_by_id(data['user_id'])
     # if Task.find_by_taskID(data['id']):
     #     return {'msg': 'Duplicate task'}, 400
     if proj:
         if (not assigned_user) or (assigned_user not in proj.members):
             return {'msg': 'Not a member of this project'}, 403
         if logged_in_user.has_project(proj):
             Task(**data).save_to_db()
             if (data['ref_image']):
                 data['ref_image'].save("assets/Projects/" + data['ref_image'].filename)
             return {'msg': 'Task created successfully'}, 200
     return {'msg': 'No such project found in your account'}, 404
Beispiel #4
0
 def json(self):
     user = User.find_by_id(self.user_id)
     username = user.basicDetails()['username'] if user else None
     return {'id': self.id,
             'subject': self.subject,
             'description': self.description,
             'status': self.status,
             'project_id': self.project_id,
             'assigned_user': username,
             'user_id': self.user_id,
             }
Beispiel #5
0
 def get(self, project_id):
     logged_in_user_id = get_jwt_identity()
     logged_in_user = User.find_by_id(logged_in_user_id)
     project = Project.find_by_project_id(project_id)
     if not project:
         return {'msg': 'Project not found'}, 404
     if not logged_in_user_id:
         return {'msg': 'User not found'}, 404
     if logged_in_user.has_project(project):
         members = [member.basicDetails() for member in project.members]
         return {'members': members}, 200
     return {'msg': 'Project not found in your account'}, 404
Beispiel #6
0
    def post(self):
        logged_in_user_id = get_jwt_identity()
        logged_in_user = User.find_by_id(logged_in_user_id)
        # claims = get_jwt_claims()
        # if not claims['manager']:
        #     return {'msg': 'Manager rights needed'}, 403

        data = ProjectAllocate.parser.parse_args()
        proj = Project.find_by_project_id(data['project_id'])
        user = User.find_by_id(data['user_id'])

        if not user:
            return {'msg': 'User not found'}, 404
        if not proj:
            return {'msg': 'Project not found'}, 404
        if logged_in_user.has_project(proj):
            proj.members.append(user)
            proj.create_project()
            return {'msg': 'Members added to project'}, 200
        # Project(id=None, **data, owner=user).create_project()
        return {'msg': 'Project not found in your account'}, 404
Beispiel #7
0
 def put(self):
     parser = copy.deepcopy(TaskRes.parser)
     parser.add_argument('id', type=str, required=True,
                         help='ID Required')
     data = parser.parse_args()
     logged_in_user_id = get_jwt_identity()
     logged_in_user = User.find_by_id(logged_in_user_id)
     assigned_user = User.find_by_id(data['user_id'])
     tsk = Task.find_by_taskID(data['id'])
     proj = tsk.project if tsk else None
     if proj and tsk:
         if (not assigned_user or (assigned_user not in proj.members)):
             return {'msg': 'Not a member of this project'}, 403
         if logged_in_user.has_project(tsk.project):
             tsk.subject = data['subject']
             tsk.description = data['description']
             tsk.status = Task.validateStatus(data['status'])
             tsk.user_id = data['user_id']
             tsk.save_to_db()
             if (data['ref_image']):
                 data['ref_image'].save(f"assets/Projects/{tsk.id}" + data['ref_image'].filename)
             return {'msg': 'Task updated successfully'}, 200
     return {'msg': 'No such task found in this project'}, 404
Beispiel #8
0
    def get(self):
        parser = reqparse.RequestParser()
        parser.add_argument('project_id', type=int, required=True,
                            help='Project ID Required')
        data = parser.parse_args()
        logged_in_user_id = get_jwt_identity()
        logged_in_user = User.find_by_id(logged_in_user_id)
        proj = Project.find_by_project_id(data['project_id'])
        shared_filter = {'project_id': data['project_id']}

        if logged_in_user.has_project(proj):
            resp = {}
            tsks = []
            for task in Task.query.filter_by(status=TaskStatus.BLOCKED,
                                             **shared_filter):
                tsks.append(
                    task.json()
                )
            resp['blocked'] = tsks

            tsks = []
            for task in Task.query.filter_by(status=TaskStatus.TODO,
                                             **shared_filter):
                tsks.append(
                    task.json()
                )
            resp['to_do'] = tsks

            tsks = []
            for task in Task.query.filter_by(status=TaskStatus.INPROGRESS,
                                             **shared_filter):
                tsks.append(
                    task.json()
                )
            resp['in_progress'] = tsks

            tsks = []
            for task in Task.query.filter_by(status=TaskStatus.DONE,
                                             **shared_filter):
                tsks.append(
                    task.json()
                )
            resp['done'] = tsks
            return resp, 200
        return {'msg': 'No such project found in your account'}, 404
Beispiel #9
0
    def delete(self):
        logged_in_user_id = get_jwt_identity()
        logged_in_user = User.find_by_id(logged_in_user_id)
        # claims = get_jwt_claims()
        # if not claims['admin']:
        #     return {'msg': 'Admin rights needed'}, 403

        parser = reqparse.RequestParser()
        parser.add_argument('id', type=str, required=True,
                            help='Project ID Required')
        data = parser.parse_args()

        project = Project.find_by_project_id(data['id'])
        if logged_in_user is not project.owner:
            return {'msg': 'You can not delete this project'}, 403
        if project:
            project.delete_project()
            return {'msg': 'Project deleted successfully'}, 200
        return {'msg': 'No such project found in your account'}, 404
Beispiel #10
0
    def get(self):
        user = get_jwt_identity()
        projects = []
        resp = {}
        # if not user:
        #     for project in Project.query.all():
        #         projects.append(
        #             project.project_name
        #             # project.json()
        #         )
        #         resp['msg'] = 'Login for more details'
        # else:
        # print(User.query.filter_by(id=user).first().curr_projects.all())
        for project in User.find_by_id(user).curr_projects:
            projects.append(
                project.json()
            )

        resp['Projects'] = projects
        return resp, 200
Beispiel #11
0
 def put(self):
     logged_in_user_id = get_jwt_identity()
     logged_in_user = User.find_by_id(logged_in_user_id)
     parser = reqparse.RequestParser()
     parser.add_argument('id', type=str, required=True,
                         help='Project ID Required')
     parser.add_argument('project_desc', type=str, required=True,
                         help='Project Description Required')
     parser.add_argument('project_members', type=dict, required=False,
                         action="append", help='Project Members are Required')
     data = parser.parse_args()
     project = Project.find_by_project_id(data['id'])
     if project:
         if logged_in_user is not project.owner:
             return {'msg': 'You can not update this project'}, 403
         project.editMembers(data['project_members'])
         project.project_desc = data['project_desc']
         project.create_project()
         return {'msg': 'Project updated successfully'}, 200
     return {'msg': 'No such project found in your account'}, 404
Beispiel #12
0
def identity(payload):
    user_id = payload['identity']
    return User.find_by_id(user_id)
Beispiel #13
0
def add_claims_to_jwt(identity):
    claims = {}
    # claims['logged_in_user_id'] = identity
    claims['admin'] = User.find_by_id(identity).is_user_admin()
    claims['manager'] = User.find_by_id(identity).is_user_manager()
    return claims
Beispiel #14
0
def identity(payload):  #once a jwt is obtained, then in next sent it in next request to identity
    user_id = payload['identity']
    return User.find_by_id(user_id)