Add travis-ci.org configuration
[grauphel.git] / controller / tokencontroller.php
1 <?php
2 /**
3  * Part of grauphel
4  *
5  * PHP version 5
6  *
7  * @category  Tools
8  * @package   Grauphel
9  * @author    Christian Weiske <cweiske@cweiske.de>
10  * @copyright 2014 Christian Weiske
11  * @license   http://www.gnu.org/licenses/agpl.html GNU AGPL v3
12  * @link      http://cweiske.de/grauphel.htm
13  */
14 namespace OCA\Grauphel\Controller;
15
16 use \OCP\AppFramework\Controller;
17 use \OCP\AppFramework\Http\RedirectResponse;
18 use \OCA\Grauphel\Lib\Dependencies;
19 use \OCA\Grauphel\Lib\OAuthException;
20 use \OCA\Grauphel\Lib\Response\ErrorResponse;
21 use \OCA\Grauphel\Lib\TokenStorage;
22
23 /**
24  * OAuth token management
25  *
26  * @category  Tools
27  * @package   Grauphel
28  * @author    Christian Weiske <cweiske@cweiske.de>
29  * @copyright 2014 Christian Weiske
30  * @license   http://www.gnu.org/licenses/agpl.html GNU AGPL v3
31  * @version   Release: @package_version@
32  * @link      http://cweiske.de/grauphel.htm
33  */
34 class TokenController extends Controller
35 {
36     /**
37      * constructor of the controller
38      *
39      * @param string   $appName Name of the app
40      * @param IRequest $request Instance of the request
41      */
42     public function __construct($appName, \OCP\IRequest $request, $user)
43     {
44         parent::__construct($appName, $request);
45         $this->user = $user;
46         $this->deps = Dependencies::get();
47
48         //default http header: we assume something is broken
49         header('HTTP/1.0 500 Internal Server Error');
50     }
51
52
53     /**
54      * Delete an access token
55      * DELETE /tokens/$username/$tokenKey
56      *
57      * @NoAdminRequired
58      * @NoCSRFRequired
59      */
60     public function delete($username, $tokenKey)
61     {
62         if (false && ($this->user === null || $this->user->getUid() != $username)) {
63             $res = new ErrorResponse('You may only delete your own tokens.');
64             $res->setStatus(\OCP\AppFramework\Http::STATUS_FORBIDDEN);
65             return $res;
66         }
67
68         $deps = Dependencies::get();
69         try {
70             $token = $deps->tokens->load('access', $tokenKey);
71         } catch (OAuthException $e) {
72             $res = new ErrorResponse('Token not found.');
73             $res->setStatus(\OCP\AppFramework\Http::STATUS_NOT_FOUND);
74             return $res;
75         }
76
77         if ($username != $token->user) {
78             $res = new ErrorResponse('You may only delete your own tokens.');
79             $res->setStatus(\OCP\AppFramework\Http::STATUS_FORBIDDEN);
80             return $res;
81         }
82
83         $deps->tokens->delete('access', $tokenKey);
84
85         $res = new \OCP\AppFramework\Http\Response();
86         $res->setStatus(\OCP\AppFramework\Http::STATUS_NO_CONTENT);
87         return $res;
88     }
89
90     /**
91      * Delete an access token via POST
92      * POST /tokens/$username/$tokenKey
93      *
94      * @NoAdminRequired
95      * @NoCSRFRequired
96      */
97     public function deletePost($username, $tokenKey)
98     {
99         if (isset($_POST['delete']) && $_POST['delete'] == 1) {
100             $this->delete($username, $tokenKey);
101         }
102
103         $res = new RedirectResponse(
104             $this->deps->urlGen->getAbsoluteURL(
105                 $this->deps->urlGen->linkToRoute('grauphel.gui.tokens')
106             )
107         );
108         $res->setStatus(\OCP\AppFramework\Http::STATUS_FOUND);
109         return $res;
110     }
111 }
112 ?>