Skip to content
Snippets Groups Projects
ResultsController.php 6.75 KiB
<?php

namespace app\Http\Controllers;

use App\Http\Controllers\Controller;
use App\IdpResult;
use App\TestResult;
use App\TestAttribute;
use App\Libraries\EarcUtils;
use Illuminate\Http\Request;
use App\Constants\EarcUtils AS EarcConstants;

class ResultsController extends Controller
{
    /**
     * Show Results.
     */
    public function __invoke(Request $request, $test_id)
    {
        //Get only the latest result for each IdP
        $idps = IdpResult::all()->unique('idp_entity_id');
        
        foreach ($idps as $idp) 
        {
            $historical_results[] = IdpResult::where('idp_entity_id', $idp['idp_entity_id'])->orderBy('created_at', 'desc')->first();
        }
        
        $idp_result = IdpResult::where('test_id', $test_id)->get();
        
        if (count($idp_result) > 0) 
        {
            $released_attributes = array();
            $sp_entities = EarcUtils::getSpMetadata(null);
            $test_results = TestResult::where('test_id', $test_id)->get();
            $test_attributes = TestAttribute::where('test_id', $test_id)->get();
            
            foreach ($test_results as $result) 
            {
                $sp_entities[$result->sp_entityid]['tested'] = true;
                
                if ($result->sp_entityid == env('APP_URL_NOEC') . "/shibboleth") 
                {
                    if (strpos($result->test_mark, 'F') !== false) 
                    {
                        $verdict[$result->sp_entityid]['comment'] = 'Good data privacy but bad usability.';
                    } 
                    elseif (strpos($result->test_mark, 'A') !== false) 
                    {
                        $verdict[$result->sp_entityid]['comment'] = 'Good usability but bad data privacy.';
                    } 
                    else 
                    {
                        $verdict[$result->sp_entityid]['comment'] = $result->test_comment;
                    }
                    
                    $verdict[$result->sp_entityid]['mark'] = '';
                } 
                else 
                {
                    $verdict[$result->sp_entityid]['mark'] = $result->test_mark;
                    $verdict[$result->sp_entityid]['comment'] = $result->test_comment;
                }

                $released_attributes[$result->sp_entityid] = [];
            }
            
            foreach ($test_attributes as $attribute) 
            {
                $released_attributes[$attribute->sp_entityid][$attribute->attr_name] = $attribute->attr_value_multiplicity;
            }

            foreach ($sp_entities as $sp) 
            {
                if (array_key_exists('tested', $sp)) 
                {
                    if (array_key_exists('attributeNamesRequired', $sp)) 
                    {
                        if (EarcUtils::isRnsIndicated($sp)) 
                        {
                            if (array_key_exists('eduPersonScopedAffiliation', $released_attributes[$sp['entityid']])) 
                            {
                                $sp['attributeNamesRequired'][] = 'eduPersonScopedAffiliation';
                            }

                            if (array_key_exists('eduPersonTargetedID', $released_attributes[$sp['entityid']])) 
                            {
                                $sp['attributeNamesRequired'][] = 'eduPersonTargetedID';
                            }
                        }

                        $sp_entities[$sp['entityid']]['superfluous_attributes'] = array_diff(array_keys($released_attributes[$sp['entityid']]), $sp['attributeNamesRequired']);
                    }
                }
            }

            $regional_earc = array_key_exists($idp_result[0]['registration_authority'], EarcConstants::EARC_REGIONAL_SP)
                ? EarcConstants::EARC_REGIONAL_SP[$idp_result[0]['registration_authority']]
                : null;

            return view('results', ['historical_results' => $historical_results,
                'idp' => $idp_result[0],
                'regional_earc' => $regional_earc,
                'verdict' => $verdict,
                'sp_entities' => $sp_entities,
                'released_attributes' => $released_attributes, ]);
        } 

        abort(404);
    }

    public function getHistoricalResults()
    {
        $idps = IdpResult::all()->unique('idp_entity_id');
        foreach ($idps as $idp) 
        {
            $historical_results[] = IdpResult::where('idp_entity_id', $idp['idp_entity_id'])->orderBy('created_at', 'desc')->first();
        }

        foreach ($historical_results as $key => $result) 
        {
            $historical_results[$key]['test_result'] = TestResult::where('test_id', $result['test_id'])->get();
            $historical_results[$key]['result_page'] = EarcConstants::RELEASE_CHECK_EDUGAIN . $historical_results[$key]['test_id'];
            $historical_results[$key]['date'] = $historical_results[$key]['created_at'];
            
            foreach ($historical_results[$key]['test_result'] as $tkey => $tvalue) 
            {
                if ($historical_results[$key]['test_result'][$tkey]['sp_entityid'] == env('APP_URL_NOEC') . "/shibboleth") 
                {
                    unset($historical_results[$key]['test_result'][$tkey]);
                    continue;
                }

                unset($historical_results[$key]['test_result'][$tkey]['test_comment']);
                unset($historical_results[$key]['test_result'][$tkey]['created_at']);
                unset($historical_results[$key]['test_result'][$tkey]['updated_at']);
                unset($historical_results[$key]['test_result'][$tkey]['id']);
                unset($historical_results[$key]['test_result'][$tkey]['test_id']);
            }

            unset($historical_results[$key]['created_at']);
            unset($historical_results[$key]['updated_at']);
            unset($historical_results[$key]['id']);
            unset($historical_results[$key]['test_id']);
        }

        return $historical_results;
    }

    public function getSingleHistoricalResult(Request $request, $idp_entity_id)
    {
        $idp_entity_id = urldecode($idp_entity_id);
        $historical_result = IdpResult::where('idp_entity_id', $idp_entity_id)->orderBy('created_at', 'desc')->first();

        if (count($historical_result)>0) 
        {
            $historical_result['datetime'] = $historical_result['created_at'];
            $historical_result['result_page'] = EarcConstants::RELEASE_CHECK_EDUGAIN . $historical_result['test_id'];
            unset($historical_result['test_comment']);
            unset($historical_result['created_at']);
            unset($historical_result['updated_at']);
            unset($historical_result['id']);
            unset($historical_result['test_id']);
        }

        return $historical_result;
    }
}