ianriizky /
moslempray
This project does not seem to handle request data directly as such no vulnerable execution paths were found.
include, or for example
via PHP's auto-loading mechanism.
| 1 | <?php |
||
| 2 | |||
| 3 | namespace Ianrizky\MoslemPray\Drivers; |
||
| 4 | |||
| 5 | use Exception; |
||
| 6 | use Ianrizky\MoslemPray\Contracts\Response\HasPrayerTime; |
||
| 7 | use Ianrizky\MoslemPray\Contracts\Response\HasPrayerTimeCollection; |
||
| 8 | use Ianrizky\MoslemPray\Response\MyQuran\City; |
||
| 9 | use Ianrizky\MoslemPray\Response\MyQuran\Collection\CityCollection; |
||
| 10 | use Ianrizky\MoslemPray\Response\MyQuran\Collection\PrayerTimeCollection; |
||
| 11 | use Ianrizky\MoslemPray\Response\MyQuran\Collection\TafsirCollection; |
||
| 12 | use Ianrizky\MoslemPray\Response\MyQuran\PrayerTime; |
||
| 13 | use Ianrizky\MoslemPray\Support\ParseDate; |
||
| 14 | use Illuminate\Http\Client\Response; |
||
| 15 | |||
| 16 | /** |
||
| 17 | * @see https://documenter.getpostman.com/view/841292/Tz5p7yHS |
||
| 18 | */ |
||
| 19 | class MyQuran extends AbstractDriver |
||
| 20 | { |
||
| 21 | 1 | use ParseDate; |
|
| 22 | |||
| 23 | /** |
||
| 24 | * List of configuration value. |
||
| 25 | * |
||
| 26 | * @var array |
||
| 27 | */ |
||
| 28 | protected $config = [ |
||
| 29 | 'url' => 'https://api.myquran.com/v1/', |
||
| 30 | ]; |
||
| 31 | |||
| 32 | /** |
||
| 33 | * Return city information based on the given identifier. |
||
| 34 | * |
||
| 35 | * @param mixed $identifier |
||
| 36 | * @return \Ianrizky\MoslemPray\Response\MyQuran\City |
||
| 37 | */ |
||
| 38 | 6 | public function getCity($identifier): City |
|
| 39 | { |
||
| 40 | 6 | if (is_numeric($identifier)) { |
|
| 41 | 2 | return $this->getCityFromId($identifier); |
|
| 42 | } |
||
| 43 | |||
| 44 | 4 | return $this->getCityFromName($identifier); |
|
| 45 | } |
||
| 46 | |||
| 47 | /** |
||
| 48 | * Return city information based on the given id. |
||
| 49 | * |
||
| 50 | * @param mixed $id |
||
| 51 | * @return \Ianrizky\MoslemPray\Response\MyQuran\City |
||
| 52 | * |
||
| 53 | * @see https://api.myquran.com/v1/sholat/kota/id/{id} |
||
| 54 | * @see https://documenter.getpostman.com/view/841292/Tz5p7yHS#88549bc5-cd70-4ba1-b565-f3eef882e060 (Sholat/Lokasi/ID Kota) |
||
| 55 | */ |
||
| 56 | 4 | public function getCityFromId($id): City |
|
| 57 | { |
||
| 58 | 4 | $response = $this->throwJsonError( |
|
| 59 | 4 | $this->request->get('/sholat/kota/id/' . $id) |
|
| 60 | ); |
||
| 61 | |||
| 62 | 2 | return new City([ |
|
| 63 | 2 | 'id' => data_get($response->json(), 'data.id'), |
|
| 64 | 2 | 'name' => data_get($response->json(), 'data.lokasi'), |
|
| 65 | ]); |
||
| 66 | } |
||
| 67 | |||
| 68 | /** |
||
| 69 | * Return city information based on the given name. |
||
| 70 | * |
||
| 71 | * @param string $name |
||
| 72 | * @return \Ianrizky\MoslemPray\Response\MyQuran\City |
||
| 73 | * |
||
| 74 | * @see https://api.myquran.com/v1/sholat/kota/cari/{name} |
||
| 75 | * @see https://documenter.getpostman.com/view/841292/Tz5p7yHS#ae4b237c-e97c-4353-9e94-67d155af06f8 (Sholat/Lokasi/Pencarian) |
||
| 76 | */ |
||
| 77 | 6 | public function getCityFromName(string $name): City |
|
| 78 | { |
||
| 79 | 6 | $response = $this->throwJsonError( |
|
| 80 | 6 | $this->request->get('/sholat/kota/cari/' . $name) |
|
| 81 | ); |
||
| 82 | |||
| 83 | 4 | return new City([ |
|
| 84 | 4 | 'id' => data_get($response->json(), 'data.0.id'), |
|
| 85 | 4 | 'name' => data_get($response->json(), 'data.0.lokasi'), |
|
| 86 | ]); |
||
| 87 | } |
||
| 88 | |||
| 89 | /** |
||
| 90 | * Return list of all city. |
||
| 91 | * |
||
| 92 | * @return \Ianrizky\MoslemPray\Response\MyQuran\Collection\CityCollection |
||
| 93 | * |
||
| 94 | * @see https://api.myquran.com/v1/sholat/kota/semua |
||
| 95 | * @see https://documenter.getpostman.com/view/841292/Tz5p7yHS#145bcb30-dba6-4d24-9799-03ba878b5476 (Sholat/Lokasi/Semua Kota) |
||
| 96 | */ |
||
| 97 | 1 | public function getCities(): CityCollection |
|
| 98 | { |
||
| 99 | 1 | $response = $this->throwJsonError( |
|
| 100 | 1 | $this->request->get('/sholat/kota/semua') |
|
| 101 | ); |
||
| 102 | |||
| 103 | 1 | return new CityCollection(array_map(function ($data) { |
|
| 104 | return [ |
||
| 105 | 1 | 'id' => $data['id'], |
|
| 106 | 1 | 'name' => $data['lokasi'], |
|
| 107 | ]; |
||
| 108 | 1 | }, $response->json())); |
|
| 109 | } |
||
| 110 | |||
| 111 | /** |
||
| 112 | * {@inheritDoc} |
||
| 113 | * |
||
| 114 | * @return \Ianrizky\MoslemPray\Response\MyQuran\PrayerTime |
||
| 115 | * |
||
| 116 | * @see https://api.myquran.com/v1/sholat/jadwal/{city_id}/{year}/{month}/{date} |
||
| 117 | * @see https://documenter.getpostman.com/view/841292/Tz5p7yHS#534da562-3335-4a1f-bca2-d7ee2266f457 (Sholat/Jadwal/Per Hari) |
||
| 118 | */ |
||
| 119 | 1 | public function getPrayerTime($city, $date = null): HasPrayerTime |
|
| 120 | { |
||
| 121 | 1 | $city = $this->getCity($city); |
|
| 122 | 1 | $date = $this->parseDate($date); |
|
| 123 | |||
| 124 | 1 | $response = $this->throwJsonError( |
|
| 125 | 1 | $this->request->get(sprintf('/sholat/jadwal/%s/%s', $city->id, $date->format('Y/m/d'))) |
|
| 126 | ); |
||
| 127 | |||
| 128 | 1 | return PrayerTime::fromResponse($response); |
|
| 129 | } |
||
| 130 | |||
| 131 | /** |
||
| 132 | * {@inheritDoc} |
||
| 133 | * |
||
| 134 | * @return \Ianrizky\MoslemPray\Response\MyQuran\Collection\PrayerTimeCollection |
||
| 135 | * |
||
| 136 | * @see https://api.myquran.com/v1/sholat/jadwal/{city_id}/{year}/{month} |
||
| 137 | * @see https://documenter.getpostman.com/view/841292/Tz5p7yHS#b0b39104-8216-49fc-9d3b-ea53e5832e16 (Sholat/Jadwal/Per Bulan) |
||
| 138 | */ |
||
| 139 | 1 | public function getPrayerTimePerMonth($city, $year = null, int $month = null): HasPrayerTimeCollection |
|
| 140 | { |
||
| 141 | 1 | $city = $this->getCity($city); |
|
| 142 | |||
| 143 | 1 | if ($year && $month) { |
|
|
0 ignored issues
–
show
|
|||
| 144 | $date = $this->parseDate($year . '-' . $month . '-1'); |
||
| 145 | } else { |
||
| 146 | 1 | $date = $this->parseDate($year); |
|
| 147 | } |
||
| 148 | |||
| 149 | 1 | $response = $this->throwJsonError( |
|
| 150 | 1 | $this->request->get(sprintf('/sholat/jadwal/%s/%s', $city->id, $date->format('Y/m'))) |
|
| 151 | ); |
||
| 152 | |||
| 153 | 1 | return PrayerTimeCollection::fromResponse($response); |
|
| 154 | } |
||
| 155 | |||
| 156 | /** |
||
| 157 | * Return list of tafsir based on the given ayat number. |
||
| 158 | * |
||
| 159 | * @param int $ayat |
||
| 160 | * @return \Ianrizky\MoslemPray\Response\MyQuran\Collection\TafsirCollection |
||
| 161 | * |
||
| 162 | * @see https://api.myquran.com/v1/tafsir/quran/kemenag/id/{id} |
||
| 163 | * @see https://documenter.getpostman.com/view/841292/Tz5p7yHS#9065c3f0-23b7-48b6-884a-a28da0826e03 (Tafsir/alQuran/Kemenag/id) |
||
| 164 | */ |
||
| 165 | 1 | public function getTafsir(int $ayat): TafsirCollection |
|
| 166 | { |
||
| 167 | 1 | $response = $this->throwJsonError( |
|
| 168 | 1 | $this->request->get('/tafsir/quran/kemenag/id/' . $ayat) |
|
| 169 | ); |
||
| 170 | |||
| 171 | 1 | return TafsirCollection::fromResponse($response); |
|
| 172 | } |
||
| 173 | |||
| 174 | /** |
||
| 175 | * {@inheritDoc} |
||
| 176 | */ |
||
| 177 | 12 | protected function throwJsonError(Response $response): Response |
|
| 178 | { |
||
| 179 | 12 | $status = data_get($response->json(), 'status', true); |
|
| 180 | 12 | $message = data_get($response->json(), 'message', 'MyQuran API error'); |
|
| 181 | |||
| 182 | 12 | if (!$status) { |
|
| 183 | 4 | throw new Exception($message); |
|
| 184 | } |
||
| 185 | |||
| 186 | 8 | return $response; |
|
| 187 | } |
||
| 188 | } |
||
| 189 |
In PHP, under loose comparison (like
==, or!=, orswitchconditions), values of different types might be equal.For
integervalues, zero is a special case, in particular the following results might be unexpected: