parser

Написать ответ на текущее сообщение

 

 
   команды управления поиском

Класс для работы с .htpasswd

Pavel Titov 01.02.2003 20:20

Возможно, кому-то пригодится...
@CLASS
htpasswd

@load[filename][htpass;htpasstext] Загрузить .htpasswd
# Загружаем
$htpass[^file::load[text;$filename]]
$htpasstext[^htpass.text.match[\n][g]{
}]
# Преобразовываем в таблицу
$passwd[^table::create{login	password
^htpasstext.match[:][g]{	}}]

@create[] Инициализация без данных
$passwd[^table::create{login	password}]

@save[filename][htpass] Сохранить .htpasswd
# Преобразовываем в строку
$htpass[^passwd.menu{${passwd.login}:$passwd.password
}]
# Сохраняем в файл
^htpass.save[$filename]

@setpw[login;password][crypted] Добавление пользователя / изменение пароля
# Шифруемся
$crypted[^math:crypt[$password;^$apr1^$]]

^if(^passwd.locate[login;$login]){
	^rem{ Пользователь уже существует }
	$passwd.password[$crypted]
}{
	^rem{ Пользователя надо добавить }
	^passwd.append{$login	$crypted}
}

@delete[login] Удалить юзера
^if(^passwd.locate[login;$login]){
	$passwd[^remove[$passwd;^passwd.line[];1]]
}

# http://parser.ru/forum/?id=3803
### удаление строк из таблицы
# результат - таблица
# tbl - имя таблицы
# from - начиная с какой строки удалять (!!! нумерация строк с 1)
# count - сколько строк удалять
# пример: $mytable[^remove[$mytable;1;10]] - удалит первые 10 строк
@remove[tbl;from;count]
^if(def $tbl){
    $result[^tbl.select((^tbl.line[]<$from) || (^tbl.line[]>=$from+$count))]
}