Сбой кода для доменов 'co.uk' - PullRequest
0 голосов
/ 31 мая 2011

Я использую класс, чтобы заблокировать swf для обслуживания доменов. это нормально работает для доменных имен, таких как 'mydomain.com, mydomain.eu, mydomain.org' ext,

Но когда я добавляю это в домен типа mydomain.co.uk, это не работает. И даже когда домен разрешен в SWF-файл, класс sitelock все равно будет блокировать этот домен. Что-нибудь, что я могу изменить в этот класс, чтобы исправить эту проблему?

Код ниже:

package
{
    import flash.display.Stage;
    import flash.net.*;
    import flash.external.ExternalInterface;

    public class SiteLock
    {
        private static var stage:Stage;

        private static var allowLocal:Boolean = false;

        private static var acceptedSites:Array = [];

        private static var deniedSites:Array = [];


        public function SiteLock():void
        {
        }

        public static function registerStage(_stage:Stage):void
        {
            SiteLock.stage = _stage;
            trace("[SiteLock] Stage registered");
        }

        public static function allowSites(sitesArray:Array):void
        {
            SiteLock.acceptedSites = sitesArray.concat();
            trace("[SiteLock] Accepted sites: " + SiteLock.acceptedSites);
        }

        public static function denySites(sitesArray:Array):void
        {
            SiteLock.deniedSites = sitesArray.concat();
            trace("[SiteLock] Denied sites: " + SiteLock.deniedSites);
        }

        public static function allowLocalPlay(permission:Boolean=true):void
        {
            SiteLock.allowLocal = permission;
        }

        public static function checkURL(destroy:Boolean=false):Boolean
        {

            var url:String = SiteLock.stage.loaderInfo.url;
            var urlStart:Number = url.indexOf("://") + 3;
            var urlEnd:Number = url.indexOf("/",urlStart);
            var domain:String = url.substring(urlStart,urlEnd);
            var LastDot:Number = domain.lastIndexOf(".") - 1;
            var domEnd:Number = domain.lastIndexOf(".",LastDot) + 1;
            domain = domain.substring(domEnd,domain.length);
            var protocol:String = url.substring(0,url.indexOf(":"));
            trace("[SiteLock] " + protocol == "file" ? "The .swf is locally hosted.":"This .swf is hosted at " + domain);



            if (SiteLock.acceptedSites.length != 0 && SiteLock.acceptedSites.indexOf(domain) == -1 && protocol != "file" || protocol == "file" && ! SiteLock.allowLocal || SiteLock.deniedSites.length != 0 && SiteLock.deniedSites.indexOf(domain) != -1 && protocol != "file")
            {
                trace("[SiteLock] This .swf is hosted illegally");
                Redirect();
            //}
                if (destroy)
                {
                    throw new Error("Sorry, I just have to present this great error now!");
                    while (SiteLock.stage.numChildren > 0)
                    {
                        SiteLock.stage.removeChild(SiteLock.stage.getChildAt(0));
                    }
                    //throw error for debugger version
                    throw new Error("This game is hosted illegally. If you find this game here, please contact webmaster", 9001);
                }
                return false;
            }
            else
            {
                return true;
            }
        }

        public static function Redirect():void
        {
            var url:String = "http://google.nl";
            var urlLink:URLRequest = new URLRequest(url);
            navigateToURL(urlLink,"_top");
        }

        public static function isLocal():Boolean
        {

            var url:String = SiteLock.stage.loaderInfo.url;
            var urlStart:Number = url.indexOf("://") + 3;
            var urlEnd:Number = url.indexOf("/",urlStart);
            var domain:String = url.substring(urlStart,urlEnd);
            var LastDot:Number = domain.lastIndexOf(".") - 1;
            var domEnd:Number = domain.lastIndexOf(".",LastDot) + 1;
            domain = domain.substring(domEnd,domain.length);
            var protocol:String = url.substring(0,url.indexOf(":"));
            return protocol == "file";
        }
    }


}

Ответы [ 2 ]

1 голос
/ 31 мая 2011

Я полагаю, что это связано с поиском последнего '.'чтобы найти домен верхнего уровня, который скажет вам, что доменом верхнего уровня является «.uk», а не «.co.uk»

Имейте в виду, что вы не можете действительно разработать домен верхнего уровня внадежным образом, таким образом.Рассмотрим следующие доменные имена:

www.mydomain.com
myotherdomain.co.uk

Они имеют 2 точки, но одна принадлежит .com, а другая - .co.uk

Лучше всего найти полный домени проверьте, заканчивается ли строка '.com', '.co.uk', '.org' или чем-то еще

0 голосов
/ 31 мая 2011

Я бы начал с организации оператора if, поместив скобки для создания разделов AND между операторами OR

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...