Перейти к контенту

Проверка Login, Password, Email как в 2.1.х


Рекомендуемые сообщения

Так, принимаем исправление мода - теперь часть решения перекладывается на сервер, а именно проверка мыла на блеклист.

Главная страница AЦ -> Главная страница настройки шаблонов -> (нужный скин) -> skin_register -> Main Registration Form

Найти:

<script language='javascript' type="text/javascript">
<!--
// Тут громоздкий код
//-->
</script>

Заменить на:

<script language='javascript' type="text/javascript">
<!--
function Validate() {
// Check for errors
if(document.REG.UserName.className!="reg_green" || document.REG.EmailAddress.className!="reg_green" || document.REG.PassWord.className!="reg_green"){
	alert("Вы заполнили не все поля или заполнили их неверно.\n Возможно поля проверяются - подождите пока все поля не станут зелёными.");
	return false;
}

// Check for Empty fields
if (document.REG.UserName.value == "" || document.REG.PassWord.value == "" || document.REG.PassWord_Check.value == "" || document.REG.EmailAddress.value == "") {
	alert ("Вы должны заполнить всю форму");
	return false;
}

// Have we checked the checkbox?

if (document.REG.agree.checked == true) {
	return true;
} else {
	alert ("Перед продолжением регистрации, Вы должны прочесть правила форума и если Вы согласны и принимаете правила, отметьте окошко 'Я согласен'. В противном случае регистрация будет отменена.");
	return false;
}
}

var pass=0,mail=0
function TestMail(){
mail=1;
if(document.REG.EmailAddress.value.toLowerCase() != document.REG.EmailAddress_two.value.toLowerCase()){
document.getElementById("err_mail").style.display="block";
document.REG.EmailAddress.className="reg_red";
document.REG.EmailAddress_two.className="reg_red";
document.getElementById("err_mail").innerHTML="Введённые E-mail адреса не совпадают.";
}
else if(!document.REG.EmailAddress.value.match(/^[a-z_1-9-]{2,32}@([a-z_1-9-]{2,32}\.){1,8}[a-z]{1,5}$/i)){
document.getElementById("err_mail").style.display="block";
document.REG.EmailAddress.className="reg_red";
document.REG.EmailAddress_two.className="reg_red";
document.getElementById("err_mail").innerHTML="Вы ввели плохой E-mail адрес.";
}
else{
document.getElementById("err_mail").innerHTML = "<iframe src='index.php?act=Reg&CODE=tmail&mail="+document.REG.EmailAddress.value+"' style='display:none;'></iframe>";
document.REG.EmailAddress.className="reg_black";
document.REG.EmailAddress_two.className="reg_black";
document.getElementById("err_mail").style.display = "none";
}
}

function TestMailRes(r){
if(r==""){
document.REG.EmailAddress.className="reg_green";
document.REG.EmailAddress_two.className="reg_green";
document.getElementById("err_mail").style.display = "none";
}
else{
document.REG.EmailAddress.className="reg_red";
document.REG.EmailAddress_two.className="reg_red";
document.getElementById("err_mail").innerHTML=r;
document.getElementById("err_mail").style.display="block";
}
}

function TestNameRes(r){
if(r==""){
document.REG.UserName.className = "reg_green";
document.getElementById("err_name").style.display="none";
}
else{
document.REG.UserName.className = "reg_red";
document.getElementById("err_name").innerHTML = r;
document.getElementById("err_name").style.display="block";
}
}

function TestName(){
document.getElementById("err_name").innerHTML="<iframe src='index.php?act=Reg&CODE=tname&name="+document.REG.UserName.value+"' style='display:none;'></iframe>";
document.REG.UserName.className = "reg_black";
document.getElementById("err_name").style.display="none";
}

function TestPass(){
pass=1;
if(document.REG.PassWord.value != document.REG.PassWord_Check.value){
document.getElementById("err_pass").innerHTML = "Введённые пароли не совпадают.";
document.REG.PassWord.className="reg_red";
document.REG.PassWord_Check.className="reg_red";
document.getElementById("err_pass").style.display="block";
}
else if(document.REG.PassWord.value.length < 3){
document.getElementById("err_pass").innerHTML = "Слишком простой пароль.";
document.REG.PassWord.className="reg_red";
document.REG.PassWord_Check.className="reg_red";
document.getElementById("err_pass").style.display="block";
}
else{
document.getElementById("err_pass").style.display="none";
document.REG.PassWord.className="reg_green";
document.REG.PassWord_Check.className="reg_green";
}
}

//-->
</script>

sources/Register.php

Найти:

			case 'tname':
			$this->test_name();
			break;

Добавить ниже:

				
		case 'tmail':
			$this->test_mail();
			break;

Найти:

		
}

?>

Добавить Выше:

	
function test_mail($err=""){
	global $INFO;
	$email_list = explode("|",$INFO['ban_email']);
	if(get_magic_quotes_gpc())
		$_GET['mail'] = stripslashes($_GET['mail']);
	for($i=0;$i<count($email_list);$i++){
		$black = str_replace("\\*",".+",preg_quote($email_list[$i],"/"));
		if(preg_match("/^$black$/",$_GET['mail'])){
			$err = "Ваш E-Mail или сервис E-Mail'ов в чёрном списке.";
			break;
		}
	}
	die("<html>\n<head>\n<meta http-equiv=\"Content-Type\" CONTENT=\"text/html; CHARSET=Windows-1251\">\n<script type='text/javascript'>\n<!-- //\ntop.TestMailRes(\"$err\");\n// -->\n</script>\n</head></html>");
}

 

Первый пост сейчас поправлю.

 

Демоверсия по-прежнему по адресу http://test.ultimasoft.ru/?act=Reg

 

Теперь на серверной стороне так же проверяется E-Mail на принадлежность блеклисту. В демоверсии нельзя использовать эмейлы вида *@mail.ru (настраивается Пользователи -> БАН пользователей).

 

Тестируем, не стесняемся нажимать кнопку регистрации.

Ссылка на комментарий
Поделиться на других сайтах

ядрена мать

 

if ((($name[$pos] <= 'а') and ($name[$pos] >= 'я')) or (($name[$pos] <= 'А') and ($name[$pos] >= 'Я')) and (($name[$pos] <= 'z') and ($name[$pos] >= 'a')) or (($name[$pos] <= 'Z') and ($name[$pos] >= 'A')))
			{
				$err = "<font color=red>Нельзя использовать смесь символов кирилицы и латиницы</font><br>";
			}

 

где грабли ?

Ссылка на комментарий
Поделиться на других сайтах

Так, для тех кто хочет видеть в имени пользователя только кирилицу или только латиницу:

Открываем шаблон, ищем:

function TestName(){

Добавить ниже:

if(document.REG.UserName.value.match(/[a-z]/i) && document.REG.UserName.value.match(/[а-я]/i)){
document.getElementById("err_name").style.display="block";
document.getElementById("err_name").innerHTML = "Используйте в имени только кирилицу или только латиницу.";
document.REG.UserName.className = "reg_red";
return;
}

Ссылка на комментарий
Поделиться на других сайтах

Dekker

ядрена мать

где грабли ?

А $name[$pos] - это символ ? В смысле $name - это строка ?

Тогда с какого он будет работать так как тебе надо.

У тебя условие не правильное тогда. Ты один и тот же символ проверяешь... Я понимаю, что в цикле скорее всего, но ты не сравниваешь его с другими символами в имени, а проверяешь в каком он диапазоне. Причем тут тогда "смесь символов" ?

Или я не догоняю. :D

Сорри, что вмешался.

 

А почему тебе кстати такой вариант не подходит:

 

$name = 'Dеkker';

if (preg_match("/[a-zA-Z]/",$name) && preg_match("/[а-яА-Я]/",$name))
{
echo "Идите на фиг злые, нехорошие люди !";
}
else
{
echo "Добро пожаловать мил человек !";
}

Ссылка на комментарий
Поделиться на других сайтах

Хочется сделать как у IPB :D)

 

Так, не волнуемся, я ща всё переделал, терь всё красиво и понятно ;) Ща распишу.

 

ACP -> Стили -> (нужный стиль) -> найти:

input.reg_green{border:1px solid green}
input.reg_red{border:1px solid red}
input.reg_black{border:1px solid black}

Заменить на:

.reg_green{border:1px solid green}
.reg_red{border:1px solid red}
.reg_black{border:1px solid black}

Главная страница AЦ -> Главная страница настройки шаблонов -> (нужный скин) -> skin_register -> Main Registration Form -> Заменить таким шаблоном:

<form action="{ibf.vars.board_url}/index.{ibf.vars.php_ext}" method="post" name='REG' onsubmit='return Validate()'>
<input type='hidden' name='act' value='Reg' />
<input type='hidden' name='CODE' value='02' />
<input type='hidden' name='coppa_user' value='{$data['coppa_user']}' />
<b>{ibf.lang.reg_header}</b><br /><br />{$data['TEXT']}
<br />
<br />
<div class="tableborder">
 <div class="maintitle"><{CAT_IMG}> {ibf.lang.registration_form}</div>
 <div class="pformstrip">{ibf.lang.complete_form}</div>
 <table class="tablebasic">
 <tr>
  <td colspan=2 id="err_name" style="display:none;"></td>
 </tr>
 <tr>
<td class="pformleft">{ibf.lang.user_name}</td>
<td class="pformright"><input type='text' size='32' maxlength='64' value='{$ibforums->input['UserName']}' name='UserName' onblur="TestName();" class="reg_black" disabled /></td>
 </tr>
 <tr>
  <td colspan=2 id="err_pass" style="display:none;"></td>
 </tr>
 <tr>
<td class="pformleft">{ibf.lang.pass_word}</td>
<td class="pformright"><input type='password' size='32' maxlength='32' value='{$ibforums->input['PassWord']}' name="PassWord" class="reg_black" onblur="if(p3.value.length)TestPass();" disabled /></td>
 </tr>
 <tr>
<td class="pformleft">{ibf.lang.re_enter_pass}</td>
<td class="pformright"><input type='password' size='32' maxlength='32' value='{$ibforums->input['PassWord_Check']}' name='PassWord_Check' class="reg_black" onblur="if(p2.value.length)TestPass();" disabled /></td>
 </tr>
 <tr>
  <td colspan=2 id="err_mail" style="display:none;"></td>
 </tr>
 <tr>
<td class="pformleft">{ibf.lang.email_address}</td>
<td class="pformright"><input type='text' size='32' maxlength='50' value='{$ibforums->input['EmailAddress']}' name='EmailAddress' class="reg_black" onblur="if(p5.value.length)TestMail();" disabled /></td>
 </tr>
 <tr>
<td class="pformleft">{ibf.lang.email_address_two}</td>
<td class="pformright"><input type='text' size='32' maxlength='50'  value='{$ibforums->input['EmailAddress_two']}' name='EmailAddress_two' class="reg_black" onblur="if(p4.value.length)TestMail();" disabled /></td>
 </tr>
 <!--{REQUIRED.FIELDS}-->
 <!--{OPTIONAL.FIELDS}-->
 <!--IBF.MODULES.EXTRA-->
 </table>
</div>
<br />
<!--{REG.ANTISPAM}-->
<br />
<div class="tableborder">
 <div class="pformstrip">{ibf.lang.terms_service}</div>
 <div class="tablepad" align="center">
  <strong>{ibf.lang.terms_service_text}</strong>
  <br />
  <br />
  <textarea cols='75' rows='9' readonly="readonly" name='Post' class='textinput'>{$data[RULES]}</textarea>
  <br /><br /><div id="err_aggr" style="display:none;"></div><b>{ibf.lang.agree_submit}</b> <input type='checkbox' name='agree' value='1' onclick="TestAgree();" disabled class="reg_black" />
 </div>
 <div id="err_sbmt" style="display:none;"></div>
 <div class="pformstrip" align="center"><input type="submit" value="{ibf.lang.submit_form}" class='forminput' name="submit" disabled /></div>
</div>
</form>
<script type="text/javascript">
<!-- //
var p1 = document.REG.UserName;
var p2 = document.REG.PassWord;
var p3 = document.REG.PassWord_Check;
var p4 = document.REG.EmailAddress;
var p5 = document.REG.EmailAddress_two;
var p6 = document.REG.agree;
var e1 = document.getElementById("err_name");
var e2 = document.getElementById("err_pass");
var e3 = document.getElementById("err_mail");
var e4 = document.getElementById("err_aggr");
var e5 = document.getElementById("err_sbmt");
function Validate() {
// Check for errors
if(p1.className!="reg_green" || p2.className!="reg_green" || p4.className!="reg_green" || p6.className!="reg_green"){
	e5.innerHTML = "Вы не можете отправить данные, пока они не будут введены верно.<br>\nВерные данные отмечены зелёным, неверные - красным, не проверенные - чёрным.";
	e5.style.display="";
	return false;
}
return true;
}

function TestAgree(){
if(p6.checked)
	p6.className="reg_green";
else
	p6.className="reg_red";
}

function TestMail(){
if(p4.value.toLowerCase() != p5.value.toLowerCase()){
e3.innerHTML = "Введённые E-Mail адреса не совпадают!";
e3.style.display="";
p4.className="reg_red";
p5.className="reg_red";
}
else if(!p4.value.match(/^[a-z_1-9-]{2,32}@([a-z_1-9-]{2,32}\.){1,8}[a-z]{1,5}$/i)){
e3.innerHTML = "Таких E-Mail адресов не существует.";
e3.style.display = "";
p4.className="reg_red";
p4.className="reg_red";
}
else{
e3.innerHTML = "<iframe src='index.php?act=Reg&CODE=tmail&mail="+p4.value+"'></iframe>";
e3.style.display = "none";
p4.className = "reg_black";
p5.className = "reg_black";
}
}

function TestMailRes(r){
if(r==""){
p4.className="reg_green";
p5.className="reg_green";
}
else{
p4.className="reg_red";
p5.className="reg_red";
e3.style.display = "";
e3.innerHTML = r;
}
}

function TestName(){
if(p1.value.match(/[^1-9a-zа-я_-]/i)){
e1.style.display = "";
e1.innerHTML = "Имя содержит запрещённые символы.";
p1.className = "reg_red";
}
else if(!p1.value.length){
e1.style.display = "";
e1.innerHTML = "Не введено имя.";
p1.className = "reg_red";
}
else if(p1.value.length < 3){
e1.style.display = "";
e1.innerHTML = "Введено слишком короткое имя.";
p1.className = "reg_red";
}
else if(p1.value.length > 32){
e1.style.display = "";
e1.innerHTML = "Введено сликшом длинное имя.";
p1.className = "reg_red";
}
else{
e1.innerHTML="<iframe src='index.php?act=Reg&CODE=tname&name="+p1.value+"'></iframe>";
e1.style.display = "none";
p1.className = "reg_black";
}
}

function TestNameRes(r){
if(r==""){
p1.className = "reg_green";
}
else{
e1.style.display = "";
e1.innerHTML = r;
p1.className = "reg_red";
}
}

function TestPass(){
if(p2.value != p3.value){
e2.style.display = "";
e2.innerHTML = "Введённые пароли не совпадают.";
p2.className = "reg_red";
p3.className = "reg_red";
}
else if(p2.value.length < 3){
e2.style.display = "";
e2.innerHTML = "Введён слишком короткий пароль.";
p2.className = "reg_red";
p3.className = "reg_red";
}
else{
e2.style.display = "none";
p2.className = "reg_green";
p3.className = "reg_green";
}
}
p1.disabled = false;
p2.disabled = false;
p3.disabled = false;
p4.disabled = false;
p5.disabled = false;
p6.disabled = false;
document.REG.submit.disabled = false;
// -->
</script>

sources/Register.php

Найти функции test_mail и test_name и зменить их на:

	function test_name($err=""){
	global $ibforums,$DB;
	$name = $_GET['name'];
	$name = trim( str_replace( '|', '|' , $name ) );
	$name = preg_replace( "/\s{2,}/", " ", $name );
	if ($ibforums->vars['ban_names'])
	{
		$names = explode( "|" , $ibforums->vars['ban_names'] );
		foreach ($names as $n)
		{
			if ( $n == "" )
				continue;
			if (preg_match( "/".preg_quote($n, '/' )."/i", $name ))
				$err .= "Имя в блеклисте.<br>";
		}
	}
	$DB->query("SELECT id FROM ibf_members WHERE name='".addslashes($name)."' LIMIT 1;");
	if($DB->fetch_row())
		$err .= "Имя уже зарегистрировано<br>";
	die("<html>\n<head>\n<meta http-equiv=\"Content-Type\" CONTENT=\"text/html; CHARSET=Windows-1251\">\n<script type='text/javascript'>\n<!-- //\ntop.TestNameRes('$err');\n// -->\n</script>\n</head></html>");
}

function test_mail($err=""){
	global $INFO;
	$email_list = explode("|",$INFO['ban_email']);
	if(get_magic_quotes_gpc())
		$_GET['mail'] = stripslashes($_GET['mail']);
	for($i=0;$i<count($email_list);$i++){
		$black = str_replace("\\*",".+",preg_quote($email_list[$i],"/"));
		if(preg_match("/^$black$/",$_GET['mail'])){
			$err = "Ваш E-Mail или сервис E-Mail'ов в чёрном списке.";
			break;
		}
	}
	die("<html>\n<head>\n<meta http-equiv=\"Content-Type\" CONTENT=\"text/html; CHARSET=Windows-1251\">\n<script type='text/javascript'>\n<!-- //\ntop.TestMailRes(\"$err\");\n// -->\n</script>\n</head></html>");
}

Ссылка на комментарий
Поделиться на других сайтах

ну что же, по моему вполне законченное решение, автору низкий поклон за проделанную работу и пиво с меня при пересечении где нибудь в реальной жизни :D
Ссылка на комментарий
Поделиться на других сайтах

я не хочу выкладывать открытый код данной модицикации под версию 2,0 вопреки собственным убеждениям открытого кода.

 

почему. из-за катящегося кома варезных двоек с нарушенным копирайтом, т.е прежде всего из-за неуважения к автору мода который являеться клиентом IBR, и неуважения к команде IBR.

 

бесплатная версия мода под версию 2,* доступна только клиентам IBR которые являються публикой более благодарной.

Ссылка на комментарий
Поделиться на других сайтах

Для танкистов поясню.

 

Сегодня я разработал аналогичный мод для версии 2.0.x и выложил на паблик (Dekker сказал, что памятник поставят), и тут выяснилось, что публика не очень благодарная.. В связи с чем, я попросил Dekker'а перенести тему в клиентский раздел.

 

Если кому-то это надо, то модификации я разрабатываю платно - обращайтесь.

 

Демоверсия для версии 2.0.х находится на моём форуме. Напомню, что код написан мной, и если он доступен - не значит, что его можно взять и поставить себе, это будет варез.

Ссылка на комментарий
Поделиться на других сайтах

Ребята а чем всем mail.ru не нравится?
Ссылка на комментарий
Поделиться на других сайтах

Спасибо автору за проделанную работу! Очень полезный скрипт! Я нашел один баг и решил об этом сообщить! :D

 

Сейчас очень часто, особенно в корпаративных средах, используют e-mail типа: firstname.surname@sitename.ru, но к сожалению данный мод упорно пишет, что таких e-mail'ов не существует! ;) Ничего сложного, просто необходимо добавить в маску проверки e-mail'а еще знак "."! :)

Ссылка на комментарий
Поделиться на других сайтах

>> 2Song - определись уже

 

я же пишу не для студента, что для копи-паст, а для думающего человека, объясняю, что да как.

Если определится - так подойдёт любой мой вариант и любой твой из вышеперечисленных.

Я просто объясняю какой из них лучше и почему.

 

Можно страдательный пример?

Вот список который я попробывал:

Dez165мавы15

абвab

сфы3т8Hnfe

AbcАбЫВ

 

Все проходят, потом, мне просто надоело.

 

2Dekker

if (preg_match("#[A-Za-z]+#",$in_username) && preg_match("#[А-Ая-я]+#",$in_username))

[А-Ая-я] - интересно... Ну вообще можно написать просто [Ая], т.к. диапазоны А-А и я-я состоят из одного элемента, разве не так?

У меня вот так всё работает:

// dont mixing english and russian letters

if ( preg_match("#[a-z]+#i",$in_username) && preg_match("#[а-я]+#i",$in_username) ) 
{
	$this->show_reg_form('err_rus_en_user_name');
	return;
}

// dont mixing english and russian letters

Ссылка на комментарий
Поделиться на других сайтах

Хмм, зачем пхп, когда мы это в JS запихнули?

 

Что касается варианта пхп:

preg_match("/([a-z].+[а-я])|([а-я].+[a-z])/i",$in_username)

 

Не проверял, но теоретически должно сработать, причём моя строчка короче :D

Ссылка на комментарий
Поделиться на других сайтах

2 Destruction

Хмм, зачем пхп, когда мы это в JS запихнули?

Лично я бы все проверки на пхп продублировал. Так как JS выполняется на стороне клиента.

Если обходить такую проверку "в лоб", то сохраняешь страницу, правишь код и все, регишься как тебе вздумается. :D

Ссылка на комментарий
Поделиться на других сайтах

Предварительная проверка сделана для удобства пользователя, а не для дополнительной защиты.

 

urisoft - вы сделали глупость, есть будут пытаться зарегистрироваться "хитрым образом", то данные будут посылаться в сценарий регистрации, а не предварительной проверки и в результате пользователь получит отказ, т.к. форум достаточно хорошо проверяет входные данные.

Ссылка на комментарий
Поделиться на других сайтах

2 Destruction

вы сделали глупость, есть будут пытаться зарегистрироваться "хитрым образом", то данные будут посылаться в сценарий регистрации, а не предварительной проверки и в результате пользователь получит отказ, т.к. форум достаточно хорошо проверяет входные данные.

Нда. Если у вас при регистрации нет проверки на разрешенное мыло + смесь символов в самом скрипте регистрации (проверка сделана только в ваших функциях test_mail, test_name и JS), то это обходится элементарно. А если у вас все продублированно, то нафига вы пишете:

зачем пхп, когда мы это в JS запихнули?

Короче не видя кода, получается разговор двух глухих. :D

Сделали, работает ну и модцы !

Ссылка на комментарий
Поделиться на других сайтах

Бред говорите.

 

Повторяю, моя модификация никак не заменяет дефолтный проверки при регистрации, она лишь добавляет эти проверки на клиентской стороне, чтобы пользователю было удобнее.

 

Я не понимаю, что Вы обойдёте? Сформируете запрос который отправит фейковые данные? Ну IPB проверит их своими проверками и пошлёт Вас нафиг, можно даже написать, что Вас предупреждали.

 

Я не глух, это Вы не понимаете.

 

Обойдёте, обойдете..

 

http://forum.ultimasoft.ru/?act=Reg

 

Заплачу Вам денег, если Вы зарегистрируете аккаунт с любым E-Mail'ом типа *@1wapsite.com

 

Вперёд. Не зарегистрируете - даже не обращайтесь.

Ссылка на комментарий
Поделиться на других сайтах

2 Destruction

Вы даже не прочитали похоже...

Если у вас при регистрации нет проверки на разрешенное мыло + смесь символов в самом скрипте регистрации (проверка сделана только в ваших функциях test_mail, test_name и JS), то это обходится элементарно.
А если у вас все продублированно, то нафига вы пишете:
зачем пхп, когда мы это в JS запихнули?

Основную часть выделил жирным.

 

Посмотрел дефолтные коды 1.х. Да, есть там проверка по умолчанию при регистрации на забаненое мыло. Ну не знал я этого (конкретно, про бан на мыло). Давай сразу ногами пинать...

Ссылка на комментарий
Поделиться на других сайтах

Эмм, не у нас продублировано, а у них.

 

Если Вы думаете, что где-то не хватает проверок - это бред, ТАКИХ багов в IPB нет.

 

А Вы меня видимо не слышате, я же сказал. Мод предварительной проверки, для удобства пользователя.

Ссылка на комментарий
Поделиться на других сайтах

В Registration.php всегда проверялись забаненные IP, ники и мылы.
Ссылка на комментарий
Поделиться на других сайтах

  • 1 месяц спустя...

Smart Fix.

 

В моде была допущена ошибка - нельзя использовать нули в E-Mail'ах, спасибо Anna за сигнал.

 

Главная страница AЦ -> Главная страница настройки шаблонов -> (нужный скин) -> skin_register -> Main Registration Form

Найти:

else if(!p4.value.match(/^[a-z_1-9-]{2,32}@([a-z_1-9-]{2,32}\.){1,8}[a-z]{1,5}$/i)){

Заменить на:

else if(!p4.value.match(/^[a-z_0-9-]{2,32}@([a-z_0-9-]{2,32}\.){1,8}[a-z]{1,5}$/i)){

Ссылка на комментарий
Поделиться на других сайтах

Dekker,

Выложи пожалуйста отредактированный skin_register.php :D

Или ту часть, что мы меняем.

Ссылка на комментарий
Поделиться на других сайтах

Присоединиться к обсуждению

Вы можете ответить сейчас, а зарегистрироваться позже. Если у вас уже есть аккаунт, войдите, чтобы ответить от своего имени.

Гость
Ответить в этой теме...

×   Вы вставили отформатированный текст.   Удалить форматирование

  Допустимо не более 75 смайлов.

×   Ваша ссылка была автоматически заменена на медиа-контент.   Отображать как ссылку

×   Ваши публикации восстановлены.   Очистить редактор

×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.

Зарузка...
×
×
  • Создать...

Важная информация

Находясь на нашем сайте, вы соглашаетесь на использование файлов cookie, а также с нашим положением о конфиденциальности Политика конфиденциальности и пользовательским соглашением Условия использования.