Ignore:
Timestamp:
02/20/12 16:27:19 (13 years ago)
Author:
hendrikvanantwerpen
Message:
  • [Client] Moved pages in subtree of rft/, allowing controllers next to them.
  • [Client] Created questions page, gives overview and allows adding.
  • [Client] Page controllers inherit from _Page, because the previous mechanism w

asn't working.

  • [Client] Added new user registration.
  • [Server] Changed user passwords to passwordHash/passwordSalt combination.
  • [Server] Added simple object marshalling and unmarshalling to preserve types.
  • [Server] Added ResearchToolObjectInterface? with static create() method. Implemented for all model classes.
File:
1 edited

Legend:

Unmodified
Added
Removed
  • Dev/branches/rest-dojo-ui/server/api.php

    r263 r274  
    4646
    4747        $user = null;
    48         $data = null;
    4948        if (!empty($request->data)) {
    50             $data = json_decode($request->data, true);
    51         }
    52         if (!empty($data)) {
    53             $user = Auth::login($data['username'], sha1($data['password']));
     49            $user = Auth::login($request->data['email'], $request->data['password']);
    5450            if (!$user) {
    55                 throw new ResponseException("Incorrect username and password", Response::UNAUTHORIZED);
     51                throw new ResponseException("Incorrect email and password", Response::UNAUTHORIZED);
    5652            }
    5753            set_session_cookie($response, $user);
     
    5955            $user = restore_session($response);
    6056        }
    61         $response->body = json_encode($user);
     57        $response->body = $user;
     58        return $response;
     59    }
     60
     61}
     62
     63/**
     64 *  @uri /register
     65 */
     66class RegisterResource extends Resource {
     67
     68    function post($request) {
     69        $response = new Response($request);
     70
     71        $user = null;
     72        if (!empty($request->data)) {
     73            $user = Auth::register($request->data['email'], $request->data['password']);
     74            set_session_cookie($response, $user);
     75        } else {
     76            throw new ResponseException("No email and password provided.",Response::BADREQUEST);
     77        }
     78        $response->body = $user;
    6279        return $response;
    6380    }
     
    83100        $type = $this->getType($request);
    84101        $objects = $type::get(array());
    85         //$objects = array_map(function($val) { return array('uid' => $val->uid); }, $objects);
    86 
    87         $response->body = json_encode($objects);
     102
     103        $response->body = $objects;
    88104        return $response;
    89105    }
     
    94110
    95111        $type = $this->getType($request);
    96         $data = json_decode($request->data);
    97112        $onlyAdd = $request->ifNoneMatch('*');
    98113        $onlyUpdate = $request->ifMatch('*');
    99114
    100115        $object = FALSE;
    101         if (isset($data->uid)) {
    102             $objects = $type::get(array('uid' => $data->uid));
     116        if (isset($request->data->uid)) {
     117            $objects = $type::get(array('uid' => $request->data->uid));
    103118            if (!empty($objects)) {
    104119                $object = $objects[0];
     
    116131            $response->code = Response::OK;
    117132        }
    118         foreach ($data as $key => $val) {
     133        foreach ($request->data as $key => $val) {
    119134            $object->$key = $val;
    120135        }
    121         $object->save();
    122 
    123         $response->body = json_encode($object);
     136        if (!$object->save()) {
     137            throw new ResponseException("Save failed", Response::INTERNALSERVERERROR);
     138        }
     139
     140        $response->body = $object;
    124141        return $response;
    125142    }
     
    150167        }
    151168
    152         $response->body = json_encode($objects[0]);
     169        $response->body = $objects[0];
    153170        return $response;
    154171    }
     
    159176
    160177        $info = $this->getTypeAndUid($request);
    161         $data = json_decode($request->data);
    162178        $onlyAdd = $request->ifNoneMatch('*');
    163179        $onlyUpdate = $request->ifMatch('*');
     
    179195            $response->code = Response::OK;
    180196        }
    181         foreach ($data as $key => $val) {
     197        foreach ($request->data as $key => $val) {
    182198            $object->$key = $val;
    183199        }
    184         $object->save();
    185 
    186         $response->body = json_encode($object);
     200        if (!$object->save()) {
     201            throw new ResponseException("Save failed", Response::INTERNALSERVERERROR);
     202        }
     203
     204        $response->body = $object;
    187205        return $response;
    188206    }
    189207
    190208    function delete($request) {
    191         restore_session();
     209        restore_session(new Response($request));
    192210        throw new ReponseException("Delete not implemented", Response::METHODNOTALLOWED);
    193211    }
     
    202220    $request->baseUri = $baseUri;
    203221}
    204 
     222$request->data = Marshaller::unmarshall(json_decode($request->data));
    205223try {
    206224    $resource = $request->loadResource();
     
    208226} catch (ResponseException $e) {
    209227    $response = $e->response($request);
    210     $response->body = json_encode(array('errorMsg' => $response->body));
     228    $response->body = array('errorMsg' => $response->body);
    211229} catch (Exception $e) {
    212230    $response = new Response($request);
    213231    $response->code = Response::INTERNALSERVERERROR;
    214     $response->body = json_encode(array('errorMsg' => "Unhandled exception: " . $e));
     232    $response->body = array('errorMsg' => "Unhandled exception: " . $e);
    215233}
    216234add_default_headers($response);
     235$response->body = json_encode(Marshaller::marshall($response->body));
    217236$response->output();
     237
    218238?>
Note: See TracChangeset for help on using the changeset viewer.