def _authenticate(self): if self.api.user_id: Core.warn("BUG: _authenticate() called twice") return True data = self._load_token() if data: Core.trace("loaded token: %r", data) if os.environ.get("FORCE_TOKEN_REFRESH"): token_valid = False else: token_valid = data["expires_at"] > time.time() if token_valid: Core.debug("access token within expiry time, using as-is") self.api.user_id = data["user_id"] self.api.access_token = data["access_token"] self.api.refresh_token = data["refresh_token"] return True else: Core.debug("access token has expired, renewing") try: token = self.api.auth(refresh_token=data["refresh_token"]) Core.trace("retrieved token: %r", token) except Exception as e: Core.warn("could not refresh access token: %r", e) #self._forget_token() else: self._store_token(token) return True data = self._load_creds() if data: Core.info("logging in to Pixiv as %r", data["login"]) try: token = self.api.auth(username=data["login"], password=data["password"]) except Exception as e: Core.warn("could not log in using username & password: %r", e) else: self._store_token(token) return True Core.die("could not log in to Pixiv (no credentials)") return False
# https://tools.ietf.org/html/draft-ietf-curdle-ssh-ed25519-00 def hash_data(hash_algo, data): if hash_algo in {"sha1", "sha256", "sha512"}: return hashlib.new(hash_algo, data).digest() else: raise UnsupportedHashType(hash_algo) rest = sys.argv[1:] if rest: cmd, *rest = rest else: Core.die("missing command (try 'sign' or 'verify')") if cmd == "sign": _ap = argparse.ArgumentParser() _ap.add_argument( "--fingerprint", help="Key fingerprint in 'MD5:<hex>' or 'SHA256:<b64>' format") _ap.add_argument("--input-hexdata") _ap.add_argument("--input-string") _ap.add_argument("--test-verify", action="store_true") _ap.add_argument("--namespace") args = _ap.parse_args(rest) if not args.fingerprint: Core.die("signing key (--fingerprint) not specified")