src/Controller/API/ApiController.php line 208

Open in your IDE?
  1. <?php
  2. namespace App\Controller\API;
  3. use App\Controller\BaseController;
  4. use Empire\Access\Access;
  5. use Empire\Core\Approval;
  6. use Empire\Core\Branch;
  7. use Empire\Core\Codename;
  8. use Empire\Core\Core;
  9. use Empire\Core\Notification;
  10. use Empire\Core\Oversector;
  11. use Empire\Core\Sector;
  12. use Empire\Core\System;
  13. use Empire\Core\Rank;
  14. use Empire\Core\Region;
  15. use Empire\Core\Page;
  16. use Empire\Core\Position;
  17. use Empire\Core\Unit;
  18. use Empire\Core\User;
  19. use Empire\Legacy\cgt;
  20. use Exception;
  21. use Symfony\Component\HttpFoundation\JsonResponse;
  22. use Symfony\Component\HttpFoundation\RedirectResponse;
  23. use Symfony\Component\HttpFoundation\Request;
  24. use Symfony\Component\Routing\Annotation\Route;
  25. use Sensio\Bundle\FrameworkExtraBundle\Configuration\IsGranted;
  26. /**
  27.  * Class ApiController
  28.  * @package App\Controller\API
  29.  * @Route("/api")
  30.  */
  31. class ApiController extends BaseController
  32. {
  33.     /**
  34.      * @param $id
  35.      * @param $offset
  36.      * @return RedirectResponse
  37.      * @Route("/position/{id}/{offset}.jpg")
  38.      */
  39.     public function positionAvatar($id$offset) {
  40.         try {
  41.             $obj Position::getAvatarByPosition($idfalse$offset);
  42.             return $this->redirect($obj->AVATAR_SRC);
  43.         } catch(Exception $e) {
  44.             //var_dump($e->getMessage());
  45.             //return "";
  46.             return $this->redirect('https://art.swc-empire.com/avatar/error.jpg');
  47.         }
  48.     }
  49.     /**
  50.      * @param $id
  51.      * @return string
  52.      * @Route("/branch/{id}/units")
  53.      */
  54.     public function branchUnits($id) {
  55.         $branch Branch::load([$id]);
  56.         $branch->initialize();
  57.         $branchKey $branch->getKey();
  58.         $user Core::user();
  59.         $units Unit::loadEditable($user$branch->getID());
  60.         return $this->api(["units" => $units]);
  61.     }
  62.     /**
  63.      * @param $id
  64.      * @return string
  65.      * @Route("/unit/{id}")
  66.      */
  67.     public function unitDetails($id) {
  68.         try {
  69.             $unit Unit::load([$id]);
  70.             if($unit->isEditable($this->getUser())) return $this->api(["unit" => $unit]);
  71.             else return $this->api([], 403, [], 'error');
  72.         } catch (Exception $e) {
  73.             var_dump($e->getMessage());
  74.             return $this->api(['error' => 'Unit not found or other error.'], 500, [], 'error');
  75.         }
  76.     }
  77.     /**
  78.      * @param $id
  79.      * @return string|JsonResponse
  80.      * @Route("/unit/{id}/positions")
  81.      */
  82.     public function unitPositions($id) {
  83.         try {
  84.             $unit Unit::load([$id]);
  85.             if(!$unit->isEditable($this->getUser())) {
  86.                 return $this->api([], 403, [], 'error');
  87.             }
  88.             return $this->api(['positions' => $unit->getPositions()]);
  89.         } catch (Exception $e) {
  90.             var_dump($e->getMessage());
  91.             return $this->api(['error' => 'Unit not found or other error.'], 500, [], 'error');
  92.         }
  93.     }
  94.     /**
  95.      * @param $id
  96.      * @return string|JsonResponse
  97.      * @Route("/unit/{id}/members")
  98.      */
  99.     public function unitMembers($id) {
  100.         try {
  101.             $unit Unit::load([$id]);
  102.             if(!$unit->isEditable($this->getUser(), true)) {
  103.                 return $this->api([], 403, [], 'error');
  104.             }
  105.             return $this->api(['members' => $unit->getMembersDisplay()]);
  106.         } catch (Exception $e) {
  107.             var_dump($e->getMessage());
  108.             return $this->api(['error' => 'Unit not found or other error.'], 500, [], 'error');
  109.         }
  110.     }
  111.     /**
  112.      * @param $id
  113.      * @return string|JsonResponse
  114.      * @Route("/unit/{id}/codenames")
  115.      */
  116.     public function unitCodenames($id) {
  117.         try {
  118.             $unit Unit::load([$id]);
  119.             if(!$unit->isEditable($this->getUser())) {
  120.                 return $this->api([], 403, [], 'error');
  121.             }
  122.             return $this->api(['codenames' => $unit->getCodenames()]);
  123.         } catch (Exception $e) {
  124.             var_dump($e->getMessage());
  125.             return $this->api(['error' => 'Unit not found or other error.'], 500, [], 'error');
  126.         }
  127.     }
  128.     /**
  129.      * @param $id
  130.      * @return JsonResponse
  131.      * @Route("/position/{id}")
  132.      */
  133.     public function positionDetails($id) {
  134.         try {
  135.             $position Position::load([$id]);
  136.             if($position->isEditable($this->getUser())) {
  137.                 return $this->api(['position' => $position]);
  138.             } else {
  139.                 return $this->api(['error' => 'User not authorized to view Position with id'], 403, [], 'error');
  140.             }
  141.         } catch (Exception $e) {
  142.             return $this->api(['error' => 'Position not found or other error.'], 500, [], 'error');
  143.         }
  144.     }
  145.     /**
  146.      * @param $id
  147.      * @return JsonResponse
  148.      * @Route("/position/{id}/access")
  149.      */
  150.     public function positionAccess($id) {
  151.         try {
  152.             $position Position::load([$id]);
  153.             if($position->isEditable($this->getUser())) { //TODO: Filter for access keys user can see?
  154.                 return $this->api(['access' => $position->getKeys()]);
  155.             } else {
  156.                 return $this->api(['error' => 'User not authorized to view Position with id'], 403, [], 'error');
  157.             }
  158.         } catch (Exception $e) {
  159.             return $this->api(['error' => 'Position not found or other error.'], 500, [], 'error');
  160.         }
  161.     }
  162.     /**
  163.      * @param $id
  164.      * @param Request $request
  165.      * @return JsonResponse
  166.      * @Route("/page/{id}/set-keys")
  167.      */
  168.     public function setPageAccessKeys($idRequest $request) {
  169.         $keyString $request->request->get('keys');
  170.         $keyArr json_decode($keyString);
  171.         if(json_last_error() !== JSON_ERROR_NONE) {
  172.             return $this->api(['error' => json_last_error_msg()], 400);
  173.         }
  174.         try {
  175.             $page Page::load([$id]);
  176.             $page->updateFields(['SEPA_KEYS' => $keyString]);
  177.             return $this->api(["status" => "success"]);
  178.         } catch (Exception $e) {
  179.             return $this->api(['error' => 'Page not found or other error.'], 500, [], 'error');
  180.         }
  181.     }
  182.     /**
  183.      * @return JsonResponse
  184.      * @Route("/cgt")
  185.      */
  186.     public function getTime() {
  187.         return $this->api(["cgt" => cgt::evaluateString("now")]);
  188.     }
  189.     /**
  190.      * @Route("/menu")
  191.      */
  192.     public function getSidemenu(){
  193.         $ing = \Empire\Core\PageCategory::loadAll(\Empire\Core\Page::PAGE_TYPE_PUBLIC);
  194.         $cat $ing[0];
  195.         $return "";
  196.         foreach($cat->subCategories() as $scat) {
  197.             $return .= "<div class='menu'>";
  198.             $return .= "<h2>" $scat->getName() . "</h2>\n";
  199.             $return .= "<ul>\n";
  200.             foreach ($scat->pages() as $page) {
  201.                 if($page->visible) {
  202.                     $active $page->url == ltrim(Core::get("fullPage"), '/') ? 'class="menu-active-link"' '';
  203.                     if (strpos($page->url"http://") !== && strpos($page->url"https://") !== ) {
  204.                         $return .= "\t<li><a href='" Core::get("base_url") . $page->url "' $active><span><i class='fa fa-caret-right'></i></span> " $page->title "</a></li>\n";
  205.                     } else {
  206.                         $return .= "\t<li><a href='" $page->url "' $active><span><i class='fa fa-caret-right'></i></span> " $page->title "</a></li>\n";
  207.                     }
  208.                 }
  209.             }
  210.             $return .= "</ul>\n</div>";
  211.         }
  212.         return $this->api($return);
  213.     }
  214.     /**
  215.      * @Route("/cgt/{args}", requirements={"args"="\w+"}, )
  216.      */
  217.     public function getCgt($args "now"){
  218.         return $this->api(["time" => \Empire\Legacy\cgt::evaluateString($args)], 200, ["Access-Control-Allow-Origin" => '*']);
  219.     }
  220.     /**
  221.      * @Route("/ranks")
  222.      */
  223.     public function getBranchRanks(Request $request){
  224.         $ranks = \Empire\Core\Branch::load([$request->request->get("branch")])->getRanksOrdered();
  225.         return $this->api(["ranks" => $ranks]);
  226.     }
  227.     /**
  228.      * @Route("/rank-update", methods={"POST"})
  229.      */
  230.     public function updateRank(Request $request){
  231.         $id $request->request->get('id');
  232.         $name $request->request->get('name');
  233.         $image $request->request->get('image');
  234.         $uniform $request->request->get('uniform');
  235.         $pay $request->request->get('pay');
  236.         $success Rank::updateRank($id$name$image$uniform$pay);
  237.         if($success) {
  238.             return $this->api(["success"]);
  239.         } else {
  240.             return $this->api(['error' => 'Rank could not be updated.'], 400);
  241.         }
  242.     }
  243.     /**
  244.      * @Route("/notification-read", methods={"POST"})
  245.      */
  246.     public function readNotification(Request $request){
  247.         $id $request->request->get('id');
  248.         $success Notification::markRead($id);
  249.         if($success) {
  250.             return $this->api(["success"]);
  251.         } else {
  252.             return $this->api(['error' => 'Unknown error.'], 400);
  253.         }
  254.     }
  255.     /**
  256.      * @Route("/approval-respond", methods={"POST"})
  257.      */
  258.     public function approvalResponse(Request $request){
  259.         $id $request->request->get('id');
  260.         $state $request->request->get('state');
  261.         $success Approval::respond($id$state);
  262.         if($success) {
  263.             return $this->api(["success"]);
  264.         } else {
  265.             return $this->api(['error' => 'Unknown error.'], 400);
  266.         }
  267.     }
  268.     /**
  269.      * @Route("/auth/user")
  270.      */
  271.     public function apiUser(Request $request){
  272.         $c $request->getContent();
  273.         $h $request->headers->all();
  274.         $user $this->getUser();
  275.         if(is_null($user)){
  276.             return $this->api(["error" => "no user!"'headers' => $h'content' => $c, ], 200);
  277.         } else {
  278.             return $this->api(['headers' => $h'content' => $c'username' => $user->getName(), 'avatar_url' => $user->getAvatar(), 'id' => $user->getID()]);
  279.         }
  280.     }
  281.     /**
  282.      * @param $id
  283.      * @return string
  284.      * @Route("/region/{id}", name="region")
  285.      */
  286.     public function regionDetails($id) {
  287.         try {
  288.             $region Region::load([$id]);
  289.             if(Core::user()->hasAccess('nie_management')) return $this->api(["region" => $region]);
  290.             else return $this->api([], 403, [], 'error');
  291.         } catch (Exception $e) {
  292.             var_dump($e->getMessage());
  293.             return $this->api(['error' => 'Region not found or other error.'], 500, [], 'error');
  294.         }
  295.     }
  296.     /**
  297.      * @param $id
  298.      * @return string
  299.      * @Route("/region/{id}/access", name="region_nie_access")
  300.      */
  301.     public function regionNieAccess($id) {
  302.         try {
  303.             $region Region::load([$id]);
  304.             if(Core::user()->hasAccess('nie_management')) return $this->api(["region" => $region->getAccess()]);
  305.             else return $this->api([], 403, [], 'error');
  306.         } catch (Exception $e) {
  307.             var_dump($e->getMessage());
  308.             return $this->api(['error' => 'Region not found or other error.'], 500, [], 'error');
  309.         }
  310.     }
  311.     /**
  312.      * @param $id
  313.      * @return string|JsonResponse
  314.      * @Route("/region/{id}/oversectors", name="region_oversectors")
  315.      */
  316.     public function regionOversectors($id) {
  317.         try {
  318.             $region Region::load([$id]);
  319.             if(!Core::user()->hasAccess('nie_management')) {
  320.                 return $this->api([], 403, [], 'error');
  321.             }
  322.             return $this->api(['oversectors' => $region->getOversectors()]);
  323.         } catch (Exception $e) {
  324.             var_dump($e->getMessage());
  325.             return $this->api(['error' => 'Region not found or other error.'], 500, [], 'error');
  326.         }
  327.     }
  328.     /**
  329.      * @param $id
  330.      * @return string
  331.      * @Route("/oversector/{id}", name="oversector")
  332.      */
  333.     public function oversectorDetails($id) {
  334.         try {
  335.             $oversector Oversector::load([$id]);
  336.             if(Core::user()->hasAccess('nie_management')) return $this->api(["oversector" => $oversector]);
  337.             else return $this->api([], 403, [], 'error');
  338.         } catch (Exception $e) {
  339.             var_dump($e->getMessage());
  340.             return $this->api(['error' => 'Oversector not found or other error.'], 500, [], 'error');
  341.         }
  342.     }
  343.     /**
  344.      * @param $id
  345.      * @return string|JsonResponse
  346.      * @Route("/oversector/{id}/sectors", name="oversector_sectors")
  347.      */
  348.     public function osSectors($id) {
  349.         try {
  350.             $oversector Oversector::load([$id]);
  351.             if(!Core::user()->hasAccess('nie_management')) {
  352.                 return $this->api([], 403, [], 'error');
  353.             }
  354.             return $this->api(['sectors' => $oversector->getSectors()]);
  355.         } catch (Exception $e) {
  356.             var_dump($e->getMessage());
  357.             return $this->api(['error' => 'Oversector not found or other error.'], 500, [], 'error');
  358.         }
  359.     }
  360.     /**
  361.      * @param $id
  362.      * @return string
  363.      * @Route("/sector/{id}", name="sector")
  364.      */
  365.     public function sectorDetails($id) {
  366.         try {
  367.             $sector Sector::load([$id]);
  368.             if(Core::user()->hasAccess('nie_management')) return $this->api(["sector" => $sector]);
  369.             else return $this->api([], 403, [], 'error');
  370.         } catch (Exception $e) {
  371.             var_dump($e->getMessage());
  372.             return $this->api(['error' => 'Sector not found or other error.'], 500, [], 'error');
  373.         }
  374.     }
  375.     /**
  376.      * @param $id
  377.      * @return string
  378.      * @Route("/sector/{id}/access", name="sector_nie_access")
  379.      */
  380.     public function sectorNieAccess($id) {
  381.         try {
  382.             $sector Sector::load([$id]);
  383.             if(Core::user()->hasAccess('nie_management')) return $this->api(["sector" => $sector->getAccess()]);
  384.             else return $this->api([], 403, [], 'error');
  385.         } catch (Exception $e) {
  386.             var_dump($e->getMessage());
  387.             return $this->api(['error' => 'Sector not found or other error.'], 500, [], 'error');
  388.         }
  389.     }
  390.     /**
  391.      * @param $id
  392.      * @return string|JsonResponse
  393.      * @Route("/sector/{id}/systems", name="sector_systems")
  394.      */
  395.     public function sectorSystems($id) {
  396.         try {
  397.             $sector Sector::load([$id]);
  398.             if(!Core::user()->hasAccess('nie_management')) {
  399.                 return $this->api([], 403, [], 'error');
  400.             }
  401.             return $this->api(['systems' => $sector->getSystems()]);
  402.         } catch (Exception $e) {
  403.             var_dump($e->getMessage());
  404.             return $this->api(['error' => 'Sector not found or other error.'], 500, [], 'error');
  405.         }
  406.     }
  407.     /**
  408.      * @param $id
  409.      * @return string
  410.      * @Route("/system/{id}", name="system")
  411.      */
  412.     public function systemDetails($id) {
  413.         try {
  414.             $system System::load([$id]);
  415.             if(Core::user()->hasAccess('nie_management')) return $this->api(["system" => $system]);
  416.             else return $this->api([], 403, [], 'error');
  417.         } catch (Exception $e) {
  418.             var_dump($e->getMessage());
  419.             return $this->api(['error' => 'Sector not found or other error.'], 500, [], 'error');
  420.         }
  421.     }
  422.     /**
  423.      * @param $id
  424.      * @return string
  425.      * @Route("/system/{id}/access", name="system_nie_access")
  426.      */
  427.     public function systemNieAccess($id) {
  428.         try {
  429.             $system System::load([$id]);
  430.             if(Core::user()->hasAccess('nie_management')) return $this->api(["system" => $system->getAccess()]);
  431.             else return $this->api([], 403, [], 'error');
  432.         } catch (Exception $e) {
  433.             var_dump($e->getMessage());
  434.             return $this->api(['error' => 'System not found or other error.'], 500, [], 'error');
  435.         }
  436.     }
  437. }