プロジェクト

全般

プロフィール

Bug(バグ) #4469

JSON API diary/search が 401 エラーになる

isao sanoほぼ4年前に追加. 約3年前に更新.

ステータス:
Accepted(着手)
優先度:
Normal(通常)
担当者:
対象バージョン:
開始日:
2020-06-22
期日:
進捗率:

0%

3.6 で発生するか:
Unknown (未調査)
[QA]バグ通知済:
いいえ
3.8 で発生するか:
Yes (はい)

説明

概要

JSON API diary/search が

401 Unauthorized: apiKey parameter not specified.

となる


関連するチケット

関連している OpenPNE 3 - Task(タスク) #4433: JSON API ドキュメントの見直しと修正 Pending Testing(テスト待ち) 2020-04-06
関連している opDiaryPlugin - Bug(バグ) #4496: JSON API diary/search.json にてパラメータは正しいが結果がない場合にも HTTPステータスコード400 が返却される Pending Review(レビュー待ち) 2021-02-04

履歴

#1 isao sanoほぼ4年前に更新

#2 kaoru nほぼ4年前に更新

  • 対象バージョンOpenPNE 3.10.x から OpenPNE 3.11.x に変更

#3 isao sano3年以上前に更新

400 Bad Request: invalid target と表示される

#4 kaoru n約3年前に更新

  • プロジェクトOpenPNE 3 から opDiaryPlugin に変更
  • 対象バージョン を削除 (OpenPNE 3.11.x)
  • [QA]バグ通知済いいえ にセット

#5 kaoru n約3年前に更新

  • 対象バージョンdev-1.5.x にセット

#6 kaoru n約3年前に更新

  • ステータスNew(新規) から Accepted(着手) に変更
  • 担当者kaoru n にセット

& をエスケープした場合

$ curl http://{snip}/api.php/diary/search.json?apiKey={snip}\&id=1
$ 400 Bad Request: invalid target

$ curl http://{snip}/api.php/diary/search.json?id=1\&apiKey={snip}
$ 400 Bad Request: invalid target

& をエスケープしなかった場合

$ curl http://{snip}/api.php/diary/search.json?apiKey={snip}&id=1
$ 400 Bad Request: invalid target

$ curl http://{snip}/api.php/diary/search.json?id=1&apiKey={snip}
$ 401 Unauthorized: apiKey parameter not specified.

#7 kaoru n約3年前に更新

target パラメータが必要

https://github.com/tejimaya/opDiaryPlugin/blob/dev-1.5.x/lib/action/opDiaryPluginAPIActions.class.php#L28-L55

    switch ($target)
    {
      case 'list' :
        $publicFlag = DiaryTable::PUBLIC_FLAG_SNS;
        $pager = $table->getDiaryPager($options['page'], $options['limit'], $publicFlag);
        break;
      case 'list_mine':
        $pager = $table->getMemberDiaryPager($myMember->id, $options['page'], $options['limit'], $myMember->id);
        break;
      case 'list_member' :
        $memberId = $request->getParameter('member_id');
        if (!$memberId)
        {
          $pager = $table->getMemberDiaryPager($myMember->id, $options['page'], $options['limit'], $myMember->id);
        }
        else
        {
          $this->forward403If($this->isAccessBlockFromMember($memberId));
          $pager = $table->getMemberDiaryPager($memberId, $options['page'], $options['limit'], $myMember->id);
        }
        break;
      case 'list_friend' :
        $pager = $table->getFriendDiaryPager($myMember->id, $options['page'], $options['limit']);
        break;
      default:
        throw new Exception('invalid target');
        break;
    }

#8 kaoru n約3年前に更新

diary/search のリクエストパラメータ

・target 必須、以下のいずれかを指定する
  diary: 指定された diary_id の日記情報を取得、ただし指定したapiKeyのメンバーに閲覧権限がない場合は「400 Bad Request」が返却される
  list: 公開範囲が「Web全体に公開」、「全員に公開」に設定されている日記の一覧を取得
  list_mine: 指定した apiKey のメンバーの日記の一覧を取得、公開範囲が「公開しない」ものも含む
  list_member:
    - member_id を指定しない場合は、list_mine と同じ一覧を取得
    - 指定した member_id が指定した apiKey のメンバーのメンバーIDの場合は list_mine と同じ一覧を取得
    - 指定した member_id が指定した apiKey のメンバーのフレンドの場合は、
     公開範囲が「Web全体に公開」、「全員に公開」、「マイフレンドまで公開」に設定されている member_id の日記一覧を取得
    - 指定した member_id が指定した apiKey のメンバーのフレンドではない場合は、
     公開範囲が「Web全体に公開」、「全員に公開」に設定されている member_id の日記一覧を取得

・diary_id
  target = diary の場合に必須、閲覧したい日記のIDを指定する
  指定した diary_id が存在しない場合は「400 Bad Request: diary does not exist」が返却される

・member_id
  target = list_member の場合に指定可能、それ以外の場合の指定は無効
  指定した member_id が存在しない場合は「{status: "success", data: [ ], data_count: 0}」が返却される

・page
  指定されない場合のデフォルト値は「1」
  target = diary の場合の指定は無効

・limit
  指定されない場合のデフォルト値は、管理画面→プラグイン設定→ opDiaryPlugin 設定→日記API取得件数 に設定された件数
  target = diary の場合の指定は無効

パラメータがあっているが、データが存在しなかった場合に「400 Bad Request」を返却しているが、「{status: "success", data: [ ], data_count: 0}」を返却すべき
これは別件であるので、別チケットを作成して修正する

#9 kaoru n約3年前に更新

  • 関連している Bug(バグ) #4496: JSON API diary/search.json にてパラメータは正しいが結果がない場合にも HTTPステータスコード400 が返却される を追加

他の形式にエクスポート: Atom PDF