|
1 | 1 | #!/bin/sh |
2 | 2 |
|
3 | | -version_number="4.11.0" |
| 3 | +version_number="4.12.0" |
4 | 4 |
|
5 | 5 | # UI |
6 | 6 |
|
@@ -208,13 +208,29 @@ select_quality() { |
208 | 208 | episode=$(printf "%s" "$result" | cut -d'>' -f2) |
209 | 209 | } |
210 | 210 |
|
| 211 | +decode_tobeparsed() { |
| 212 | + tmp="$(mktemp)" |
| 213 | + printf '%s' "$1" | base64 -d >"$tmp" |
| 214 | + iv="$(dd if="$tmp" bs=1 count=12 2>/dev/null | od -A n -t x1 | tr -d ' \n')" |
| 215 | + ctr="${iv}00000002" |
| 216 | + plain="$(dd if="$tmp" bs=1 skip=12 2>/dev/null | openssl enc -d -aes-256-ctr -K "$allanime_key" -iv "$ctr" -nosalt -nopad 2>/dev/null)" |
| 217 | + rm -f "$tmp" |
| 218 | + printf '%s' "$plain" | tr '{}' '\n' | sed -nE 's|.*"sourceUrl":"--([^"]*)".*"sourceName":"([^"]*)".*|\2 :\1|p' |
| 219 | +} |
| 220 | + |
211 | 221 | # gets embed urls, collects direct links into provider files, selects one with desired quality into $episode |
212 | 222 | get_episode_url() { |
213 | 223 | # get the embed urls of the selected episode |
214 | 224 | #shellcheck disable=SC2016 |
215 | 225 | episode_embed_gql='query ($showId: String!, $translationType: VaildTranslationTypeEnumType!, $episodeString: String!) { episode( showId: $showId translationType: $translationType episodeString: $episodeString ) { episodeString sourceUrls }}' |
216 | 226 |
|
217 | | - resp=$(curl -e "$allanime_refr" -s -H "Content-Type: application/json" -X POST "${allanime_api}/api" --data "{\"variables\":{\"showId\":\"$id\",\"translationType\":\"$mode\",\"episodeString\":\"$ep_no\"},\"query\":\"$episode_embed_gql\"}" -A "$agent" | tr '{}' '\n' | sed 's|\\u002F|\/|g;s|\\||g' | sed -nE 's|.*sourceUrl":"--([^"]*)".*sourceName":"([^"]*)".*|\2 :\1|p') |
| 227 | + api_resp="$(curl -e "$allanime_refr" -s -H "Content-Type: application/json" -X POST "${allanime_api}/api" --data "{\"variables\":{\"showId\":\"$id\",\"translationType\":\"$mode\",\"episodeString\":\"$ep_no\"},\"query\":\"$episode_embed_gql\"}" -A "$agent")" |
| 228 | + if printf "%s" "$api_resp" | grep -q '"tobeparsed"'; then |
| 229 | + blob="$(printf "%s" "$api_resp" | sed -nE 's|.*"tobeparsed":"([^"]*)".*|\1|p')" |
| 230 | + resp="$(decode_tobeparsed "$blob")" |
| 231 | + else |
| 232 | + resp="$(printf "%s" "$api_resp" | tr '{}' '\n' | sed 's|\\u002F|\/|g;s|\\||g' | sed -nE 's|.*sourceUrl":"--([^"]*)".*sourceName":"([^"]*)".*|\2 :\1|p')" |
| 233 | + fi |
218 | 234 | # generate links into sequential files |
219 | 235 | cache_dir="$(mktemp -d)" |
220 | 236 | providers="1 2 3 4" |
@@ -387,6 +403,7 @@ agent="Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:109.0) Gecko/20100101 Firefo |
387 | 403 | allanime_refr="https://allmanga.to" |
388 | 404 | allanime_base="allanime.day" |
389 | 405 | allanime_api="https://api.${allanime_base}" |
| 406 | +allanime_key="$(printf '%s' 'SimtVuagFbGR2K7P' | openssl dgst -sha256 -binary | od -A n -t x1 | tr -d ' \n')" |
390 | 407 | mode="${ANI_CLI_MODE:-sub}" |
391 | 408 | download_dir="${ANI_CLI_DOWNLOAD_DIR:-.}" |
392 | 409 | log_episode="${ANI_CLI_LOG:-1}" |
@@ -490,6 +507,10 @@ done |
490 | 507 | [ "$external_menu_normal_window" = "1" ] && external_menu_args="-normal-window" |
491 | 508 | printf "\33[2K\r\033[1;34mChecking dependencies...\033[0m\n" |
492 | 509 | dep_ch "curl" "sed" "grep" || true |
| 510 | +case "$(uname -o 2>/dev/null)" in |
| 511 | + *ndroid*) command -v openssl >/dev/null || die 'Program "openssl" not found. On Termux, install with: pkg install openssl-tool' ;; |
| 512 | + *) dep_ch "openssl" || true ;; |
| 513 | +esac |
493 | 514 | [ "$skip_intro" = 1 ] && (dep_ch "ani-skip" || true) |
494 | 515 | dep_ch "fzf" || true |
495 | 516 | case "$player_function" in |
|
0 commit comments