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
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
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
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, }
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
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
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
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
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
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
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
def identity(payload): user_id = payload['identity'] return User.find_by_id(user_id)
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
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)