пятница, 6 февраля 2015 г.

0Auth авторизация на сайте с помощью VK FB MAIL YANDEX GOOGLE

Общий смысл:

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




Список социальных сетей, с помощью которых будем авторизоваться:
 - google
 - yandex
 - mail.ru
 - facebook.com
 - vk.com

суббота, 14 сентября 2013 г.

Управление размерами окон колесиком мыши (в openbox)

Задача:
Зажав клавишу клавиатуры, и крутя колесико мыши нужно изменять размеры окна, только в ширину, только в высоту, и одновременно, изменять по всем направлениям.

Решение:

В файл настроек openbox rc.xml в секцию
<mouse>
<context name="Frame">

Вставить следующее:

Изменения размера окна по ширине и высоте, зажав клавишу win
<mousebind button="W-Up" action="Click">
 <action name="ResizeRelative">
   <top>5</top>
   <bottom>5</bottom>
   <left>5</left>
   <right>5</right>
 </action>
</mousebind>
<mousebind button="W-Down" action="Click">
 <action name="ResizeRelative">
   <top>-5</top>
   <bottom>-5</bottom>
   <left>-5</left>
   <right>-5</right>
 </action>
</mousebind>

Изменения размера окна только по высоте, зажав клавишы Win+Shift
<mousebind button="W-S-Up" action="Click">
 <action name="ResizeRelative">
   <top>5</top>
   <bottom>5</bottom>
   <left>0</left>
   <right>0</right>
 </action>
</mousebind>
<mousebind button="W-S-Down" action="Click">
 <action name="ResizeRelative">
   <top>-5</top>
   <bottom>-5</bottom>
   <left>0</left>
   <right>0</right>
 </action>
</mousebind>
Изменения размера только по ширине, зажав клавишу win+ctrl
<mousebind button="W-C-Up" action="Click">
  <action name="ResizeRelative">
    <top>0</top>
    <bottom>0</bottom>
    <left>5</left>
    <right>5</right>
  </action>
</mousebind>
<mousebind button="W-C-Down" action="Click">
 <action name="ResizeRelative">
   <top>0</top>
   <bottom>0</bottom>
   <left>-5</left>
   <right>-5</right>
 </action>
</mousebind>

понедельник, 1 апреля 2013 г.

Виртуальные рабочие столы на Windows!

Утилита переключение виртуальных рабочих столов в Windows

Подробно тут: http://technet.microsoft.com/en-us/sysinternals/cc817881.aspx

Настройки:


Как это выглядет:


понедельник, 4 марта 2013 г.

div прозрачный для событий

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

Для реализации прозрачного для событий слоя есть CSS свойство:
pointer-events: none;
Подробно тут:
https://developer.mozilla.org/en-US/docs/CSS/pointer-events

воскресенье, 17 февраля 2013 г.

Необычная страница авторизации

Страница авторизации, где логин и пароль нужно составлять из элементов.


А реализация простая:

Создаем файл login.php в который добавим поля Логин, Пароль, кнопку "Войти"  и табло с символами:

<div style="position: absolute; left:50%; margin-left:-310px; width:620px; height:400px; top:50%; margin-top:-225px; padding:20px; border-radius: 5px; border:1px solid #cdcdcd">
<center>Составьте логин и пароль, перетаскивая символы в поля <b>Логин</b> и <b>Пароль</b><br>
<div style="width:370px;">
<div style="padding:5px; width:70px; float:left;">Логин </div><div id="login" style=" float:left;margin:5px;width:250px; padding:5px; height:30px; border:1px solid #d0d0d0; background-color: #f6f6f6" class="connectedSortable"></div>
<div style="padding:5px; width:70px; clear:both;  float:left;">Пароль </div><div id="password" style=" float:left;margin:5px;width:250px; padding:5px; height:30px; border:1px solid #d0d0d0; background-color: #f6f6f6" class="connectedSortable"></div>
<div style="padding:5px;clear:both"><input name="submit" type="button" value="Войти" onclick="inlogin()"> </div>
</div>
<div id="connect" style="margin:5px;width:470px; padding:5px; height:180px; border:1px solid #d0d0d0; background-color: #e0e0e0" class="connectedSortable">
<?
$mas = "a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,1,2,3,4,5,6,7,8,9,0,1,2,3,4,5,6,7,8,9,0,!,@,#,$,%,^,&,*,(,),_,-,+,=,~";
$mas = explode(",",$mas);
for($i=0; $i<count($mas); $i++) {
if($i == "13" || $i == "26" || $i == "39") { $cl =  "clear:both;";} else {$cl ="";}
 echo "<div id='".$i."' class='ui-state-default' style='cursor: hand; border-radius:15px; background-color: white; border:1px solid #d0d0d0; width:20px; height:20px; padding:5px; text-align: center; margin: 2px; float:left;'>".$mas[$i]."</div>";
}

?>
</div>
<div id="error"></div>
</center>
</div>

Добавим ему javascript'ов (подключим sortable и функцию обработки кнопки "Войти")


<link rel="stylesheet" href="css/jquery-ui-1.8.13.custom.css" type="text/css" />
<script src="js/jquery-1.5.1.min.js" type="text/javascript"></script>
<script src="js/jquery-ui-1.8.14.custom.js" type="text/javascript"></script>



<script type="text/javascript">
$(function() {
  $(".connectedSortable").sortable({
  connectWith: ".connectedSortable",
  placeholder: "ui-state-highlight",
  helper: "clone",
  cursor: 'move',
 zIndex: 99999,
 update: function() {
imgOrder = $(this).sortable('toArray').toString();
ik = $(this).attr('id');
$.post  ( "rlogin.php",  { c : imgOrder, id: ik }, function(data) {} );
}
 });
});
function inlogin()
{
//$.post  ( "checklogin.php",  { submit : "submit" }, function(data) {} );
$.ajax({
type: "POST",
                    url: "checklogin.php",
                    data: "submit=submit",
                    success: function(html){
   if(html=="ok") {
$("#error").html("Все верно!");
setTimeout( function() { location.href='http://dom.ru/adm/check.php'; }, 1500 );
}
   else {
                        $("#error").html(html);
setTimeout( function() { $("#error").html(""); }, 3000);
}
                    }
                });
}
 </script>

Файл checklogin.php - проверяем составленные Логин и Пароль

<?
session_start();
/* Create by Kostrukov Alexey */
function generateCode($length=6) {
    $chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHI JKLMNOPRQSTUVWXYZ0123456789";
    $code = "";
    $clen = strlen($chars) - 1;
    while (strlen($code) < $length) {
            $code .= $chars[mt_rand(0,$clen)];
    }
    return $code;
}
unset($_SESSION['userid']);
unset($_SESSION['userhash']);
# Соединямся с БД
include("settings.inc");
$dbhandle = mysql_connect($hostname, $username, $password) or die("Unable to connect to MySQL");
$selected = mysql_select_db($bdname,$dbhandle) or die("Could not select examples");
mysql_set_charset($charset,$dbhandle);
if(isset($_POST['submit']))
{
$ulogin = $_SESSION['rlogin']['login'];
$upaswd = $_SESSION['rlogin']['password'];
$mas = "a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,1,2,3,4,5,6,7,8,9,0,1,2,3,4,5,6,7,8,9,0,!,@,#,$,%,^,&,*,(,),_,-,+,=,~";
$mas = explode(",",$mas);
for($i=0; $i<count($ulogin); $i++) {
$u_login .= $mas[$ulogin[$i]];
}
for($i=0; $i<count($upaswd); $i++) {
$u_paswd .= $mas[$upaswd[$i]];
}
    # Вытаскиваем из БД запись, у которой логин равняеться введенному
    $query = mysql_query("SELECT user_id, user_password FROM ".$_ENGINE['pref']."users WHERE user_login='".mysql_real_escape_string($u_login)."' LIMIT 1");
    $data = mysql_fetch_assoc($query);
   
    # Сравниваем пароли
    if($data['user_password'] === md5(md5($u_paswd)))
    {
        # Генерируем случайное число и шифруем его
        $hash = md5(generateCode(10));
           
        if(!@$_POST['not_attach_ip'])
        {
            # Если пользователя выбрал привязку к IP
            # Переводим IP в строку
            $insip = ", user_ip=INET_ATON('".$_SERVER['REMOTE_ADDR']."')";
        }
       
        # Записываем в БД новый хеш авторизации и IP
        mysql_query("UPDATE ".$_ENGINE['pref']."users SET user_hash='".$hash."' ".$insip." WHERE user_id='".$data['user_id']."'");
       
        # Ставим куки
        setcookie("id", $data['user_id'], time()+60*60*24*30);
        setcookie("hash", $hash, time()+60*60*24*30);
       
        # Переадресовываем браузер на страницу проверки нашего скрипта
        print "ok";
    }
    else
    {
        print "Вы ввели неправильный логин/пароль";
    }
}
?> 

Файл rlogin.php - записывает все изменения, при составлении Логина и Пароля.
<?php
session_start();
/* Create by Kostrukov Alexey */
$arr = explode(',', $_POST['c']);
$id = $_POST['id'];
include("settings.inc");
unset($_SESSION['rlogin'][$id]);
for($i=0; $i<count($arr); $i++) {
$y=$i+1;
$_SESSION['rlogin'][$id][] = $arr[$i];
}
?> 

Дополнительная защита. файл check.php
<?
session_start();
include("settings.inc");
$dbhandle = mysql_connect($hostname, $username, $password) or die("Unable to connect to MySQL");
$selected = mysql_select_db($bdname,$dbhandle) or die("Could not select examples");
mysql_set_charset($charset,$dbhandle);
if (isset($_COOKIE['id']) and isset($_COOKIE['hash']))
{  
    $query = mysql_query("SELECT *,INET_NTOA(user_ip) FROM users WHERE user_id = '".intval($_COOKIE['id'])."' LIMIT 1");
    $userdata = mysql_fetch_assoc($query);
    if(($userdata['user_hash'] !== $_COOKIE['hash']) || ($userdata['user_id'] !== $_COOKIE['id']) )
    {
        setcookie("id", "", time() - 3600*24*30*12, "/");
        setcookie("hash", "", time() - 3600*24*30*12, "/");
        print "Хм, что-то не получилось";
    }
    else
    {
    unset($_SESSION['rlogin']);
$userid = $_COOKIE['id'];
$userhash = $_COOKIE['hash'];
$username = $userdata['user_login'];
session_register('userid','userhash','username');
header("Location: http://dom.ru/adm/index.php");
    }
}
else
{
    print "Включите куки";
}
?>