Last active
June 10, 2024 14:12
-
-
Save crutch12/b2cf37f4366ea5035da024adb1b34fe3 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// Быстрое создание учёток через freeipa | |
// Скрипт исполняется в браузере, после авторизации в freeipa | |
// const users = [ | |
// { | |
// first_name: 'Данёк', | |
// last_name: 'Якубович', | |
// email: '[email protected]', // указываем email человека (можно пропустить, тогда будет без email) | |
// // пароль - генерируем отсюда https://www.random.org/passwords/?num=5&len=12&format=html&rnd=new | |
// password: 'MR132kKk9123123az5gnm', | |
// // (!) указываем нужные группы (например 'internal-interns' или 'internal-developers') | |
// groups: [ | |
// 'internal-interns', | |
// ], | |
// }, | |
// ]; | |
const api_version = window.ipa_loader ? window.ipa_loader.api_version : '2.237'; | |
const rusToLat = function (str) { | |
let ru = { | |
а: 'a', | |
б: 'b', | |
в: 'v', | |
г: 'g', | |
д: 'd', | |
е: 'e', | |
ё: 'e', | |
ж: 'zh', | |
з: 'z', | |
и: 'i', | |
к: 'k', | |
л: 'l', | |
м: 'm', | |
н: 'n', | |
о: 'o', | |
п: 'p', | |
р: 'r', | |
с: 's', | |
т: 't', | |
у: 'u', | |
ф: 'f', | |
х: 'h', | |
ц: 'c', | |
ч: 'ch', | |
ш: 'sh', | |
щ: 'sch', | |
ы: 'i', | |
э: 'e', | |
ю: 'yu', | |
я: 'ja', | |
ъ: '', | |
ь: '', | |
й: 'j', | |
}; | |
return [...str] | |
.map((l) => { | |
let latL = ru[l.toLocaleLowerCase()]; | |
if (l !== l.toLocaleLowerCase()) { | |
latL = latL.charAt(0).toLocaleUpperCase() + latL.slice(1); | |
} else if (latL === undefined) { | |
latL = l; | |
} | |
return latL; | |
}) | |
.join(''); | |
}; | |
const callApi = (data) => { | |
return fetch('/ipa/session/json', { | |
headers: { | |
accept: 'application/json', | |
'accept-language': 'en-US,en;q=0.9,ru-RU;q=0.8,ru;q=0.7', | |
'cache-control': 'no-cache', | |
'content-type': 'application/json', | |
pragma: 'no-cache', | |
'sec-ch-ua': '"Not_A Brand";v="8", "Chromium";v="120", "Google Chrome";v="120"', | |
'sec-ch-ua-mobile': '?0', | |
'sec-ch-ua-platform': '"Windows"', | |
'sec-fetch-dest': 'empty', | |
'sec-fetch-mode': 'cors', | |
'sec-fetch-site': 'same-origin', | |
'x-requested-with': 'XMLHttpRequest', | |
'x-sarah-locale': 'ru', | |
}, | |
referrerPolicy: 'strict-origin-when-cross-origin', | |
body: JSON.stringify(data), | |
method: 'POST', | |
mode: 'cors', | |
credentials: 'include', | |
}).then((r) => r.json()); | |
}; | |
const createUser = async (user) => { | |
const login = `${rusToLat(user.first_name[0])}${rusToLat(user.last_name)}`.toLocaleLowerCase(); | |
const userData = { | |
method: 'user_add', | |
params: [ | |
[login], | |
{ | |
givenname: user.first_name, | |
sn: user.last_name, | |
userpassword: user.password, | |
version: api_version, | |
}, | |
], | |
}; | |
console.log( | |
'Начинаем создавать пользователя', | |
login, | |
user.first_name, | |
user.last_name, | |
user.password, | |
user.groups && user.groups.join(' '), | |
); | |
await callApi(userData); | |
if (user.email) { | |
const emailData = { | |
method: 'user_mod', | |
params: [ | |
[login], | |
{ | |
all: true, | |
rights: true, | |
mail: user.email, | |
version: api_version, | |
}, | |
], | |
}; | |
console.log('Выставляем email', login, user.email); | |
await callApi(emailData); | |
} | |
if (user.groups && user.groups.length > 0) { | |
const groupsData = { | |
method: 'batch', | |
params: [ | |
user.groups.map(group => [ | |
{ | |
method: 'group_add_member', | |
params: [ | |
[group], | |
{ | |
user: login, | |
}, | |
], | |
}, | |
]), | |
{ | |
version: api_version, | |
}, | |
], | |
}; | |
console.log('Выставляем группы', login, user.groups.join(' ')); | |
await callApi(groupsData); | |
} | |
}; | |
const createUsers = async (users) => { | |
for (const user of users) { | |
const index = users.indexOf(user); | |
console.log('----------------------------'); | |
console.log(`Создаём пользователя ${index + 1}/${users.length}`); | |
try { | |
await createUser(user); | |
} catch (err) { | |
console.error(`Не удалось создать ${user.first_name} ${user.last_name}`); | |
console.error(err); | |
} | |
} | |
console.log('----------------------------'); | |
console.log('----------------------------'); | |
console.log('----------------------------'); | |
console.log('Все пользователи обработаны, проверьте, что все создались успешно!'); | |
console.log('----------------------------'); | |
console.log('----------------------------'); | |
console.log('----------------------------'); | |
}; | |
export { createUsers } |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// Запускаем в браузере | |
const { createUsers } = await import('https://cdn.gisthostfor.me/crutch12-JF40hoNtwg-1-ipa-create-users.js') | |
// Сюда пишем пользователей (!) и группы (!) | |
// Больше ничего менять не надо | |
const users = [ | |
{ | |
first_name: 'Данёк', | |
last_name: 'Якубович', | |
email: '[email protected]', // указываем email человека (можно пропустить, тогда будет без email) | |
// пароль - генерируем отсюда https://www.random.org/passwords/?num=5&len=12&format=html&rnd=new | |
password: 'MR132kKk9123123az5gnm', | |
// (!) указываем нужные группы (например 'internal-interns' или 'internal-developers') | |
groups: [ | |
'internal-interns', | |
], | |
}, | |
]; | |
await createUsers(users) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment