Vous êtes sur la page 1sur 9

Cdigo RegistreService.

cshtml
@* Quitar esta seccin si se utilizan agrupaciones *@
@section Scripts {
<script src="~/Scripts/jquery.validate.min.js"></script>
<script src="~/Scripts/jquery.validate.unobtrusive.min.js"></script>
}

@{
Layout = "~/_SiteLayout.cshtml";
Page.Title = "Registrarse";

string email = "";
string loginData = "";
string providerDisplayName = "";

var returnUrl = Request.QueryString["ReturnUrl"];
if (returnUrl.IsEmpty()) {
// Algunos proveedores de inicio de sesin externo siempre requieren
un valor URL devuelto
returnUrl = Href("~/");
}

// Validacin de la instalacin
Validation.RequireField("email", "El campo de nombre de usuario es
obligatorio.");

if (IsPost && Request.Form["newAccount"].AsBool()) {
// Controlar el formulario de registro de cuenta nueva
AntiForgery.Validate();
email = Request.Form["email"];
loginData = Request.Form["loginData"];

string provider = "";
string providerUserId = "";
if (WebSecurity.IsAuthenticated ||
!OAuthWebSecurity.TryDeserializeProviderUserId(loginData, out provider, out
providerUserId)) {
Response.Redirect("~/Account/Manage");
return;
}

providerDisplayName =
OAuthWebSecurity.GetOAuthClientData(provider).DisplayName;
if (Validation.IsValid()) {
// Insertar un nuevo usuario en la base de datos
var db = Database.Open("StarterSite");

// Comprobar si el usuario ya existe
var user = db.QuerySingle("SELECT Email FROM UserProfile WHERE
LOWER(Email) = LOWER(@0)", email);
if (user == null) {
// Insertar correo electrnico en la tabla de perfiles
db.Execute("INSERT INTO UserProfile (Email) VALUES (@0)",
email);
OAuthWebSecurity.CreateOrUpdateAccount(provider,
providerUserId, email);

OAuthWebSecurity.Login(provider, providerUserId,
createPersistentCookie: false);

Context.RedirectLocal(returnUrl);
return;
} else {
ModelState.AddError("email", "El nombre de usuario ya existe.
Especifique otro nombre de usuario.");
}
}
} else {
// Controlar devoluciones de llamada desde el proveedor de inicio de
sesin externo

var result =
OAuthWebSecurity.VerifyAuthentication(Href("~/Account/RegisterService", new {
returnUrl }));
if (result.IsSuccessful) {
bool registered = OAuthWebSecurity.Login(result.Provider,
result.ProviderUserId, createPersistentCookie: false);
if (registered) {
Context.RedirectLocal(returnUrl);
return;
}

if (WebSecurity.IsAuthenticated) {
// Si el usuario actual ya inici sesin, agregar la cuenta
nueva
OAuthWebSecurity.CreateOrUpdateAccount(result.Provider,
result.ProviderUserId, WebSecurity.CurrentUserName);
Context.RedirectLocal(returnUrl);
return;
} else {
// El usuario es nuevo. Establecer el nombre de usuario al
valor obtenido del proveedor de inicio de sesin externo
email = result.UserName;
loginData =
OAuthWebSecurity.SerializeProviderUserId(result.Provider,
result.ProviderUserId);
providerDisplayName =
OAuthWebSecurity.GetOAuthClientData(result.Provider).DisplayName;
}
} else {
Response.Redirect("~/Account/ExternalLoginFailure");
return;
}
}
}
<hgroup class="title">
<h1>@Page.Title.</h1>
<h2>Asocie su cuenta @providerDisplayName.</h2>
</hgroup>

<form method="post">
@AntiForgery.GetHtml()
<input type="hidden" name="loginData" value="@loginData" />
@* Si existe al menos un error de validacin, informar al usuario *@
@Html.ValidationSummary(excludeFieldErrors: true)

<fieldset>
<legend>Formulario de registro</legend>
<p>
Autentic correctamente con
<strong>@providerDisplayName</strong>. Especifique
un nombre de usuario para este sitio a continuacin y haga clic
en el botn confirmar para finalizar el inicio de
sesin.
</p>
<ol>
<li class="email">
<label for="email" @if (!ModelState.IsValidField("email"))
{<text>class="error-label"</text>}>Direccin de correo electrnico</label>
<input type="text" id="email" name="email" value="@email"
@Validation.For("email") />
@* Escribir los errores de validacin del correo electrnico
en la pgina *@
@Html.ValidationMessage("email")
</li>
</ol>
<button type="submit" name="newAccount"
value="true">Registrarse</button>
</fieldset>
</form>


Codigo registre

@* Quitar esta seccin si se utilizan agrupaciones *@
@section Scripts {
<script src="~/Scripts/jquery.validate.min.js"></script>
<script src="~/Scripts/jquery.validate.unobtrusive.min.js"></script>
}

@{
Layout = "~/_SiteLayout.cshtml";
Page.Title = "Registrarse";

// Inicializar variables de pgina generales
var email = "";
var password = "";
var confirmPassword = "";

// Validacin de la instalacin
Validation.RequireField("email", "Debe especificar una direccin de
correo electrnico.");
Validation.RequireField("password", "La contrasea no puede estar en
blanco.");
Validation.Add("confirmPassword",
Validator.EqualsTo("password", "La nueva contrasea y la contrasea
de confirmacin no coinciden."));
Validation.Add("password",
Validator.StringLength(
maxLength: Int32.MaxValue,
minLength: 6,
errorMessage: "La contrasea debe tener al menos seis
caracteres"));

// Si esta es una solicitud POST , valide y procese los datos
if (IsPost) {
AntiForgery.Validate();
email = Request.Form["email"];
password = Request.Form["password"];
confirmPassword = Request.Form["confirmPassword"];

// Validar la respuesta captcha del usuario
// if (!ReCaptcha.Validate("PRIVATE_KEY")) {
// ModelState.AddError("recaptcha", "La respuesta captcha no es
correcta");
// }

// Si toda la informacin es vlida, crear una nueva cuenta
if (Validation.IsValid()) {
// Insertar un nuevo usuario en la base de datos
var db = Database.Open("StarterSite");

// Comprobar si el usuario ya existe
var user = db.QuerySingle("SELECT Email FROM UserProfile WHERE
LOWER(Email) = LOWER(@0)", email);
if (user == null) {
// Insertar correo electrnico en la tabla de perfiles
db.Execute("INSERT INTO UserProfile (Email) VALUES (@0)",
email);

// Cree y asocie una nueva entrada en la base de datos de
miembros.
// Si la operacin se realiza correctamente, siga procesando
la solicitud
try {
bool requireEmailConfirmation =
!WebMail.SmtpServer.IsEmpty();
var token = WebSecurity.CreateAccount(email, password,
requireEmailConfirmation);
if (requireEmailConfirmation) {
var hostUrl =
Request.Url.GetComponents(UriComponents.SchemeAndServer,
UriFormat.Unescaped);
var confirmationUrl = hostUrl +
VirtualPathUtility.ToAbsolute("~/Account/Confirm?confirmationCode=" +
HttpUtility.UrlEncode(token));

WebMail.Send(
to: email,
subject: "Confirme la cuenta",
body: "Su cdigo de confirmacin es: " + token +
". Visit <a href=\"" + confirmationUrl + "\">" + confirmationUrl + "</a> para
activar la cuenta."
);
}

if (requireEmailConfirmation) {
// Agradecer al usuario que se haya registrado e
informarle de que recibir un correo
Response.Redirect("~/Account/Thanks");
} else {
// Retroceder a la pgina principal y salir
WebSecurity.Login(email, password);

Response.Redirect("~/");
}
} catch (System.Web.Security.MembershipCreateUserException e)
{
ModelState.AddFormError(e.Message);
}
} else {
// El usuario ya existe
ModelState.AddFormError("Email address is already in use.");
}
}
}
}

<hgroup class="title">
<h1>@Page.Title.</h1>
<h2>Crear una cuenta nueva.</h2>
</hgroup>

<form method="post">
@AntiForgery.GetHtml()
@* Si existe al menos un error de validacin, informar al usuario *@
@Html.ValidationSummary("No se cre la cuenta. Corrija los errores e
intntelo de nuevo.", excludeFieldErrors: true, htmlAttributes: null)

<fieldset>
<legend>Formulario de registro</legend>
<ol>
<li class="email">
<label for="email"
@if(!ModelState.IsValidField("email")){<text>class="error-
label"</text>}>Direccin de correo electrnico</label>
<input type="text" id="email" name="email" value="@email"
@Validation.For("email") />
@* Escribir los errores de validacin del correo electrnico
en la pgina *@
@Html.ValidationMessage("email")
</li>
<li class="password">
<label for="password"
@if(!ModelState.IsValidField("password")) {<text>class="error-
label"</text>}>Contrasea</label>
<input type="password" id="password" name="password"
@Validation.For("password") />
@* Escribir los errores de validacin de contrasea en la
pgina *@
@Html.ValidationMessage("password")
</li>
<li class="confirm-password">
<label for="confirmPassword"
@if(!ModelState.IsValidField("confirmPassword")) {<text>class="error-
label"</text>}>Confirmar contrasea</label>
<input type="password" id="confirmPassword"
name="confirmPassword" @Validation.For("confirmPassword") />
@* Escribir los errores de validacin de contrasea en la
pgina *@
@Html.ValidationMessage("confirmPassword")
</li>
<li class="recaptcha">
<div class="message-info">
<p>
Para habilitar la comprobacin CAPTCHA , <a
href="http://go.microsoft.com/fwlink/?LinkId=204140">instale
ASP.NET Web Helpers Library</a> , elimine las marcas
de comentario de ReCaptcha.GetHtml y reemplace 'PUBLIC_KEY'
por su clave pblica. En la parte superior de esta
pgina, elimine las marcas de comentario de ReCaptcha. Validate y
reemplace 'PRIVATE_KEY' por su clave privada.
Regstrese para obtener las claves reCAPTCHA en <a
href="http://recaptcha.net">reCAPTCHA.net</a>.
</p>
</div>
@*
@ReCaptcha.GetHtml("PUBLIC_KEY", theme: "white")
@Html.ValidationMessage("recaptcha")
*@
</li>
</ol>
<input type="submit" value="Registrarse" />
</fieldset>
</form>

Codigo Srcipting.cs

using CSScriptLibrary;
using System;

//Read in more details about all aspects of CS-Script hosting in applications
here: http://www.csscript.net/help/Script_hosting_guideline_.html
//You can also find the example of all possible hosting scenarios (including
debugging) in the <cs-script>\Samples\Hosting folder
//In most of the cases CodeDOM approach is the most flexible and natural
choice, though Mono (Emulator) has some advantages with
//respect to memory management.

class Program
{
static void Main()
{
HostApp.Test();
}
}

public interface ICalc
{
HostApp Host { get; set; }
int Sum(int a, int b);
}

public class HostApp
{
public static void Test()
{
var host = new HostApp();

host.Log("CodeDOM Tests...");
CodeDom.HelloTest_1();
CodeDom.HelloTest_2();
CodeDom.CalcTest_InterfaceInheritance(host);
CodeDom.CalcTest_InterfaceAlignment(host);

host.Log("Mono CompilerAsService Tests...");
CompilerAsService.HelloTest_1();
CompilerAsService.HelloTest_2();
CompilerAsService.CalcTest_InterfaceInheritance(host);
CompilerAsService.CalcTest_InterfaceAlignment(host);
}

class CodeDom
{
public static void HelloTest_1()
{
//the 'using System;' is not required but it demonstrates how to
specify 'usings' in the method-only syntax
var SayHello = CSScript.LoadDelegate<Action<string>>(
@"using System;
void SayHello(string greeting)
{

Console.WriteLine(greeting);
}");

SayHello("Hello World!");
}

public static void HelloTest_2()
{
var SayHello = CSScript.LoadMethod(@"static void SayHello(string
greeting)
{

Console.WriteLine(greeting);
}")
.GetStaticMethod();

SayHello("Hello World!");
}


public static void CalcTest_InterfaceInheritance(HostApp host)
{
ICalc calc = (ICalc)CSScript.LoadCode(@"public class Script :
ICalc
{
public int Sum(int a,
int b)
{
if(Host != null)

Host.Log(""Sum is invoked"");
return a + b;
}

public HostApp Host {
get; set; }
}")
.CreateObject("*");
calc.Host = host;
int result = calc.Sum(1, 2);
}

public static void CalcTest_InterfaceAlignment(HostApp host)
{
ICalc calc = CSScript.LoadCode(@"public class Script : ICalc
{
public int Sum(int a, int b)
{
if(Host != null)
Host.Log(""Sum is
invoked"");
return a + b;
}

public HostApp Host { get;
set; }
}")
.CreateObject("*")
.AlignToInterface<ICalc>();
calc.Host = host;
int result = calc.Sum(1, 2);
}
}

class CompilerAsService
{
public static void HelloTest_1()
{
dynamic script = CSScript.Evaluator
.LoadMethod(@"void SayHello(string
greeting)
{

Console.WriteLine(greeting);
}");

script.SayHello("Hello World!");
}

public static void HelloTest_2()
{
var SayHello = CSScript.Evaluator
.LoadDelegate<Action<string>>(
@"void SayHello(string
greeting)
{

Console.WriteLine(greeting);
}");
SayHello("Hello World!");
}

public static void CalcTest_InterfaceInheritance(HostApp host)
{
ICalc calc = (ICalc)CSScript.Evaluator
.LoadCode(@"
public class Script : ICalc
{
public int Sum(int a, int
b)
{
if(Host != null)
Host.Log(""Sum is
invoked"");
return a + b;
}

public HostApp Host {
get; set; }
}");
calc.Host = host;
int result = calc.Sum(1, 2);
}

public static void CalcTest_InterfaceAlignment(HostApp host)
{
ICalc calc = CSScript.Evaluator
.LoadMethod<ICalc>(@"
public int Sum(int a, int
b)
{
if(Host != null)
Host.Log(""Sum is
invoked"");
return a + b;
}

public HostApp Host { get;
set; }");
calc.Host = host;
int result = calc.Sum(1, 2);
}
}

public void Log(string message)
{
Console.WriteLine(message);
}
}