protected override void Execute()
    {
        string username = web.Param("username");
        string password = web.Param("password");

        string countryIP = "";
        if (!String.IsNullOrEmpty(Request["HTTP_CF_IPCOUNTRY"]))
            countryIP = Request["HTTP_CF_IPCOUNTRY"];            

        SqlCommand sqcmd = new SqlCommand();
        sqcmd.CommandType = CommandType.StoredProcedure;
        sqcmd.CommandText = "WZ_ACCOUNT_LOGIN";
        sqcmd.Parameters.AddWithValue("@in_IP", LastIP);
        sqcmd.Parameters.AddWithValue("@in_EMail", username);
        sqcmd.Parameters.AddWithValue("@in_Password", password);
        sqcmd.Parameters.AddWithValue("@in_Country", countryIP);

        if (!CallWOApi(sqcmd))
            return;

        reader.Read();
        int CustomerID = getInt("CustomerID");
        int AccountStatus = getInt("AccountStatus");
        int SessionID = 0;
        int IsDeveloper = 0;

        if (CustomerID > 0)
        {
            SessionID = getInt("SessionID");
            IsDeveloper = getInt("IsDeveloper");

            // if this is a steam user, check if he own game
            string SteamUserID = getString("SteamUserID");
            if (SteamUserID != "0")
            {
                SteamApi api = new SteamApi();
                bool Have_Game = api.CheckAppOwnership(SteamUserID, "226700"); // base game
                if (!Have_Game)
                {
                    // special 1001 code for running under steam but without game.
                    Response.Write("WO_0");
                    Response.Write(string.Format("{0} {1} {2}",
                        0, 0, 1001));
                    return;
                }
            }

            if (AccountStatus == 103)
            {
                // first time account lock, send email and override status to normal lock
                AccountStatus = 102;
                string LockToken = getString("LockToken");
                SendLockEmail(username, countryIP, LockToken);
            }

            if (IsDeveloper > 0)
            {
                RegisterLoginIP(CustomerID);
            }
        }

        GResponse.Write("WO_0");
        GResponse.Write(string.Format("{0} {1} {2}",
            CustomerID, SessionID, AccountStatus));
    }
    protected override void Execute()
    {
        string SerialKey  = web.Param("serial");
        int    ReferralID = 0;

        // if we got steam ticket, auth it and link it to account
        string SteamID = "";

        try
        {
            string ticket = web.Param("ticket");

            // get steam user id from auth ticket
            SteamApi api = new SteamApi();
            SteamID = api.GetSteamId(ticket);
            if (SteamID.Length == 0)
            {
                Response.Write("WO_5");
                Response.Write("steam: can't auth");
                return;
            }

            bool Have_Game = api.CheckAppOwnership(SteamID, "226700"); // base game
            if (!Have_Game)
            {
                Response.Write("WO_5");
                Response.Write("steam: does not own game");
                return;
            }

            // check if we already have linked account (to prevent multiple accounts registering)
            if (CheckIfHaveSteamAccount(SteamID))
            {
                Response.Write("WO_7");
                Response.Write("steam: already have account");
                return;
            }

            // 227662 DLC is a special DLC that says that user bought game from Steam and not converted user
            bool Have_SteamKey = api.CheckAppOwnership(SteamID, "227662");
            if (!Have_SteamKey)
            {
                Response.Write("WO_B");
                Response.Write("steam: does not own 227662");
                return;
            }

            // overwrite serial key with special key for steam
            SerialKey  = "STEAM-226700-FGHYT-AWRTS-HZRTA";
            ReferralID = 10;
        }
        catch { }


        SqlCommand sqcmd = new SqlCommand();

        sqcmd.CommandType = CommandType.StoredProcedure;
        sqcmd.CommandText = "WZ_ACCOUNT_CREATE";
        sqcmd.Parameters.AddWithValue("@in_IP", LastIP);
        sqcmd.Parameters.AddWithValue("@in_EMail", web.Param("username")); // login name from updater
        sqcmd.Parameters.AddWithValue("@in_Password", web.Param("password"));
        sqcmd.Parameters.AddWithValue("@in_ReferralID", ReferralID);
        sqcmd.Parameters.AddWithValue("@in_SerialKey", SerialKey);
        sqcmd.Parameters.AddWithValue("@in_SerialEmail", web.Param("email"));   // email used in serial key purchase

        if (!CallWOApi(sqcmd))
        {
            return;
        }

        reader.Read();
        int CustomerID = getInt("CustomerID");

        Response.Write("WO_0");
        Response.Write(string.Format("{0}", CustomerID));

        // if we got steam id - link it to customer id
        if (SteamID.Length > 0)
        {
            sqcmd             = new SqlCommand();
            sqcmd.CommandType = CommandType.StoredProcedure;
            sqcmd.CommandText = "WZ_SteamLinkAccount";
            sqcmd.Parameters.AddWithValue("@in_CustomerID", CustomerID);
            sqcmd.Parameters.AddWithValue("@in_SteamID", SteamID);

            CallWOApi(sqcmd);
        }
    }