"Às vezes você precisa de um dublê antes de enviar usuários reais e desavisados!"
Pacote | Versão |
---|---|
RimDev.Dublê |
Stuntman é uma biblioteca para personificar usuários durante o desenvolvimento, aproveitando o .NET Claims Identity. Usado principalmente em ambientes web como ASP.NET MVC, ASP.NET Web Forms e aplicativos OWIN que atendem HTML. Isso permite testar diferentes cenários de usuário existentes em seu aplicativo com o mínimo de atrito. Também permite compartilhar esses cenários com outros membros da equipe por meio do controle de origem.
Instale o pacote RimDev.Stuntman NuGet.
PM> Install-Package RimDev.Stuntman
Stuntman usa OWIN e é registrado como middleware e permite cenários de usuário predefinidos programaticamente, na forma de identidades de declarações. Essas predefinições podem ser utilizadas por você ou por outros membros da equipe que trabalham na mesma base de código.
// OWIN Startup class
public class Startup
{
public static readonly StuntmanOptions StuntmanOptions = new StuntmanOptions ( ) ;
public void Configuration ( IAppBuilder app )
{
StuntmanOptions
. AddUser ( new StuntmanUser ( "user-1" , "User 1" )
. AddClaim ( "given_name" , "John" )
. AddClaim ( "family_name" , "Doe" ) ) ;
// Optionally assign a user an access token.
StuntmanOptions
. AddUser ( new StuntmanUser ( "user-2" , "User 2" )
. SetAccessToken ( "123" )
. AddClaim ( "given_name" , "Mary" )
. AddClaim ( "family_name" , "Smith" ) ) ;
// You can also add users using HTTP/HTTPS or the file system!
StuntmanOptions
. AddUsersFromJson ( "https://example.com/web-test-users.json" )
. AddUsersFromJson ( @"C:local-test-users.json" ) ;
// Optional alignment of user picker
// Supported options are:
// - StuntmanAlignment.Left (default)
// - StuntmanAlignment.Center
// - StuntmanAlignment.Right
StuntmanOptions . SetUserPickerAlignment ( StuntmanAlignment . Right ) ;
// Only show when debug is true in Web.config.
if ( System . Web . HttpContext . Current . IsDebuggingEnabled )
{
app . UseStuntman ( StuntmanOptions ) ;
}
}
}
// ASP.NET Core
public class Startup
{
public static readonly StuntmanOptions StuntmanOptions = new StuntmanOptions ( ) ;
public Startup ( IConfiguration configuration )
{
StuntmanOptions
. AddUser ( new StuntmanUser ( "user-1" , "User 1" )
. AddClaim ( "given_name" , "John" )
. AddClaim ( "family_name" , "Doe" ) ) ;
Configuration = configuration ;
}
public IConfiguration Configuration { get ; }
public void ConfigureServices ( IServiceCollection services )
{
services . AddStuntman ( StuntmanOptions ) ;
}
public void Configure ( IApplicationBuilder app , IHostingEnvironment env )
{
app . UseStuntman ( StuntmanOptions ) ;
}
}
Veja como usar o Stuntman em uma visualização Razor para mostrar o seletor de usuário (assumindo que a classe Startup
do aplicativo tenha StuntmanOptions
que podem ser usadas) .
@* Only show when debug is true in Web.config. *@
@if (System.Web.HttpContext.Current.IsDebuggingEnabled)
{
@Html.Raw(YourApplicationNamespace.Startup.StuntmanOptions.UserPicker(User));
}
Stuntman oferece suporte a tokens de portador com base no token de acesso de um usuário ( StuntmanUser.SetAccessToken
). Não há nada de especial sobre o valor e nenhuma codificação/decodificação adicional é necessária. Após a autenticação bem-sucedida, o valor é adicionado como uma declaração. Aproveitando o código Startup
anterior, você poderia construir uma solicitação HTTP para utilizar o token de acesso do usuário 2:
> curl -i -H " Authorization: Bearer 123 " http://localhost:54917/secure
HTTP/1.1 200 OK
A verificação básica do formato é feita no valor:
> curl -i -H " Authorization: Bearer not-real " http://localhost:54917/secure
HTTP/1.1 403 options provided does not include the requested ' not-real ' user.
> curl -i -H " Authorization: Bearer abc 123 " http://localhost:54917/secure
HTTP/1.1 400 Authorization header is not in correct format.
Os usuários podem ser preenchidos em locais remotos usando um ou mais dos seguintes:
StuntmanOptions . AddUsersFromJson ( "C: \ path \ to \ users.json" ) ;
StuntmanOptions . AddUsersFromJson ( "https://example.com/users.json" ) ;
//
// On the server
//
StuntmanOptions . EnableServer ( ) ;
//
// On the client
//
StuntmanOptions . AddConfigurationFromServer ( "https://some-stuntman-enabled-app.example.com/" ) ;
// or, if you prefer to not throw an exception
// and have the users silently not added
// if the server is unavailable:
StuntmanOptions . TryAddConfigurationFromServer ( "https://some-stuntman-enabled-app.example.com/" ) ;
Aqui está um exemplo de JSON de usuários que pode ser consumido por StuntmanOptions.AddUsersFromJson(string pathOrUrl)
:
{
"Users" : [
{
"Id" : " user-1 " ,
"Name" : " User 1 "
},
{
"Id" : " user-2 " ,
"Name" : " User 2 "
}
]
}
Tem uma ideia? Vamos falar sobre isso em uma edição!
Encontrar um bug? Abra um problema ou envie uma solicitação pull!
Licença MIT