Пример #1
0
        private bool IsAllowedToSeeContent()
        {
            if (!bool.Parse(ConfigurationManager.AppSettings["EnableGeoBlocking"]))
                return true;

            long facebookUserId = 0;

            if (Request.Form.signed_request != null)
            {
                var signedRequest = Request.Form.signed_request;
                var parsedRequest = new FacebookClient().ParseSignedRequest("549eeee523fbf171723433b118a14d8b", signedRequest);
                if (((JsonObject)parsedRequest).ContainsKey("user_id"))
                    facebookUserId = long.Parse((string)((JsonObject)parsedRequest)["user_id"]);
            }

            if (facebookUserId == 0)
                return true;

            var geoIpDataProvider = new GeoIpDataProvider();
            var usersDataProvider = new UserDataProvider();
            var ipsWhiteList = geoIpDataProvider.GetWhiteListedIps();
            var usersWhiteList = usersDataProvider.GetUsersWhitelist("gokapara-newyork");

            var userIp = Request.UserHostAddress;

            if (ipsWhiteList.Exists(z => z["ip"].AsString == userIp))
                return true;

            if (usersWhiteList.Exists(z => z == facebookUserId))
                return true;

            BsonDocument geoLocation = null;

            try
            {
                geoLocation = geoIpDataProvider.GetIpLocationInfo(userIp, "country");
            }
            catch (Exception ex)
            {
                _logger.Error(ex);
            }

            string userCountry = geoLocation != null ? geoLocation["country"].AsString : null;

            if (!string.IsNullOrEmpty(userCountry) && userCountry != "IL")
                return true;

            return false;
        }