/** * プラグイン規定関数::ブロック型で呼び出された場合の処理 * 認証済みの場合: 何もしない(空の画面を生成する) * 認証情報が指定されている場合: 認証処理を行う * 認証情報が指定されていない場合: 認証画面を生成する * * 引数: なし * * @return string 画面(html) */ function plugin_movieviewer_auth_convert() { global $vars; $manager = plugin_movieviewer_get_auth_manager(); $req_user_id = filter_input(INPUT_POST, "movieviewer_user"); // 認証開始 if ($req_user_id !== null && $req_user_id !== "") { try { plugin_movieviewer_validate_csrf_token(); } catch (MovieViewerValidationException $ex) { return plugin_movieviewer_auth_move_to_authpage(true); } try { plugin_movieviewer_validate_user_id($req_user_id); } catch (MovieViewerValidationException $ex) { return plugin_movieviewer_auth_move_to_authpage(true); } try { $maybe_user = plugin_movieviewer_get_user_repository()->findById($req_user_id); } catch (MovieViewerRepositoryObjectNotFoundException $ex) { plugin_movieviewer_auth_move_to_authpage(true); } $user_password = filter_input(INPUT_POST, 'movieviewer_password'); if (!$maybe_user->verifyPassword($user_password)) { return plugin_movieviewer_auth_move_to_authpage(true); } $manager->login($maybe_user); return ''; } // 認証済み if ($manager->isAuthenticated()) { return ''; } // 認証なし return plugin_movieviewer_auth_move_to_authpage(false); }
function getUser() { return plugin_movieviewer_get_user_repository()->findById($this->user_id); }
/** * [アクション] 動画再生画面を生成し、クライアントに送信する * * 注意: exitを呼ぶので、処理の最後に呼び出すこと * * @return void */ function plugin_movieviewer_action_show_movie() { date_default_timezone_set("Asia/Tokyo"); $settings = MovieViewerSettings::loadFromYaml(PLUGIN_MOVIEVIEWER_PATH_TO_SETTINGS); $cf_settings = $settings->aws['cloud_front']; $target = array("course" => filter_input(INPUT_POST, "course"), "session" => filter_input(INPUT_POST, "session"), "chapter" => filter_input(INPUT_POST, "chapter")); try { plugin_movieviewer_validate_course_id($target["course"]); } catch (MovieViewerValidationException $ex) { plugin_movieviewer_abort("指定した内容に誤りがあります。"); } try { plugin_movieviewer_validate_session_id($target["session"]); } catch (MovieViewerValidationException $ex) { plugin_movieviewer_abort("指定した内容に誤りがあります。"); } try { plugin_movieviewer_validate_chapter_id($target["chapter"]); } catch (MovieViewerValidationException $ex) { plugin_movieviewer_abort("指定した内容に誤りがあります。"); } $user_id = plugin_movieviewer_get_auth_manager()->getUserId(); $current_user = plugin_movieviewer_get_user_repository()->findById($user_id); $viewing_periods = plugin_movieviewer_get_viewing_periods_by_user_repository()->findById($user_id); $canView = $viewing_periods->canView($target['course'], $target['session']); if (!$canView) { plugin_movieviewer_abort("この動画は見ることができません。"); } $builder = new MovieViewerAwsCloudFrontUrlBuilder($cf_settings); $signed_path_rtmp = $builder->buildVideoRTMPUrl($target['course'], $target['session'], $target['chapter'], 24 * 60 * 60); $signed_path_hls = $builder->buildVideoHLSUrl($target['course'], $target['session'], $target['chapter'], 24 * 60 * 60); $base_uri = plugin_movieviewer_get_base_uri(); pkwk_common_headers(); header('Content-type: text/html'); print <<<EOC <video id="my_video_1" class="video-js vjs-default-skin vjs-big-play-centered" preload="auto" controls width="800" height="500" data-setup='{"techOrder":["flash","html5"]}'> <source src="rtmp://{$cf_settings['host']['video']['rtmp']}/cfx/st/&mp4:{$signed_path_rtmp}" type="rtmp/mp4"> <source src="{$signed_path_hls}" type="application/x-mpegURL"> </video> <p> 最大化ボタン <img src="{$base_uri}/plugin/movieviewer/assets/images/button-maximize.png"> は再生ボタン <img src="{$base_uri}/plugin/movieviewer/assets/images/button-play.png"> を押した後、表示されます。 </p> EOC; exit; }
private function updateLastLogin($user) { $repo = plugin_movieviewer_get_user_repository(); $repo->updateLastLogin($user); }
/** * [アクション] パスワードをリセットし、結果画面を生成する * * @return array ページ名, 画面(html) */ function plugin_movieviewer_reset_password_action_reset() { $page = plugin_movieviewer_get_current_page(); try { plugin_movieviewer_validate_csrf_token(); } catch (MovieViewerValidationException $ex) { return plugin_movieviewer_reset_password_error("不正なリクエストです。"); } $token_id = filter_input(INPUT_POST, 'token'); try { $token = plugin_movieviewer_get_user_reset_password_token_repository()->findById($token_id); } catch (MovieViewerRepositoryObjectNotFoundException $ex) { MovieViewerLogger::getLogger()->addError("トークンが見つからない", array("token" => $token_id)); return plugin_movieviewer_reset_password_error("パスワードの再設定ができませんでした。"); } try { $user = plugin_movieviewer_get_user_repository()->findById($token->user_id); } catch (MovieViewerRepositoryObjectNotFoundException $ex) { MovieViewerLogger::getLogger()->addError("ユーザが見つからない", array("token" => $token_id, "user" => $token->user_id)); return plugin_movieviewer_reset_password_error("パスワードの再設定ができませんでした。"); } $password = filter_input(INPUT_POST, 'movieviewer_password'); $password_confirm = filter_input(INPUT_POST, 'movieviewer_password_confirm'); if ($password !== $password_confirm) { $content = plugin_movieviewer_reset_password_action_confirm_generate_page($token, $user, "入力したパスワードとパスワード(確認)が一致しません。"); return array("msg" => $page, "body" => $content); } $user->setPassword($password); plugin_movieviewer_get_user_repository()->store($user); plugin_movieviewer_get_user_reset_password_token_repository()->delete($token); $content = <<<TEXT パスワードを更新しました。 TEXT; return array("msg" => $page, "body" => $content); }