Revision 907f15db

b/snf-astakos-app/astakos/im/functions.py
436 436
    except ProjectMembership.DoesNotExist:
437 437
        raise IOError(_(astakos_messages.NOT_MEMBERSHIP_REQUEST))
438 438

  
439
def checkAllowed(project, request_user):
440
    if request_user and \
441
        (not project.application.owner == request_user and \
442
            not request_user.is_superuser):
443
        raise PermissionDenied(_(astakos_messages.NOT_ALLOWED))
444

  
445
def checkAlive(project):
446
    if not project.is_alive:
447
        raise PermissionDenied(
448
            _(astakos_messages.NOT_ALIVE_PROJECT) % project.__dict__)
449

  
439 450
def accept_membership(project_application_id, user, request_user=None):
440 451
    """
441 452
        Raises:
......
446 457
    return do_accept_membership(project_id, user, request_user)
447 458

  
448 459
def do_accept_membership_checks(project, request_user):
449
    if request_user and \
450
        (not project.application.owner == request_user and \
451
            not request_user.is_superuser):
452
        raise PermissionDenied(_(astakos_messages.NOT_ALLOWED))
453
    if not project.is_alive:
454
        raise PermissionDenied(
455
            _(astakos_messages.NOT_ALIVE_PROJECT) % project.__dict__)
460
    checkAllowed(project, request_user)
461
    checkAlive(project)
456 462

  
457 463
    join_policy = project.application.member_join_policy
458 464
    if join_policy == CLOSED_POLICY:
......
461 467
    if project.violates_members_limit(adding=1):
462 468
        raise PermissionDenied(_(astakos_messages.MEMBER_NUMBER_LIMIT_REACHED))
463 469

  
464
def do_accept_membership(
465
        project_id, user, request_user=None, bypass_checks=False):
470
def do_accept_membership(project_id, user, request_user=None):
466 471
    project = get_project_for_update(project_id)
467

  
468
    if not bypass_checks:
469
        do_accept_membership_checks(project, request_user)
472
    do_accept_membership_checks(project, request_user)
470 473

  
471 474
    membership = get_membership_for_update(project, user)
472 475
    membership.accept()
......
494 497
    return do_reject_membership(project_id, user, request_user)
495 498

  
496 499
def do_reject_membership_checks(project, request_user):
497
    if request_user and \
498
        (not project.application.owner == request_user and \
499
            not request_user.is_superuser):
500
        raise PermissionDenied(_(astakos_messages.NOT_ALLOWED))
501
    if not project.is_alive:
502
        raise PermissionDenied(
503
            _(astakos_messages.NOT_ALIVE_PROJECT) % project.__dict__)
500
    checkAllowed(project, request_user)
501
    checkAlive(project)
504 502

  
505
def do_reject_membership(
506
        project_id, user, request_user=None, bypass_checks=False):
503
def do_reject_membership(project_id, user, request_user=None):
507 504
    project = get_project_for_update(project_id)
508

  
509
    if not bypass_checks:
510
        do_reject_membership_checks(project, request_user)
505
    do_reject_membership_checks(project, request_user)
511 506

  
512 507
    membership = get_membership_for_update(project, user)
513 508
    membership.reject()
......
534 529
    return do_remove_membership(project_id, user, request_user)
535 530

  
536 531
def do_remove_membership_checks(project, membership, request_user=None):
537
    if request_user and \
538
        (not project.application.owner == request_user and \
539
            not request_user.is_superuser):
540
        raise PermissionDenied(_(astakos_messages.NOT_ALLOWED))
541
    if not project.is_alive:
542
        raise PermissionDenied(
543
            _(astakos_messages.NOT_ALIVE_PROJECT) % project.__dict__)
544

  
545
def do_remove_membership(
546
        project_id, user, request_user=None, bypass_checks=False):
547
    project = get_project_for_update(project_id)
548

  
549
    if not bypass_checks:
550
        do_remove_membership_checks(project, request_user)
532
    checkAllowed(project, request_user)
533
    checkAlive(project)
551 534

  
552 535
    leave_policy = project.application.member_leave_policy
553 536
    if leave_policy == CLOSED_POLICY:
554 537
        raise PermissionDenied(_(astakos_messages.MEMBER_LEAVE_POLICY_CLOSED))
555 538

  
539
def do_remove_membership(project_id, user, request_user=None):
540
    project = get_project_for_update(project_id)
541
    do_remove_membership_checks(project, request_user)
542

  
556 543
    membership = get_membership_for_update(project, user)
557 544
    membership.remove()
558 545
    trigger_sync()
......
574 561
    return do_enroll_member(project_id, user, request_user)
575 562

  
576 563
def do_enroll_member(project_id, user, request_user=None):
564
    project = get_project_for_update(project_id)
565
    do_accept_membership_checks(project, request_user)
566

  
577 567
    membership = create_membership(project_id, user)
578
    return do_accept_membership(
579
        project_id, user, request_user, bypass_checks=True)
568
    membership.accept()
569
    trigger_sync()
570

  
571
    # TODO send proper notification
572
    return membership
580 573

  
581 574
def leave_project(project_application_id, user_id):
582 575
    """
......
588 581
    return do_leave_project(project_id, user_id)
589 582

  
590 583
def do_leave_project_checks(project):
591
    if not project.is_alive:
592
        m = _(astakos_messages.NOT_ALIVE_PROJECT) % project.__dict__
593
        raise PermissionDenied(m)
584
    checkAlive(project)
594 585

  
595 586
    leave_policy = project.application.member_leave_policy
596 587
    if leave_policy == CLOSED_POLICY:
597 588
        raise PermissionDenied(_(astakos_messages.MEMBER_LEAVE_POLICY_CLOSED))
598 589

  
599
def do_leave_project(project_id, user_id, bypass_checks=False):
590
def do_leave_project(project_id, user_id):
600 591
    project = get_project_for_update(project_id)
601

  
602
    if not bypass_checks:
603
        do_leave_project_checks(project)
592
    do_leave_project_checks(project)
604 593

  
605 594
    membership = get_membership_for_update(project, user_id)
606 595

  
......
623 612
    return do_join_project(project_id, user_id)
624 613

  
625 614
def do_join_project_checks(project):
626
    if not project.is_alive:
627
        m = _(astakos_messages.NOT_ALIVE_PROJECT) % project.__dict__
628
        raise PermissionDenied(m)
615
    checkAlive(project)
629 616

  
630 617
    join_policy = project.application.member_join_policy
631 618
    if join_policy == CLOSED_POLICY:
632 619
        raise PermissionDenied(_(astakos_messages.MEMBER_JOIN_POLICY_CLOSED))
633 620

  
634
def do_join_project(project_id, user_id, bypass_checks=False):
621
def do_join_project(project_id, user_id):
635 622
    project = get_project_for_update(project_id)
636

  
637
    if not bypass_checks:
638
        do_join_project_checks(project)
623
    do_join_project_checks(project)
639 624

  
640 625
    membership = create_membership(project, user_id)
641 626

  
......
715 700

  
716 701
def terminate(project_id):
717 702
    project = get_project_for_update(project_id)
718

  
719
    if not project.is_alive:
720
        m = _(astakos_messages.NOT_ALIVE_PROJECT) % project.__dict__
721
        raise PermissionDenied(m)
703
    checkAlive(project)
722 704

  
723 705
    project.terminate()
724 706
    trigger_sync()

Also available in: Unified diff