create different ssh key according the article Mac Set-Up Git
$ ssh-keygen -t rsa -C "[email protected]"
create different ssh key according the article Mac Set-Up Git
$ ssh-keygen -t rsa -C "[email protected]"
import scala.concurrent.duration._ | |
import scala.concurrent.ExecutionContext | |
import scala.concurrent.Future | |
import akka.pattern.after | |
import akka.actor.Scheduler | |
/** | |
* Given an operation that produces a T, returns a Future containing the result of T, unless an exception is thrown, | |
* in which case the operation will be retried after _delay_ time, if there are more possible retries, which is configured through | |
* the _retries_ parameter. If the operation does not succeed and there is no retries left, the resulting Future will contain the last failure. |
{- | |
Денис Шевченко, 2015 | |
-} | |
module Main where | |
import Control.Monad.Writer.Lazy | |
import Data.Functor ((<$>)) | |
import Data.List (dropWhileEnd) | |
import Data.Char (isSpace) |
A. IdentityServer3 docs, samples and source code use OIDC & OAuth2 terms interchangeably to refer to same thing in many areas. I think that's make sense because OIDC introduced as complement & extension for OAuth2.
B. IdentityServer3, STS, OP, OIDC server, OAuth2 server, CSP, IDP and others: means same thing (software that provide/issue tokens to clients) as explained in [Terminology] (http://identityserver.github.io/Documentation/docs/overview/terminology.html).
C. Grants and flows mean same thing, grant was the common term in OAuth2 specs and flow is the common term in OIDC specs.
D. This document will not focus on custom flow/grant.
E. [Important] Choosing wrong flow leads to security threat.
For testing purposes, the easiest way to go is jitpack:
resolvers += "jitpack" at "https://jitpack.io"
libraryDependencies += "com.github.User" % "Repo" % "Tag"
import scala.concurrent.Await | |
import scala.concurrent.Future | |
import scala.concurrent.duration._ | |
import scala.concurrent.ExecutionContext.Implicits.global | |
import scala.language.higherKinds | |
import scalaz.ContT | |
import scalaz.std.scalaFuture.futureInstance | |
object Main { |
import cats.data.StateT | |
import cats.implicits._ | |
import scala.collection.JavaConverters._ | |
import scala.concurrent.{Await, Future} | |
import scala.concurrent.ExecutionContext.Implicits.global | |
import scala.concurrent.duration.Duration | |
import twitter4j._, twitter4j.conf.ConfigurationBuilder | |
object YourTweetsAreTooLong { | |
private type PagingState = (Long, Option[Long]) |