Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Sites Giving 404 error or no profile #1189

Closed
1 of 5 tasks
ajtazer opened this issue Nov 23, 2021 · 9 comments
Closed
1 of 5 tasks

Sites Giving 404 error or no profile #1189

ajtazer opened this issue Nov 23, 2021 · 9 comments
Labels
bug Something isn't working

Comments

@ajtazer
Copy link

ajtazer commented Nov 23, 2021

Checklist

  • I'm reporting a bug in Sherlock's functionality
  • The bug I'm reporting is not a false positive or a false negative
  • I've verified that I'm running the latest version of Sherlock
  • I've checked for similar bug reports including closed ones
  • I've checked for pull requests that attempt to fix this bug

Description

There are some sites which comes in result of matched Usernames but tends to give No Profile Page or a 404 Error,
those sites are below..

[+] Anilist: https://anilist.co/user/
[+] Coil: https://coil.com/u/
[+] RuneScape: https://apps.runescape.com/runemetrics/app/overview/player/
[+] TrackmaniaLadder: http://en.tm-ladder.com/_rech.php
[+] babyblogRU: https://www.babyblog.ru/user/info

@ajtazer ajtazer added the bug Something isn't working label Nov 23, 2021
@sdushantha
Copy link
Member

@SethFalco I think you were the one who added Anilist, could you take a look at that site?

@SethFalco
Copy link
Contributor

SethFalco commented Nov 23, 2021

I added the Anilist, Coil, and RuneScape, I can look at the 3 of them either this evening (UTC + 2) or on the weekend.

@BlackdestinyXX
Copy link

Yep, I can confirm that

@SethFalco
Copy link
Contributor

SethFalco commented Nov 26, 2021

Hmm, with how Sherlock currently works, I'm wondering if it's possible to cover 2 of them properly.

For now, we can move Anilist and Coil to removed sites, maybe? In future it'd be nice to discuss if we can add more errorTypes or options for them to cover these cases?

Anilist

So Anilist is failing because the 404 isn't the initial response, but rather a response further down on their graphql endpoint.

image

This could be possible to fix if there was an option to do a custom HTTP request. Like a detection that queries an API or GraphQL and checks if the response matches the success/failure schema.

Coil

These are failing because we're not executing JavaScript (which is fair enough) but the message specified only appear after JavaScript is fetched and executed. Sherlock only looks at the initial response, which in the cases of Coil and RuneScape only include the common HTML shared with every page and links to their JavaScript bundles.

Coil could be fixed similarly to Anilist. i.e. Make a POST request and checking if the response matches a success/failure schema.

The (formatted) initial response for Coil, for example:

<!doctype html>
<html lang="en" dir="ltr">

<head>
  <meta charset="utf-8">
  <meta name="viewport"
    content="user-scalable=0,initial-scale=1,minimum-scale=1,width=device-width,height=device-height">
  <meta name="theme-color" content="#000000">
  <title>Coil</title>
  <link rel="icon" type="image/png"
    href="https://cdn.coil.com/assets/favicon.png" />
  <link href="https://cdn.coil.com/assets/fonts/circular-std/circularstd.css"
    rel="stylesheet">
  <link href="https://cdn.coil.com/assets/fonts/roboto-mono/roboto-mono.css"
    rel="stylesheet">
  <link
    href="https://cdn.coil.com/assets/fonts/material-icons/material-icons.css"
    rel="stylesheet">
  <script>document.monetization ? document.monetizationExtensionInstalled = !0 : (document.monetization = document.createElement("div"), document.monetization.state = "stopped")</script>
  <script src="https://cdn.coil.com/coil-oauth-wm.v6.beta.js"
    defer="defer"></script><noscript id="jss-insertion-point"></noscript>
  <link href="/static/css/2.6673ab0d.chunk.css" rel="stylesheet">
</head>

<body>
  <div id="root"></div>
  <script>!function (c) { function e(e) { for (var r, t, n = e[0], o = e[1], u = e[2], i = 0, a = []; i < n.length; i++)t = n[i], f[t] && a.push(f[t][0]), f[t] = 0; for (r in o) Object.prototype.hasOwnProperty.call(o, r) && (c[r] = o[r]); for (d && d(e); a.length;)a.shift()(); return p.push.apply(p, u || []), l() } function l() { for (var e, r = 0; r < p.length; r++) { for (var t = p[r], n = !0, o = 1; o < t.length; o++) { var u = t[o]; 0 !== f[u] && (n = !1) } n && (p.splice(r--, 1), e = s(s.s = t[0])) } return e } var t = {}, f = { 1: 0 }, p = []; function s(e) { if (t[e]) return t[e].exports; var r = t[e] = { i: e, l: !1, exports: {} }; return c[e].call(r.exports, r, r.exports, s), r.l = !0, r.exports } s.e = function (u) { var e = [], t = f[u]; if (0 !== t) if (t) e.push(t[2]); else { var r = new Promise(function (e, r) { t = f[u] = [e, r] }); e.push(t[2] = r); var n, i = document.createElement("script"); i.charset = "utf-8", i.timeout = 120, s.nc && i.setAttribute("nonce", s.nc), i.src = s.p + "static/js/" + ({}[u] || u) + "." + { 3: "3b00d1c9", 4: "26e58311" }[u] + ".chunk.js", n = function (e) { i.onerror = i.onload = null, clearTimeout(a); var r = f[u]; if (0 !== r) { if (r) { var t = e && ("load" === e.type ? "missing" : e.type), n = e && e.target && e.target.src, o = new Error("Loading chunk " + u + " failed.\n(" + t + ": " + n + ")"); o.type = t, o.request = n, r[1](o) } f[u] = void 0 } }; var a = setTimeout(function () { n({ type: "timeout", target: i }) }, 12e4); i.onerror = i.onload = n, document.head.appendChild(i) } return Promise.all(e) }, s.m = c, s.c = t, s.d = function (e, r, t) { s.o(e, r) || Object.defineProperty(e, r, { enumerable: !0, get: t }) }, s.r = function (e) { "undefined" != typeof Symbol && Symbol.toStringTag && Object.defineProperty(e, Symbol.toStringTag, { value: "Module" }), Object.defineProperty(e, "__esModule", { value: !0 }) }, s.t = function (r, e) { if (1 & e && (r = s(r)), 8 & e) return r; if (4 & e && "object" == typeof r && r && r.__esModule) return r; var t = Object.create(null); if (s.r(t), Object.defineProperty(t, "default", { enumerable: !0, value: r }), 2 & e && "string" != typeof r) for (var n in r) s.d(t, n, function (e) { return r[e] }.bind(null, n)); return t }, s.n = function (e) { var r = e && e.__esModule ? function () { return e.default } : function () { return e }; return s.d(r, "a", r), r }, s.o = function (e, r) { return Object.prototype.hasOwnProperty.call(e, r) }, s.p = "/", s.oe = function (e) { throw console.error(e), e }; var r = window.webpackJsonp = window.webpackJsonp || [], n = r.push.bind(r); r.push = e, r = r.slice(); for (var o = 0; o < r.length; o++)e(r[o]); var d = n; l() }([])</script>
  <script src="/static/js/2.0633994c.chunk.js"></script>
  <script src="/static/js/main.2dfdce89.chunk.js"></script>
</body>

</html>

image

RuneScape

Had the same issue as Coil, but I can update this one to use a restful endpoint that only requires query parameters.

This was referenced Nov 26, 2021
@SethFalco
Copy link
Contributor

I've also checked the other 2 while I was at it.

TrackmaniaLadder

Looks like the issue for this one is rate limited related? If you try to query for a profile too quickly from the previous, it has a different error message. (From my testing, around 4 times a minute will trigger this.)

permission denied. You cannot use this request or you call it too often.

babyblogRU

Seems they've changed the URL for this one, but they've also made it so not found users result in a redirect which means it can move away from errorType: message. I'll make a separate PR for this one.

@sdushantha
Copy link
Member

A This could be possible to fix if there was an option to do a custom HTTP request

We have #861 but it is a little broken at the moment. If that gets fixed I am certain we are able to bring back a lot of sites. This is because many sites check the username availability through a post request.

@SethFalco
Copy link
Contributor

Nice, the only thing left immediately for this should be TrackmaniaLadder. What's the best move there?
I don't think Sherlock has a state for "unable to determine", maybe for now the site could be removed, and it can be added back later when such a state exists?

Then in the case of an internal server error, unable to connect, or rate limit, it can return a neutral response instead?

@sdushantha
Copy link
Member

It can be removed for now and we can take a further look at such responses later

@SethFalco
Copy link
Contributor

Closing this in favor of:

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn't working
Projects
None yet
Development

No branches or pull requests

4 participants