Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
19 changes: 18 additions & 1 deletion app/Http/Controllers/Core/DefaultController.php
Original file line number Diff line number Diff line change
Expand Up @@ -742,12 +742,22 @@ public function invokeGetJson(Request $request, $plugin_name, $action = null, $p
// app\Http\Middleware\ConnectPage.php でセットした値
$page = $request->attributes->get('page');
$pages = $request->attributes->get('pages');
$http_status_code = $request->attributes->get('http_status_code');

// 403/404 判定済みのリクエストは処理を継続させない。
if ($http_status_code) {
abort($http_status_code);
}

// アプリのロケールを変更
$this->setAppLocale($page);

// プラグインのインスタンス生成
$frame = Frame::find($frame_id);
$frame = $request->attributes->get('frame');
if (empty($frame)) {
abort(404);
}

$class_name = $this->getClassName($frame->plugin_name);
// $plugin_instance = new $class_name($this->page, $frame, $this->pages);
$plugin_instance = new $class_name($page, $frame, $pages);
Expand Down Expand Up @@ -920,6 +930,13 @@ public function invokePostRedirect(Request $request, $plugin_name, $action = nul
*/
public function invokePostDownload(Request $request, $plugin_name, $action = null, $page_id = null, $frame_id = null, $id = null)
{
$http_status_code = $request->attributes->get('http_status_code');

// 403/404 判定済みのリクエストは処理を継続させない。
if ($http_status_code) {
abort($http_status_code);
}

// プラグイン毎に動的にnew する。
// Todo:プラグインを動的にインスタンス生成すること。

Expand Down
1 change: 0 additions & 1 deletion app/Http/Controllers/Core/UploadController.php
Original file line number Diff line number Diff line change
Expand Up @@ -162,7 +162,6 @@ public function getFile(Request $request, $id = null)
'jpe',
'jpeg',
'gif',
'html',
];

// サムネイル指定の場合は、キャッシュを使ってファイルを返す。
Expand Down
91 changes: 67 additions & 24 deletions app/Http/Middleware/ConnectPage.php
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@ class ConnectPage
* ・pages
* ・top_page
* ・page_tree (pageがあれば)
* ・frame (routeにframe_idがある場合。frameが存在しなければnull)
* ・http_status_code (403, 404エラー時で403,404ページを指定していた場合)
* ・全ビュー間のデータ共有
* ・page_list
Expand All @@ -49,10 +50,17 @@ public function handle($request, Closure $next)

$router = app(Router::class);

// frame_id があれば先にフレームを取得し、同一リクエスト内で再利用する。
$route_frame_id = $request->route('frame_id');
if (!empty($route_frame_id)) {
$request->attributes->add(['frame' => Frame::find($route_frame_id)]);
}

// ページの特定
if (!empty($request->page_id)) {
$route_page_id = $request->route('page_id');
if (!empty($route_page_id)) {
// ページID が渡ってきた場合
$this->page = Page::where('id', $request->page_id)->first();
$this->page = Page::where('id', $route_page_id)->first();
} else {
// ページID が渡されなかった場合、URL から取得
$this->page = $this->getCurrentPage();
Expand Down Expand Up @@ -150,7 +158,7 @@ public function handle($request, Closure $next)
// 現在のページが参照可能か判定して、NG なら403 ページを振り向ける。
// (ページがある(管理画面ではページがない)&IP制限がかかっていない場合は参照OK)
// HTTP ステータスコード(null なら200)
$http_status_code = $this->checkPageForbidden($page_tree, $router);
$http_status_code = $this->checkPageForbidden($request, $page_tree, $router);
if ($http_status_code) {
// requestにセット
$request->attributes->add(['http_status_code' => $http_status_code]);
Expand Down Expand Up @@ -225,17 +233,8 @@ private function checkPageNotFound($request, $router)
}

// 対象となる処理は、画面を持つルートの処理とする。
// bugfix: php artisan route:list 実行時「Call to a member function getName() on null」エラー対応
// $route_name = $router->current()->getName();
$route_name = is_null($router->current()) ? null : $router->current()->getName();
if ($route_name == 'get_plugin' ||
$route_name == 'post_plugin' ||
$route_name == 'post_redirect' ||
$route_name == 'get_redirect' ||
$route_name == 'get_all' ||
$route_name == 'post_all') {
// 対象として次へ
} else {
if (!$this->isPageLimitCheckRoute($route_name)) {
// 対象外の処理なので、戻る
return;
}
Expand Down Expand Up @@ -383,22 +382,20 @@ private function getPage($permanent_link, $language = null)
*
* ($this->page 有り+チェックする $route_name なら、参照可否チェック)
*/
private function checkPageForbidden($page_tree, $router)
private function checkPageForbidden($request, $page_tree, $router)
{
// 対象となる処理は、画面を持つルートの処理とする。
$route_name = $router->current()->getName();
if ($route_name == 'get_plugin' ||
$route_name == 'post_plugin' ||
$route_name == 'post_redirect' ||
$route_name == 'get_redirect' ||
$route_name == 'get_all' ||
$route_name == 'post_all') {
// 対象として次へ
} else {
// 対象となる処理は、ページ/フレームの情報を受け取るルートとする。
$route_name = is_null($router->current()) ? null : $router->current()->getName();
if (!$this->isPageLimitCheckRoute($route_name)) {
// 対象外の処理なので、戻る
return;
}

// page_id と frame_id の組み合わせが不整合なら、不正アクセスとして 403 扱いにする。
if (!$this->isValidPageAndFrame($request)) {
return $this->doForbidden();
}

if ($this->page && get_class($this->page) == 'App\Models\Common\Page') {
// 親子ページを加味してページ表示できるか
$is_view = $this->page->isVisibleAncestorsAndSelf($page_tree);
Expand All @@ -411,6 +408,52 @@ private function checkPageForbidden($page_tree, $router)
return;
}

/**
* ページ閲覧制限チェックの対象ルート判定
*/
private function isPageLimitCheckRoute($route_name)
{
return in_array($route_name, [
'get_plugin',
'post_plugin',
'get_json',
'post_json',
'post_redirect',
'get_redirect',
'post_download',
'get_download',
'get_all',
'post_all',
], true);
}

/**
* page_id と frame_id の整合性判定
*/
private function isValidPageAndFrame($request)
{
$route_page_id = $request->route('page_id');
$route_frame_id = $request->route('frame_id');

// frame_id がなければ判定不要
if (empty($route_frame_id)) {
return true;
}

// frame_id があるのに page_id がない場合は不正
if (empty($route_page_id)) {
return false;
}

// frameはhandle()で事前に取得済み
$frame = $request->attributes->get('frame');
if (empty($frame)) {
return false;
}

return ((int)$frame->page_id === (int)$route_page_id);
}

/**
* 403 処理
* (ConnectController から移動してきた)
Expand Down
17 changes: 0 additions & 17 deletions app/Models/User/Codestudies/Codestudies.php

This file was deleted.

2 changes: 1 addition & 1 deletion app/Models/User/Forms/FormsColumns.php
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ class FormsColumns extends Model
use UserableNohistory;

// 更新する項目の定義
protected $fillable = ['forms_id', 'column_type', 'column_name', 'required', 'frame_col', 'caption', 'caption_color', 'place_holder', 'minutes_increments', 'minutes_increments_from', 'minutes_increments_to', 'rule_allowed_numeric', 'rule_allowed_alpha_numeric', 'rule_digits_or_less', 'rule_max', 'rule_min', 'rule_word_count', 'rule_date_after_equal', 'display_sequence'];
protected $fillable = ['forms_id', 'column_type', 'column_name', 'required', 'frame_col', 'caption', 'caption_color', 'place_holder', 'minutes_increments', 'minutes_increments_from', 'minutes_increments_to', 'rule_allowed_numeric', 'rule_allowed_alpha_numeric', 'rule_digits_or_less', 'rule_max', 'rule_min', 'rule_word_count', 'rule_date_after_equal', 'rule_file_extensions', 'rule_file_max_kb', 'display_sequence'];

/**
* ファイルタイプのカラム型か
Expand Down
29 changes: 26 additions & 3 deletions app/Plugins/Manage/PageManage/PageManage.php
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@
use App\User;
use App\Utilities\Csv\CsvUtils;
use App\Utilities\String\StringUtils;
use App\Utilities\Url\UrlUtils;
use Carbon\Carbon;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Storage;
Expand Down Expand Up @@ -1040,15 +1041,36 @@ public function migrationGet($request, $page_id)
// 項目のエラーチェック
$validator = Validator::make($request->all(), [
'source_system' => 'required',
'url' => 'required',
'url' => [
'required',
'url',
function ($attribute, $value, $fail) {
if (!UrlUtils::isGlobalHttpUrl((string) $value)) {
$fail('移行元URLには、グローバルな http/https URL(プライベート/予約アドレス以外)を指定してください。');
}
},
],
'use_proxy' => 'sometimes|accepted',
'destination_page_id' => 'required',
]);
$validator->setAttributeNames([
'source_system' => '移行元システム',
'url' => '移行元URL',
'use_proxy' => 'プロキシ使用',
'destination_page_id' => '移行先ページ',
]);

$use_proxy = $request->boolean('use_proxy');
if ($use_proxy) {
$proxy_tunnel_enabled = (bool) config('connect.HTTPPROXYTUNNEL');
$proxy_host = trim((string) config('connect.PROXY'));
if (!$proxy_tunnel_enabled || $proxy_host === '') {
$validator->after(function ($validator) {
$validator->errors()->add('use_proxy', 'プロキシを使用する場合は、プロキシ設定(HTTPPROXYTUNNEL / PROXY)を設定してください。');
});
}
}

// エラーがあった場合は入力画面に戻る。
if ($validator->fails()) {
return redirect('manage/page/migrationOrder/' . $page_id)
Expand All @@ -1074,14 +1096,15 @@ public function migrationGet($request, $page_id)
}

// 移行元システムによって処理を分岐
$migration_http_options = ['use_proxy' => $use_proxy];
if ($request->source_system == WebsiteType::netcommons2) {
// TODO: netcommons2 からの移行
} elseif ($request->source_system == WebsiteType::netcommons3) {
// netcommons3 からの移行
$this->migrationNC3Page($request->url, $request->destination_page_id);
$this->migrationNC3Page($request->url, $request->destination_page_id, $migration_http_options);
} elseif ($request->source_system == WebsiteType::html) {
// html からの移行
$this->migrationHtmlPage($request->url, $request->destination_page_id);
$this->migrationHtmlPage($request->url, $request->destination_page_id, $migration_http_options);
}

// リクエストを送信した時間をファイルに書き込む
Expand Down
13 changes: 7 additions & 6 deletions app/Plugins/Mypage/ProfileMypage/ProfileMypage.php
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,6 @@
use App\Plugins\Mypage\MypagePluginBase;
use App\Rules\CustomValiLoginIdAndPasswordDoNotMatch;
use App\Rules\CustomValiUserEmailUnique;
use App\User;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Hash;
use Illuminate\Support\Facades\Validator;
Expand Down Expand Up @@ -75,9 +74,11 @@ public function index($request, $id = null)
/**
* 更新
*/
public function update($request, $id)
public function update($request, $id = null)
{
$user = User::where('id', $id)->first();
// URLのidではなく、ログインユーザー自身のみを更新対象にする。
$user = Auth::user();
$user_id = $user->id;

// ユーザーのカラム
$users_columns_all = UsersTool::getUsersColumns($user->columns_set_id);
Expand All @@ -100,11 +101,11 @@ public function update($request, $id)
$base_rules = ['required', 'string', 'max:255'];
$validator_array['column']['name'] = UsersTool::getDefaultColumnAdditionalRules($base_rules, $users_column);
} elseif ($users_column->column_type == UserColumnType::login_id) {
$base_rules = ['required', 'max:255', Rule::unique('users', 'userid')->ignore($id)];
$base_rules = ['required', 'max:255', Rule::unique('users', 'userid')->ignore($user_id)];
$validator_array['column']['userid'] = UsersTool::getDefaultColumnAdditionalRules($base_rules, $users_column);
} elseif ($users_column->column_type == UserColumnType::user_email) {
// $validator_array['column']['email'] = ['nullable', 'email', 'max:255', Rule::unique('users')->ignore($id)];
$base_rules = ['email', 'max:255', new CustomValiUserEmailUnique($request->columns_set_id, $id)];
$base_rules = ['email', 'max:255', new CustomValiUserEmailUnique($user->columns_set_id, $user_id)];
if ($users_column->required) {
array_unshift($base_rules, 'required');
} else {
Expand Down Expand Up @@ -146,7 +147,7 @@ function ($attribute, $value, $fail) {
// チェックしない
} else {
// バリデータールールをセット
$validator_array = UsersTool::getValidatorRule($validator_array, $users_column, $user->columns_set_id, $id);
$validator_array = UsersTool::getValidatorRule($validator_array, $users_column, $user->columns_set_id, $user_id);
}
}

Expand Down
Loading
Loading