private[github] def installations()

in modules/core/src/main/scala/org/scalasteward/core/forge/github/GitHubAuthAlg.scala [118:158]


  private[github] def installations(jwt: String): F[List[InstallationOut]] =
    client
      .getAll[List[InstallationOut]](
        (apiUri / "app" / "installations").withQueryParam("per_page", 100),
        addHeaders(jwt)
      )
      .compile
      .foldMonoid

  /** [[https://docs.github.com/en/free-pro-team@latest/rest/reference/apps#create-an-installation-access-token-for-an-app]]
    */
  private[github] def accessToken(jwt: String, installationId: Long): F[TokenOut] =
    client.post(
      apiUri / "app" / "installations" / installationId.toString / "access_tokens",
      addHeaders(jwt)
    )

  /** [[https://docs.github.com/en/free-pro-team@latest/developers/apps/authenticating-with-github-apps#authenticating-as-a-github-app]]
    */
  private[github] def createJWT(ttl: FiniteDuration): F[String] =
    F.delay(System.currentTimeMillis()).flatMap(createJWT(ttl, _))

  private[github] def createJWT(ttl: FiniteDuration, nowMillis: Long): F[String] =
    F.delay {
      Security.addProvider(new BouncyCastleProvider())
      val ttlMillis = ttl.toMillis
      val now = new Date(nowMillis)
      val signingKey = readPrivateKey(appKeyFile)
      val builder = Jwts
        .builder()
        .issuedAt(now)
        .issuer(appId.toString)
        .signWith(signingKey, Jwts.SIG.RS256)
      if (ttlMillis > 0) {
        val expMillis = nowMillis + ttlMillis
        val exp = new Date(expMillis)
        builder.expiration(exp)
        ()
      }
      builder.compact()
    }