ShiftOS-C-/source/WindowsFormsApplication1/ShiftnetDecryptor.cs

157 lines
5.3 KiB
C#
Raw Normal View History

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Net;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace ShiftOS
{
public partial class ShiftnetDecryptor : Form
{
public ShiftnetDecryptor()
{
InitializeComponent();
}
int i = 0;
string currentaddress = null;
string encrypted_contents = null;
public void WriteLine(string line)
{
if(txtstatus.Text == "")
{
txtstatus.Text = line;
}
else
{
txtstatus.Text += Environment.NewLine + line;
}
}
private void RecursiveControlSetup(Control ctrl)
{
ctrl.Font = new Font(OSInfo.GetMonospaceFont(), ctrl.Font.Size);
try
{
var pnl = (Panel)ctrl;
foreach (Control c in pnl.Controls)
{
RecursiveControlSetup(c);
}
}
catch (Exception ex)
{
}
}
private void tmrdecrypt_Tick(object sender, EventArgs e)
{
switch (i)
{
case 0:
currentaddress = txtaddress.Text;
WriteLine("Checking URL...");
if(!currentaddress.StartsWith("shiftnet://"))
{
WriteLine(" *** ERROR: Invalid URL.");
tmrdecrypt.Stop();
btnstart.Enabled = true;
txtaddress.Enabled = true;
}
break;
case 5:
WriteLine("Making connection to Shiftnet...");
currentaddress = currentaddress.Replace("shiftnet://", "http://playshiftos.ml/shiftnet/www/");
break;
case 25:
WriteLine("Checking file...");
if(!currentaddress.EndsWith(".enc"))
{
WriteLine(" *** ERROR: File not valid, must be of type .enc (encrypted file)");
tmrdecrypt.Stop();
btnstart.Enabled = true;
txtaddress.Enabled = true;
}
break;
case 27:
WriteLine("Downloading file contents...");
try
{
encrypted_contents = new WebClient().DownloadString(currentaddress);
}
catch(Exception ex)
{
WriteLine(" *** ERROR: Remote file could not be accessed.");
tmrdecrypt.Stop();
btnstart.Enabled = true;
txtaddress.Enabled = true;
}
break;
case 30:
WriteLine("Download successful. Determining encryption algorithm. This may take a bit...");
break;
case 75:
int r = new Random().Next(0, 100);
if(r >= 25 && r <= 75)
{
WriteLine("Encryption algorithm determined, beginning decryption.");
}
else
{
WriteLine("Decryption failed.");
tmrdecrypt.Stop();
btnstart.Enabled = true;
txtaddress.Enabled = true;
}
break;
case 95:
string decrypted = API.Encryption.Decrypt(encrypted_contents);
int lastslash = currentaddress.LastIndexOf("/");
int len = currentaddress.Length - lastslash;
string fname = currentaddress.Substring(lastslash, len).Replace(".enc", ".lua");
WriteLine("Decryption successful. Saving to /Home/Decryptions/" + fname + "...");
if(!Directory.Exists(Paths.Home + "Decryptions"))
{
Directory.CreateDirectory(Paths.Home + "Decryptions");
}
File.WriteAllText(Paths.Home + $"Decryptions{OSInfo.DirectorySeparator}{fname}", decrypted);
break;
case 100:
WriteLine("Decryption successful.");
tmrdecrypt.Stop();
currentaddress = null;
i = 0;
encrypted_contents = null;
btnstart.Enabled = true;
txtaddress.Enabled = true;
break;
}
i += 1;
pgstatus.Value = i;
}
private void btnstart_Click(object sender, EventArgs e)
{
i = 0;
tmrdecrypt.Start();
btnstart.Enabled = false;
txtaddress.Enabled = false;
}
private void ShiftnetDecryptor_Load(object sender, EventArgs e)
{
RecursiveControlSetup(panel1);
}
}
}