.net - sistema - uso de contraseñas en informatica
Manejo de contraseñas en el script de compilación NAnt (4)
Estoy usando un script por ahora, pero me encantaría saber si ya hay un método preprogramado disponible. Muchas gracias a Sundar por el truco de ForegroundColor.
No estoy seguro de si importa si usa Project.Log o va directamente a Console.WriteLine (), ¿algún ninja de NAnt quiere educarme?
Aquí está el script y un objetivo de muestra que lo usa:
<target name="input">
<script language="C#" prefix="password" >
<code><![CDATA[
[Function("ask")]
public string AskPassword(string prompt) {
Project.Log(Level.Info, prompt);
ConsoleColor oldColor = Console.ForegroundColor;
Console.ForegroundColor = Console.BackgroundColor;
try
{
return Console.ReadLine();
}
finally
{
Console.ForegroundColor = oldColor;
}
}
]]></code>
</script>
<echo message="Password is ${password::ask(''What is the password?'')}"/>
</target>
¿Hay alguna manera de solicitar al usuario la entrada durante una compilación NAnt? Quiero ejecutar un comando que tenga una contraseña, pero no quiero poner la contraseña en el script de compilación.
Una solución que he usado muchas veces es tener un archivo de configuración local que contiene cosas como contraseñas, cadenas de conexión, etc., que son específicas de cada desarrollador. El script de compilación NAnt incluirá estas configuraciones al compilar.
El archivo de configuración local no existe en el sistema de control de versiones, por lo que las contraseñas no están expuestas. La primera vez que un desarrollador comprueba una base de código e intenta crearla, debe crear este archivo de configuración. Para hacerlo más fácil, podría haber un archivo de plantilla disponible como my.config.template que contenga todas las propiedades que se pueden personalizar.
Prueba esto :
<script language="C#" prefix="test" >
<code>
<![CDATA[
[Function("get-password")]
public static string GetPassword( ) {
Console.WriteLine("Please enter the password");
ConsoleColor oldForegroundColor = Console.ForegroundColor;
Console.ForegroundColor = Console.BackgroundColor;
string password = Console.ReadLine();
Console.ForegroundColor = oldForegroundColor;
return password;
}
]]>
</code>
</script>
<target name="test.password">
<echo message=''${test::get-password()}''/>
</target>
-->
Esto muestra asteriscos a medida que escribe la contraseña:
<code><![CDATA[
[Function("ask")]
public string AskPassword(string prompt) {
Project.Log(Level.Info, prompt);
string password = "";
// get the first character of the password
ConsoleKeyInfo nextKey = Console.ReadKey(true);
while (nextKey.Key != ConsoleKey.Enter)
{
if (nextKey.Key == ConsoleKey.Backspace)
{
if (password.Length > 0)
{
password = password.Substring(0, password.Length - 1);
// erase the last * as well
Console.Write(nextKey.KeyChar);
Console.Write(" ");
Console.Write(nextKey.KeyChar);
}
}
else
{
password += nextKey.KeyChar;
Console.Write("*");
}
nextKey = Console.ReadKey(true);
}
Console.WriteLine();
return password;
}
]]></code>