input->post("request")); if (empty($request->user) || empty($request->password)) { print json_encode(array("status" => "ERROR", "message" => (string)t("Authorization failed"))); return; } $user = identity::lookup_user_by_name($request->user); if (empty($user)) { print json_encode(array("status" => "ERROR", "message" => (string)t("Authorization failed"))); return; } if (!identity::is_correct_password($user, $request->password)) { print json_encode(array("status" => "ERROR", "message" => (string)t("Authorization failed"))); return; } $key = ORM::factory("rest_key") ->where("user_id", $user->id) ->find(); if (!$key->loaded) { $key->user_id = $user->id; $key->access_key = md5($user->name . rand()); $key->save(); Kohana::log("alert", Kohana::debug($key->as_array())); } print json_encode(array("status" => "OK", "token" => $key->access_key)); } public function __call($function, $args) { $access_token = $this->input->get("request_key"); $request = $this->input->post("request", null); if (empty($access_token)) { print json_encode(array("status" => "ERROR", "message" => (string)t("Authorization failed"))); return; } if (!empty($request)) { $method = strtolower($this->input->server("HTTP_X_HTTP_METHOD_OVERRIDE", "POST")); $request = json_decode($request); } else { print json_encode(array("status" => "ERROR", "message" => (string)t("Authorization failed"))); return; } try { $key = ORM::factory("rest_key") ->where("access_key", $access_token) ->find(); if (!$key->loaded) { print json_encode(array("status" => "ERROR", "message" => (string)t("Authorization failed"))); return; } $user = identity::lookup_user($key->user_id); if (empty($user)) { print json_encode(array("status" => "ERROR", "message" => (string)t("Authorization failed"))); return; } if (empty($args[0])) { print json_encode(array("status" => "ERROR", "message" => (string)t("Invalid request parameters"))); return; } $handler_class = "{$function}_rest"; $handler_method = "{$method}_{$args[0]}"; if (!method_exists($handler_class, $handler_method)) { Kohana::log("error", "$handler_class::$handler_method is not implemented"); print json_encode(array("status" => "ERROR", "message" => (string)t("Service not implemented"))); return; } $response = call_user_func(array($handler_class, $handler_method), $request); print json_encode($response); } catch (Exception $e) { Kohana::log("error", $e->__toString()); print json_encode(array("status" => "ERROR", "message" => (string)t("Internal error"))); } } }