Example #1
0
def notifyAdminsOfMembershipCanceled(project, user):

    subject = "[%s] Membership Canceled" % project.short_name
    message = "User %s has decided to cancel his/her membership in project %s." % (user.username, project.short_name)
    
    for admin in list(project.getAdminGroup().user_set.all())+list(getSiteAdministrators()):
        notify(admin, subject, message)
def notifyAdmins(group_name, user_id, incomingRequest):

    user = get_object_or_404(User, pk=user_id)

    subject = "'%s' Data Access Request" % group_name
    message = "User '%s' has requested membership in group '%s'" % (
        user.get_full_name(), group_name)
    message += '\nPlease process the request at: %s' \
               % incomingRequest.build_absolute_uri(reverse('ac_process',
                                                            kwargs={'group_name': group_name, 'user_id': user.id}))

    # user attributes
    message += "\n"
    message += "\nFirst Name: %s" % user.first_name
    message += "\nLast Name: %s" % user.last_name
    message += "\nUser Name: %s" % user.username
    message += "\nEmail: %s" % user.email

    # openid
    message += "\nOpenID is: %s" % user.profile.openid()

    # user profile attributes
    profile = UserProfile.objects.get(user=user)
    message += "\nInstitution: %s" % profile.institution
    message += "\nDepartment: %s" % profile.department
    message += "\nCity: %s" % profile.city
    message += "\nState: %s" % profile.state
    message += "\nCountry: %s" % profile.country

    for admin in getSiteAdministrators():
        notify(admin, subject, message)
Example #3
0
def notifyAdmins(group_name, user_id, incomingRequest):

    user = get_object_or_404(User, pk=user_id)

    subject = "'%s' Data Access Request" % group_name
    message = "User '%s' has requested membership in group '%s'" % (user.get_full_name(), group_name)
    message += "\nPlease process the request at: %s" % incomingRequest.build_absolute_uri(
        reverse("ac_process", kwargs={"group_name": group_name, "user_id": user.id})
    )

    # user attributes
    message += "\n"
    message += "\nFirst Name: %s" % user.first_name
    message += "\nLast Name: %s" % user.last_name
    message += "\nUser Name: %s" % user.username
    message += "\nEmail: %s" % user.email

    # openid
    message += "\nOpenID is: %s" % user.profile.openid()

    # user profile attributes
    profile = UserProfile.objects.get(user=user)
    message += "\nInstitution: %s" % profile.institution
    message += "\nDepartment: %s" % profile.department
    message += "\nCity: %s" % profile.city
    message += "\nState: %s" % profile.state
    message += "\nCountry: %s" % profile.country

    for admin in getSiteAdministrators():
        notify(admin, subject, message)
Example #4
0
def notifyAdminsOfUserRegistration(user,request):

    subject = "New User Registration"

    profile_url = reverse('user_profile_redirect', kwargs={'user_id': user.id})  # go to the right node
    profile_url = request.build_absolute_uri(profile_url)

    message = "User %s has created a new account." % user.get_full_name()
    message += "\nView home node profile at: %s" % profile_url

    # openid
    message += "\n\nOpenID is: %s" % user.profile.openid()

    # user attributes
    message += "\n\nFirst Name: %s" % user.first_name
    message += "\nLast Name: %s" % user.last_name
    message += "\nUser Name: %s" % user.username
    message += "\nEmail: %s" % user.email

    # user profile attributes
    profile = UserProfile.objects.get(user=user)
    message += "\n\nInstitution: %s" % profile.institution
    message += "\nDepartment: %s" % profile.department
    message += "\nCity: %s" % profile.city
    message += "\nState: %s" % profile.state
    message += "\nCountry: %s" % profile.country
    message += "\nSubscribe to COG email list? %s" % profile.subscribed
    message += "\nResearch Interests: %s" % profile.researchInterests
    message += "\nResearch Keywords: %s" % profile.researchKeywords

    for admin in getSiteAdministrators():
        notify(admin, subject, message)
Example #5
0
def notifyUserOfMembershipSelfCanceled(project, user):
    
    subject = "[%s] Membership Canceled" % project.short_name
    message = "As you requested, your membership in the ESGF-CoG Project: %s has been canceled." \
              "\nPlease contact the [%s] project administrators if you did not " \
              "request this action." % project.short_name
    notify(user, subject, message)
Example #6
0
def notifyUserOfGroupRemoval(project, group, user):
    
    subject = "[%s] Permissions Group Modification" % project.short_name
    message = "Greetings %s. Your permissions in the ESGF-CoG Project: %s have changed." \
              "\nYou have been removed from the %s permissions group." % (user.first_name, project.short_name,
                                                                         _getGroupDescription(group.name) )
    notify(user, subject, message)
Example #7
0
def notifyAdminsOfMembershipRequest(project, user, request):
    url = reverse('membership_list_requested', kwargs={'project_short_name': project.short_name.lower()})
    url = request.build_absolute_uri(url)
    subject = "[%s] Membership Request" % project.short_name
    message = "User: %s has requested to join your ESGF-CoG Project: %s." \
              "\nYou may process this membership request at: %s." \
              % (user.username, project.short_name, url)
    for admin in list(project.getAdminGroup().user_set.all())+list(getSiteAdministrators()):
        notify(admin, subject, message)
Example #8
0
def notifyAuthorOfProjectApproval(project, request):
    if project.author:
        url = project.home_page_url()
        url = request.build_absolute_uri(url)
        subject = "New Project Registration Confirmation"
        message = "Congratulations, the project you requested: %s has been approved by the node administrator(s).\n" \
                  "The project home page is: %s" \
                  % (project.short_name, url)
        notify(project.author, subject, message)
Example #9
0
def notifyUser(group_name, user, permissions):

    subject = "'%s' Data Access Notification" % group_name
    message = "Your permissions in group '%s' have been updated" % group_name

    for (role, status) in permissions.items():
        message += "\nRole: %s status=%s" % (role, status)

    notify(user, subject, message)
Example #10
0
def notifyUser(group_name, user, permissions):

    subject = "'%s' Data Access Notification" % group_name
    message = "Your permissions in group '%s' have been updated" % group_name

    for (role, status) in permissions.items():
        message += "\nRole: %s status=%s" % (role, status)

    notify(user, subject, message)
Example #11
0
def notifyAuthorOfProjectApproval(project, request):
    if project.author:
        url = project.home_page_url()
        url = request.build_absolute_uri(url)
        subject = "New Project Registration Confirmation"
        message = "Congratulations, the project you requested: %s has been approved by the node administrator(s).\n" \
                  "The project home page is: %s" \
                  % (project.short_name, url)
        notify(project.author, subject, message)
Example #12
0
def notifyUserOfMembershipGranted(project, group, user, request):
    
    subject = "[%s] Membership Granted" % project.short_name
    message = "Welcome %s! You have been granted membership in the ESGF-CoG Project: %s," \
              " and assigned to the %s permissions group." % (user.first_name, project.short_name, _getGroupDescription(group.name))
    
    url = project.home_page_url()
    url = request.build_absolute_uri(url)

    message += "\nPlease login and collaborate with us at: %s." % url
    notify(user, subject, message)
Example #13
0
def notifyUserOfRegistration(user):
    
    subject = "CoG Account Creation"
    message = "Thank you for creating a new ESGF-CoG account."
    message += "\n"
    message += "\nYour User Name is: %s" % user.username
    message += "\nYour OpenID is: %s" % user.profile.openid()
    message += "\n"
    message += "\nPlease note that you will need your OpenID to login."
    message += "\n"
    message += "\nCoG Tutorials: https://www.earthsystemcog.org/projects/cog/tutorials_web"
    message += "\n"
    message += "\nCoG Support: [email protected]"

    notify(user, subject, message)
Example #14
0
def notifySiteAdminsOfProjectRequest(project, request):
    
    url = reverse('project_update', kwargs={'project_short_name': project.short_name.lower()})
    url = request.build_absolute_uri(url)

    profile = reverse('user_profile_redirect', kwargs={'user_id': request.user.id})  # go to the right node
    profile = request.build_absolute_uri(profile)

    subject = "New Project Request"
    message = "Project Short Name: %s \n" \
              "Project Description: %s \n" \
              "Profile of Requester: %s \n" \
              "Home Site of Requester: %s \n" \
              "Process this Request: %s" % (project.short_name, project.description, profile,
                                            request.user.profile.site.name, url)
    for admin in getSiteAdministrators():
        notify(admin, subject, message)
Example #15
0
def notifySiteAdminsOfProjectRequest(project, request):

    url = reverse('project_update',
                  kwargs={'project_short_name': project.short_name.lower()})
    url = request.build_absolute_uri(url)

    profile = reverse('user_profile_redirect',
                      kwargs={'user_id':
                              request.user.id})  # go to the right node
    profile = request.build_absolute_uri(profile)

    subject = "New Project Request"
    message = "Project Short Name: %s \n" \
              "Project Description: %s \n" \
              "Profile of Requester: %s \n" \
              "Home Site of Requester: %s \n" \
              "Process this Request: %s" % (project.short_name, project.description, profile,
                                            request.user.profile.site.name, url)
    for admin in getSiteAdministrators():
        notify(admin, subject, message)
Example #16
0
File: forum.py Project: soay/COG
 def email(self, comment, content_object, request):
     
     thread = comment.content_object
     project = thread.getProject()
             
     # check project forum notification flag
     if project.forumNotificationEnabled:
     
         # build email
         user = comment.user
         
         subject = "[%s] Forum posting" % project.short_name
         # thread url: http://localhost:8000/projects/TestProject/thread/2/
         url = reverse('thread_detail', kwargs={ 'project_short_name':project.short_name.lower(), 'thread_id':thread.id })
         url = request.build_absolute_uri(url)        
         # specific comment url: http://localhost:8000/projects/TestProject/thread/2/?c=17
        
         # a) send plain text email
         #message = "User: %s\n Thread: %s\n Comment: %s\n" % (user, url, comment.comment)
         
         # b) send html formatted email
         # parse comment content to build images full URLs
         message = comment.comment
         # src="/site_media/projects/testproject/Unknown.jpeg"
         groups = list( re.finditer('src=\"[^\"]+\"', message) )
         paths = [] # list of (relpath, abspath) to replace after the full message is parsed
         for group in groups:
             relpath = message[group.start()+5:group.end()-1]
             abspath = request.build_absolute_uri(relpath)
             paths.append( (relpath, abspath) )
         # replace all
         for path in paths:
             message = message.replace(path[0], path[1])
         
         message = "User: %s<br/>Forum Thread: %s<p/>New Comment: %s" % (user, url, message)
 
         # send email                
         for admin in project.getAdminGroup().user_set.all():
             notify(admin, subject, message, mime_type='html')
Example #17
0
def password_reset(request):
    
    # redirect to another node if necessary
    if redirectToIdp():
        return HttpResponseRedirect(settings.IDP_REDIRECT + request.path)
    
    if request.method == 'GET':
        
        # optional GET parameters to pre-populate the form
        initial = {'openid': request.GET.get('openid', ''),
                   'email': request.GET.get('email', '')}
        
        form = PasswordResetForm(initial=initial)       
        return render_password_reset_form(request, form)

    else:
        form = PasswordResetForm(request.POST)

        # check form is valid first
        if not form.is_valid():
            print "Form is invalid: %s" % form.errors
            return render_password_reset_form(request, form)

        openid = form.cleaned_data.get('openid')
        email = form.cleaned_data.get('email')
        
        # the openid entered by the user MUST be found in the local database
        # otherwise we can neither change the password, nor we can redirect to a known node
        try:
            userOpenid = UserOpenID.objects.get(claimed_id=openid)
            user = userOpenid.user
            
            # 1) local user (i.e. user home node == this node)
            if isUserLocal(user):
            
                # 1a) this node issued this openid
                if isOpenidLocal(openid):
    
                    if user.email == email:
                                            
                        # generate new random password
                        # prepend "AB1-" to satisfy mandatory requirements
                        new_password = "******"+User.objects.make_random_password(length=8)
        
                        # change password in database
                        user.set_password(new_password)
                        user.save()
                        user.profile.last_password_update = datetime.datetime.now()
                        user.profile.save()
                        
                        # update ESGF user object
                        if settings.ESGF_CONFIG:
                            esgfDatabaseManager.updatePassword(user, new_password)
        
                        # logout user (if logged in)
                        logout(request)
        
                        # user profile url
                        url = reverse('user_detail', kwargs={'user_id': user.id})
                        url = request.build_absolute_uri(url)
        
                        # send email to user
                        subject = "Password Reset"
                        message = "Your new password has been set to: %s\n" % new_password
                        message += "Your openid is: %s\n" % user.profile.openid()
                        message += "For security reasons, please change this password as soon as you log in.\n"  
                        message += "To change your password, first log in with your openid and new password,\n"
                        message += "then click on the 'My Profile' link on the top-right of each page,\n"
                        message += "or visit the following URL: %s" % url
                        notify(user, subject, message)
        
                        # redirect to login page with special message
                        return HttpResponseRedirect(reverse('login')+"?message=password_reset")
                    
                    else:
                        return render_password_reset_form(request, form, "Invalid OpenID/email combination")

                # 1b) user used an external ESGF openid (for example, http://dkrz...) to login onto this node
                # (for example, http://www.earthsystemcog.org/...)
                else:
                    idpurl = urlparse(openid)
                    idpurl = "%s://%s/" % (idpurl.scheme, idpurl.netloc)
                    message = "This OpenID was issued by another node."
                    message += "<br/>Please reset your password at <a href='%s'>that node</a>." % idpurl
                    return render_password_reset_form(request, form, message)
                
            #  2) non-local user: redirect request to peer node, post automatically
            else:
                site = user.profile.site
                redirect_url = 'http://%s%s?openid=%s&email=%s' % (site.domain, reverse('password_reset'),
                                                                   openid, email)
                
                # 2a) automatically redirect to peer node
                #redirect_url += "&post=true" # submit form automatically at that node
                #return HttpResponseRedirect(redirect_url)
                
                # 2b) show message on this node with link to peer node
                message = "This OpenID was issued by another ESG-CoG node."
                message += "<br/>Please use the <a href='%s'>Reset Password</a> page at that node." % redirect_url
                return render_password_reset_form(request, form, message)
                
        # openid not found
        except UserOpenID.DoesNotExist:
            message = "OpenID not found."
            message += "<br/>If your OpenID was issued by '%s'," % settings.ESGF_HOSTNAME
            message += "<br/>then please use the 'Forgot OpenID?' link below to retrieve the correct OpenID." 
            message += "<br/>Otherwise, please reset your password on the ESGF-CoG node that issued your OpenID."
            return render_password_reset_form(request, form, message)