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()
}