вторник, 8 апреля 2014 г.

Hyperion Planning: Автоматизация создания Security Filters

При создании нового пользователя Hyperion Planning необходимо обновить Security Filters, чтобы пользователю присвоились права доступа.



Это довольно муторная задача, т.к для каждого нового пользователя необходмо :
- залогиниться под новым пользователем
- зайти под админом и обновить фильтры
При создании фильтров для одного пользователя это еще терпимо, но если приходится создавать нескольких пользователей, то на этот процесс приходится тратить довольно много времени.

Сегодня мы напишем скрипт для автоматизации этого процесса. В дальнейшем процесс будет выглядеть так:
- администратор создает пользователей.
- запускает скрипт, который заходит в систему под каждым  пользователем, затем входит под админом и обновляет фильтры безопасности.
Для автоматизации нам потребуется Cygwin и утилита curl 


Для начала нам понадобится небольшой JS скрипт, для шифрования паролей т.к Hyperion Planning оперирует зашифрованными паролями.
Создаем файл crypt.js со следующим содержимым:

function StringToFourBit(value, baseByte)
{
       if (!value)
             return "";
       var newValue = "";
       var loop1 = 0;
       for (loop1=0;loop1<value.length;loop1++)
       {
             var b = (value.charCodeAt(loop1));
             var hiBits = (((b & 0xF0)>> 4) + baseByte);
             var lowBits = ((b & 0x0F) + baseByte);
             newValue += String.fromCharCode(hiBits);
             newValue += String.fromCharCode(lowBits);
       }
       return newValue;
}

function ApplyXORKey(value, key)
{
if ((!value) || (!key))
return "";
var newValue = "";
var loop1=0;
for (loop1=0;loop1<value.length;loop1++)
{
newValue += (String.fromCharCode(value.charCodeAt(loop1) ^ key.charCodeAt(loop1 % key.length)));
}
return newValue;
}

var password = WScript.Arguments(0);
var baseByte = 65; //'A'
var key = "ol94hQz2h5Nb4zuWj";

password = (StringToFourBit(ApplyXORKey(password, key), baseByte));

WScript.StdOut.WriteLine(password);


Наш скрипт будет принимать три параметра с командной строки и содержать несколько переменных:
#!/bin/bash
user_name=$1
application_name=$2
user_pass="$3"

admin_name="ADMIN_NAME"
admin_password="ADMIN_PASSWORD"
# Crypting admin password
admin_pass=`cscript //NOLOGO "crypt.js" $admin_password| tr -d '\r' `
# Crypting User password
user_password=`cscript //NOLOGO "crypt.js" $user_pass| tr -d '\r' `
ora_login="ora_user/ora_pass@ora_sid"
cookie_file="cookie.txt"

# Заходим в систему под пользователем:

if curl --user-agent Mozilla/4.0 -L --data "Application="$application_name"&Username="$user_name"&isMig=undefined&Password="$password"&Server=localhost&Browser=unknown&validate=true&isWorkspace=false" 'http://my_hyperion.com:19000/HyperionPlanning/servlet/HspLogOn' -v 2>&1 |grep "input type" > /dev/null ; then
        echo "Connecting to Hyperion user $1 [ ERROR ]"
        exit
else
        echo "Connecting to Hyperion user $1  [ OK ]"
fi
# При неудачном логине завершаем выполнение скрипта.



Для создания фильтров безопасности нам требуется передать в параметрах ID пользователя, его можно получить из Oracle:
user_id_raw=`"$ORACLE_HOME/bin/sqlplus" -S $ora_login  <<EOF  | tr -d '\r'
set heading off
SELECT object_id FROM $application_name.hsp_object WHERE object_type=5 AND Upper(object_name)=Upper('$user_name');
EOF`
user_id=`echo $user_id_raw`

Входим в систему под админом:
if curl --user-agent Mozilla/4.0 -L --data "Application="$application_name"&Username="$admin_name"&isMig=undefined&Password="$admin_pass"&Server=localhost&Browser=unknown&validate=true&isWorkspace=false" 'http://my_hyperion.com:19000/HyperionPlanning/servlet/HspLogOn' -v -c "$cookie_file" 2>&1 |grep "input type" > /dev/null ; then
        echo "Connecting to Hyperion user Admin [ ERROR ]"
        exit
else
        echo "Connecting to Hyperion user Admin [ OK ]"
fi

Запускаем формирование Security Filters:
curl -s --user-agent Mozilla/4.0 -L --data "ACTION=&USERID=&Application="$application_name"&userList="$user_id"" 'http://my_hyperion.com:19000/HyperionPlanning/servlet/HspSecurityFilter' -e "http://my_hiperion.com:19000/HyperionPlanning/CreateSecurityFiltersDetails.jsp?Application="$application_name"" -b "$cookie_file" | grep "erroricon0"  | sed -e 's/^.*alt=*//g' -e 's/\.".*$//g' | tr -d '"' 2>&1

В дальнейшем к скрипту можно прикрутить обработку ошибок, нотификацию об ошибках и web-форму, для большего удобства. Я так же использовател фреймворк BootStrap


Если статья была вам полезна - кликните на баннер или кнопку Donate :)
Яндекс.Метрика

Популярные сообщения