Novetus_src/defaultaddons/novetusexts/webproxy/AwardBadge.cs

137 lines
4.1 KiB
C#

using System;
using System.IO;
using System.Threading.Tasks;
using System.Web;
using System.Net;
using System.Collections.Generic;
using Titanium.Web.Proxy;
using Titanium.Web.Proxy.EventArguments;
using Titanium.Web.Proxy.Http;
using Titanium.Web.Proxy.Models;
using Novetus.Core;
public class AwardBadge : IWebProxyExtension
{
struct BadgeData
{
public long BadgeId;
public string BadgeName;
public string BadgeCreatorName;
}
private static readonly string BadgeDatabasePath = GlobalPaths.ConfigDir + "\\BadgeDatabase.ini";
private string BadgeDatabaseSection = "BadgeDatabase";
private string MetadataFileExtension = "_meta.ini";
private INIFile ini = new INIFile(BadgeDatabasePath);
public override string Name()
{
return "Badge Award Extension";
}
public override string Author()
{
return "Bitl";
}
void AddBadgeToDB(long BadgeID, bool Awarded = false)
{
CreateBadgeDatabaseIfNeeded();
ini.IniWriteValue(BadgeDatabaseSection, BadgeID.ToString(), Awarded.ToString());
}
bool PlayerHasBadge(long BadgeID)
{
CreateBadgeDatabaseIfNeeded();
if (ini.IniValueExists(BadgeID.ToString()))
{
string awarded = ini.IniReadValue(BadgeDatabaseSection, BadgeID.ToString(), "False");
return Convert.ToBoolean(awarded);
}
return false;
}
void CreateBadgeDatabaseIfNeeded()
{
if (!File.Exists(BadgeDatabasePath))
{
Util.ConsolePrint("WARNING - " + BadgeDatabasePath + " not found. Creating empty badge database.", 5);
File.Create(BadgeDatabasePath).Dispose();
}
}
public override void OnExtensionLoad()
{
CreateBadgeDatabaseIfNeeded();
}
BadgeData LoadMetadata(long BadgeID)
{
BadgeData result;
result.BadgeId = BadgeID;
result.BadgeName = BadgeID.ToString();
result.BadgeCreatorName = "Unknown";
string metaFile = (GlobalVars.UserConfiguration.MapPath.Replace(".rbxl", "").Replace(".rbxlx", "").Replace(".bz2", "") + MetadataFileExtension);
if (GlobalVars.GameOpened == ScriptType.EasterEgg)
{
metaFile = ((GlobalPaths.DataDir + "\\Appreciation.rbxl").Replace(".rbxl", MetadataFileExtension));
}
if (File.Exists(metaFile))
{
try
{
INIFile metaIni = new INIFile(metaFile);
string section = BadgeID.ToString();
string name = metaIni.IniReadValue(section, "BadgeName", BadgeID.ToString());
string creator = metaIni.IniReadValue(section, "BadgeCreatorName", "Unknown");
result.BadgeName = name;
result.BadgeCreatorName = creator;
}
catch (Exception)
{
}
}
return result;
}
public override bool IsValidURL(string absolutePath, string host)
{
return absolutePath.EndsWith("/game/badge/awardbadge.ashx");
}
string GenerateBadgeString(string creatorName, string badgeName, long id)
{
if (PlayerHasBadge(id))
{
return "0";
}
return GlobalVars.UserConfiguration.PlayerName + " won " + creatorName + "'s \"" + badgeName + "\" award!";
}
public override async Task OnRequest(object sender, SessionEventArgs e)
{
await Util.Delay(1000);
string query = e.HttpClient.Request.RequestUri.Query;
long badgeid = 0;
long userid = 0;
if (!long.TryParse(NetFuncs.FindQueryString(query, "badgeid"), out badgeid) &&
!long.TryParse(NetFuncs.FindQueryString(query, "userid"), out userid))
{
e.GenericResponse("", HttpStatusCode.BadRequest);
return;
}
BadgeData meta = LoadMetadata(badgeid);
string badgeAwardString = GenerateBadgeString(meta.BadgeCreatorName, meta.BadgeName, badgeid);
AddBadgeToDB(badgeid, true);
e.Ok(badgeAwardString, NetFuncs.GenerateHeaders(badgeAwardString.Length.ToString()));
}
}