コード例 #1
0
/**
 * プラグイン規定関数::ブロック型で呼び出された場合の処理
 * 認証済みの場合: 何もしない(空の画面を生成する)
 * 認証情報が指定されている場合: 認証処理を行う
 * 認証情報が指定されていない場合: 認証画面を生成する
 *
 * 引数: なし
 *
 * @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);
}
コード例 #2
0
 function getUser()
 {
     return plugin_movieviewer_get_user_repository()->findById($this->user_id);
 }
コード例 #3
0
/**
 * [アクション] 動画再生画面を生成し、クライアントに送信する
 *
 * 注意: 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;
}
コード例 #4
0
 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);
}