Exemplo n.º 1
0
def activate_study(request, code):
    
    try:
        cron = Cron.objects.get(activationCode=code)
    except Cron.DoesNotExist:
        cron = None
    
    if cron == None:
        return render(request, 'players/registration.html', {"wrongCode": True})
    elif cron.activated:
        return render(request, 'players/registration.html', {"alreadyActivated": True})
    else:
        if request.method == 'POST':
            form = PlayerForm(request.POST, prefix="player")
             
            if form.is_valid():
                player = form.save()
                cron.player = player
                cron.activated = True
                cron.save()
                logging.log_action(ActionLog.ACTION_CRON_ACTIVATED, cron)
                return render(request, 'players/registration.html', {"cron": player.cron, "study":True})
            else:
                return render(request, 'players/study.html', {"form": form, "code":code})
         
        else:
            form = PlayerForm(prefix='player')
            logging.log_action(ActionLog.ACTION_CRON_VIEW_STUDY, cron)
            return render(request, 'players/study.html', {"form": form, "code":code})
Exemplo n.º 2
0
def createMail(bodyType, mop):
    mopco = getUnitComm()
    mail = Mail(bodyType=bodyType, mop=mop, unit=mopco, subject=Mail.SUBJECT_HELP, type=Mail.TYPE_RECEIVED, processed=True)
    #if mail.bodyType == Mail.BODY_TUTORIAL_5_CONCLUSION:
    #    mail.trust = 50
    #    mail.mop.mopTracker.addTrust(mail.trust, True)
    mail.save()
    logging.log_action(ActionLog.ACTION_MOP_RECEIVE_MAIL_TUTORIAL, mop=mop, mail=mail)
Exemplo n.º 3
0
def promotion_email(mop, bodyType):
    mail = Mail()
    mail.unit = Unit.objects.filter(type=Unit.TYPE_ADMINISTRATIVE)[0]
    mail.subject = Mail.SUBJECT_INFORMATION
    mail.bodyType = bodyType
    mail.type = Mail.TYPE_RECEIVED
    mail.processed = True
    mail.mop = mop
    mail.save()
    from logger.models import ActionLog
    from logger import logging
    data = json.dumps({'totalTrust':mop.mopTracker.totalTrust, 'newClearance':mop.mopTracker.clearance})
    logging.log_action(ActionLog.ACTION_MOP_RECEIVE_MAIL_PERFORMANCE, mop=mop, mail=mail, data=data)  
Exemplo n.º 4
0
def checkProvenance(mopTracker, correct):
    if mopTracker.tutorial == MopTracker.TUTORIAL_3_SENT_HOW_TO_CHECK_PROVENANCE:
        if correct:
            createMail(Mail.BODY_TUTORIAL_4c_CORRECT_MODIFICATION, mopTracker.mop)
            mopTracker.tutorial = MopTracker.TUTORIAL_4_SENT_HOW_TO_SUBMIT_DOCUMENT
            mopTracker.save()
            logging.log_action(ActionLog.ACTION_MOP_TUTORIAL_PROGRESS, mop=mopTracker.mop, tutorialProgress=mopTracker.tutorial)
        else:
            mopTracker.tutorialProvErrors += 1
            mopTracker.save()
            if mopTracker.tutorialProvErrors > 1:
                createMail(Mail.BODY_TUTORIAL_4b_INCORRECT_MODIFICATION_2, mopTracker.mop)
            else:
                createMail(Mail.BODY_TUTORIAL_4a_INCORRECT_MODIFICATION, mopTracker.mop)
Exemplo n.º 5
0
def activate_nostudy(request, code):
    try:
        cron = Cron.objects.get(activationCode=code)
    except Cron.DoesNotExist:
        cron = None
    
    if cron == None:
        return render(request, 'players/registration.html', {"wrongCode": True})
    elif cron.activated:
        return render(request, 'players/registration.html', {"alreadyActivated": True})
    else:
        cron.activated = True
        cron.save()
        logging.log_action(ActionLog.ACTION_CRON_CREATED, cron)
        return render(request, 'players/registration.html', {"cron": cron}) 
Exemplo n.º 6
0
def register(request):
    if request.method == 'POST':
        cron_form = CronForm(request.POST, prefix="cron")
        user_form = UserCreationForm(request.POST, prefix = "user")
         
        if cron_form.is_valid() and user_form.is_valid():
            user = user_form.save()
            cron = cron_form.save(commit=False)
            cron.user = user
            cron.save()
            
            logging.log_action(ActionLog.ACTION_CRON_CREATED, cron)
            
            email_tpl = loader.get_template('players/activation.txt')
            url_study = request.build_absolute_uri(reverse('players_activation_study', args=[cron.activationCode]))
            url_nostudy = request.build_absolute_uri(reverse('players_activation_nostudy', args=[cron.activationCode]))
            c = Context({
                'cron': cron, 'url_study':url_study, 'url_nostudy':url_nostudy
                })
             
            email = EmailMessage(
                subject='[cr0n] Activate your account',
                body= email_tpl.render(c), 
                to=[cron.email,],
            )
            #in settings.py you can configure console backend for displaying emails instead of sending them - great for testing!
            email.send(fail_silently=False)

            
             
            return render(request, 'players/registration.html', {"registered": True, "cron":cron})
        else:
            return render(request, 'players/registration.html', {"cron_form": cron_form, "user_form": user_form})
     
    else:
        cron_form = CronForm(prefix='cron')
        user_form = UserCreationForm(prefix='user')
        return render(request, 'players/registration.html', {"cron_form": cron_form, "user_form": user_form})
Exemplo n.º 7
0
def assignDocument(mopTracker):
    if mopTracker.tutorial == MopTracker.TUTORIAL_2_SENT_HOW_TO_REQUEST_DOCUMENT:
        createMail(Mail.BODY_TUTORIAL_3_TASK_COMPLETION, mopTracker.mop)
        mopTracker.tutorial = MopTracker.TUTORIAL_3_SENT_HOW_TO_CHECK_PROVENANCE
        mopTracker.save()
        logging.log_action(ActionLog.ACTION_MOP_TUTORIAL_PROGRESS, mop=mopTracker.mop, tutorialProgress=mopTracker.tutorial)
Exemplo n.º 8
0
def assignForm(mopTracker):
    if mopTracker.tutorial == MopTracker.TUTORIAL_1_SENT_HOW_TO_REQUEST_FORM:
        createMail(Mail.BODY_TUTORIAL_2_DOCUMENT_REQUEST, mopTracker.mop)
        mopTracker.tutorial = MopTracker.TUTORIAL_2_SENT_HOW_TO_REQUEST_DOCUMENT
        mopTracker.save()
        logging.log_action(ActionLog.ACTION_MOP_TUTORIAL_PROGRESS, mop=mopTracker.mop, tutorialProgress=mopTracker.tutorial)
Exemplo n.º 9
0
def firstLogin(mopTracker):
    createMail(Mail.BODY_TUTORIAL_1_INTRO, mopTracker.mop)
    mopTracker.tutorial = MopTracker.TUTORIAL_1_SENT_HOW_TO_REQUEST_FORM
    mopTracker.save()
    logging.log_action(ActionLog.ACTION_MOP_TUTORIAL_PROGRESS, mop=mopTracker.mop, tutorialProgress=mopTracker.tutorial)
Exemplo n.º 10
0
def cronMail(mopTracker, mail):
    if mopTracker.tutorial == MopTracker.TUTORIAL_5_SENT_CONCLUSION and mail.bodyType == Mail.BODY_TUTORIAL_5_CONCLUSION:
        mopTracker.tutorial = MopTracker.TUTORIAL_6_DONE
        mopTracker.save()
        logging.log_action(ActionLog.ACTION_MOP_TUTORIAL_PROGRESS, mop=mopTracker.mop, tutorialProgress=mopTracker.tutorial)
        mailer.mopTutorialDone(mopTracker.mop.cron)
Exemplo n.º 11
0
def submitDocument(mopTracker):
    if mopTracker.tutorial == MopTracker.TUTORIAL_4_SENT_HOW_TO_SUBMIT_DOCUMENT:
        createMail(Mail.BODY_TUTORIAL_5_CONCLUSION, mopTracker.mop)
        mopTracker.tutorial = MopTracker.TUTORIAL_5_SENT_CONCLUSION
        mopTracker.save()
        logging.log_action(ActionLog.ACTION_MOP_TUTORIAL_PROGRESS, mop=mopTracker.mop, tutorialProgress=mopTracker.tutorial)
Exemplo n.º 12
0
def prov_check(request):
    
    correct = False
    message = "This is not correct."
    status = "ok"
    
    if not request.user.is_active:
        json_data = json.dumps({"message":"You are currently not logged in. Please login to continue.", "status":"logged_out"})            
        return HttpResponse(json_data, mimetype="application/json")

    #if request.is_ajax():
    if request.method == 'POST':
        serial = request.POST.get('serial', "")
        post_node1 = request.POST.get('node1', "")
        post_node2 = request.POST.get('node2', "")
        post_attribute1 = request.POST.get('attribute1', "")
        post_attribute2 = request.POST.get('attribute2', "")
        is_empty = json.loads(request.POST.get('is_empty', False))
        is_test = json.loads(request.POST.get('is_test', False))
        
        player_attribute1 = makeAttributeString(post_node1, post_attribute1)
        player_attribute2 = makeAttributeString(post_node2, post_attribute2)
        
        try:
            provenance = Provenance.objects.get(serial=serial)
            try: 
                attribute1_json = json.loads(provenance.attribute1)
                attribute2_json = json.loads(provenance.attribute2)
            except:
                attribute1_json = []
                attribute2_json = []
        #if we have no proper serial in the post, then we are probably looking at a randomized MOP_TEMPLATE
        except Provenance.DoesNotExist:
            provenance = Provenance.objects.get(id=request.session['prov_id'])
            try:
                attribute1_json = json.loads(request.session['attribute1'])
                attribute2_json = json.loads(request.session['attribute2'])
            except:
                attribute1_json = None
                attribute2_json = None
                
            print 'got stuff from the session cookie'
        
        stored_attribute1_list = []
        stored_attribute2_list = []
        
        if provenance.attribute1 is None and provenance.attribute2 is None:
            if is_empty:
                correct = True
        
        else:
            for a_json in attribute1_json:
                stored_attribute1_list.append(makeAttributeString(a_json['node'], a_json['attribute']))
            for a_json in attribute2_json:
                stored_attribute2_list.append(makeAttributeString(a_json['node'], a_json['attribute']))
            
            if player_attribute1 in stored_attribute1_list and player_attribute2 in stored_attribute2_list:
                correct = True
            elif player_attribute1 in stored_attribute2_list and player_attribute2 in stored_attribute1_list:
                correct = True
       
        stars = None
        if is_test and request.user.is_staff:
            if correct:
                message = "Test feedback: Yes, this is where the inconsistency is!"
            else:
                message = "Test feedback: No, this is not correct."
            close_prov = False
        else:
            cronDocumentInstance = None
            mopDocumentInstance = None
            if provenance.type == Provenance.TYPE_CRON:
                #TODO check properly for cron-user and if Instance exists
                cronDocumentInstance = CronDocumentInstance.objects.get(cronDocument=provenance.document, cron=request.user.cron)
                logging.log_action(ActionLog.ACTION_CRON_PROVENANCE_SUBMIT, cron=cronDocumentInstance.cron, cronDocumentInstance=cronDocumentInstance, cronDocumentInstanceCorrect=correct)
                if correct:
                    cronDocumentInstance.solved = True
                    cronDocumentInstance.save()
                    close_prov = True
                    stars = cronDocumentInstance.getStars()
                    attempts = cronDocumentInstance.failedAttempts + 1
                    
                    if stars == 3:
                        message = "Excellent job! This will be reflected in your agent profile."
                    elif stars == 2:
                        message = "It took you %s tries, but good job anyway. Your agent profile has been updated." % attempts
                    elif stars == 1:
                        message = "Yes, you did it. It did take %s attempts, but the result is what counts. Your success has been logged in your agent profile." % attempts
                    
                    
                else:
                    cronDocumentInstance.increaseFailedAttempts()
                    close_prov = False
                    if cronDocumentInstance.failedAttempts >= 50:
                        message = "Yeah. Not it."
                    elif cronDocumentInstance.failedAttempts >= 30:
                        message = "Honestly, now you are just guessing, right? Contact HQ, they might have uncovered an additional clue!"
                    elif cronDocumentInstance.failedAttempts >= 10:
                        message = "You are trying very hard, but this is not it. Maybe send a message to HQ to see if they have more intel."
                    elif is_empty:
                        message = "No, we are pretty sure that something is wrong with this data. Please keep investigating."
                    else:
                        message = "The data you submitted does not seem suspicious. Please keep investigating."
                    
                  
            elif provenance.type == Provenance.TYPE_MOP_INSTANCE:
                message = "Provenance modification saved. Please submit document now."  
                #TODO check properly for mop-user and if Instance exists
                mopDocumentInstance = MopDocumentInstance.objects.get(randomizedDocument=provenance.randomizedDocument, mop=request.user.mop)
                mopDocumentInstance.modified = True
                mopDocumentInstance.correct = correct
                mopDocumentInstance.save()
                logging.log_action(ActionLog.ACTION_MOP_PROVENANCE_SUBMIT, mop=mopDocumentInstance.mop, mopDocumentInstance=mopDocumentInstance, mopDocumentInstanceCorrect=correct)
                tutorial.checkProvenance(mopDocumentInstance.mop.mopTracker, mopDocumentInstance.correct)
                close_prov = True
            logging.log_prov(action=ProvLog.ACTION_SUBMIT, cronDocumentInstance=cronDocumentInstance, mopDocumentInstance=mopDocumentInstance, node1=post_node1, node2=post_node2, attribute1=post_attribute1, attribute2=post_attribute2, empty=is_empty, correct=correct)

        
        json_data = json.dumps({"close_prov":close_prov, "status":status, "message":message, "stars":stars})

        return HttpResponse(json_data, mimetype="application/json")
Exemplo n.º 13
0
def analyze_performance(simulation=False):
    output = []

    if simulation:
        output.append("RUNNING SIMULATION")

    # if not simulation:
    #    revokeDocuments()

    mopTracker_list = MopTracker.objects.all().order_by("trust")
    output.append("MoPs under performance review: %d" % mopTracker_list.count())
    lastPeriod, thisPeriod, days = getPeriods()
    today = now().date()

    if not simulation:
        if not thisPeriod.reviewDate == today:
            output.append(
                "No review scheduled for today (%s). Next review scheduled for %s" % (today, thisPeriod.reviewDate)
            )
            return output
        output.append(
            "Last review: %s, This review: %s, Days since last review: %s"
            % (lastPeriod.reviewDate, thisPeriod.reviewDate, days)
        )
        if days == 0:
            output.append("No performance review possible.")
            return output
    else:
        output.append(
            "Last review: %s, This review: %s, Days since last review: %s"
            % (lastPeriod.reviewDate, thisPeriod.reviewDate, days)
        )

    for mopTracker in mopTracker_list:
        performanceInstance, out = doPerformance(mopTracker.mop, thisPeriod, days)
        output.append(out)
        if simulation:
            continue
        performanceInstance.save()

        mopTracker.clearance = performanceInstance.result
        mopTracker.totalTrust += mopTracker.trust
        mopTracker.trust = 0
        mopTracker.credit = performanceInstance.credit
        mopTracker.save()

        unit = Unit.objects.filter(type=Unit.TYPE_ADMINISTRATIVE)[0]

        mail = Mail(
            mop=mopTracker.mop,
            performanceInstance=performanceInstance,
            unit=unit,
            subject=Mail.SUBJECT_INFORMATION,
            type=Mail.TYPE_RECEIVED,
        )
        if performanceInstance.type == PerformanceInstance.TYPE_PROMOTION:
            mail.bodyType = Mail.BODY_PERFORMANCE_REPORT_PROMOTION
        elif performanceInstance.type == PerformanceInstance.TYPE_DEMOTION:
            mail.bodyType = Mail.BODY_PERFORMANCE_REPORT_DEMOTION
        else:
            mail.bodyType = Mail.BODY_PERFORMANCE_REPORT_NEUTRAL
        mail.save()
        logging.log_action(ActionLog.ACTION_MOP_RECEIVE_MAIL_PERFORMANCE, mop=mopTracker.mop, mail=mail)
    if not simulation:
        thisPeriod.processed = True
        thisPeriod.reviewTime = now().time()
        thisPeriod.save()
        if not PerformancePeriod.objects.filter(processed=False):
            newPeriod = PerformancePeriod()
            newDate = thisPeriod.reviewDate + datetime.timedelta(days=14)
            newPeriod.reviewDate = newDate
            newPeriod.save()
    return output