Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/bin/bash
- # bash interface pro cloudmail api
- # sanity checky promennych nemusime moc resit
- # api nam nedovoli tam narvat neco, co tam nelze poslat
- # dependency: jq, cat, cut, tr, curl
- # funkcni na: debian jessie, ubuntu xenial
- #############
- # variables #
- #############
- #curl_url="https://cm.dev.vsh-labs.cz/api/v1"
- curl_url="https://mailapi.vshosting.cloud"
- ##################
- # pomocne funkce #
- ##################
- # funkce pro random heslo
- #~~~~~~~~~~~~~~~~~~~~~~~~
- function randpw { < /dev/urandom tr -dc _A-Z-a-z-0-9 | head -c${1:-16};echo;}
- # funkce init login
- #~~~~~~~~~~~~~~~~~~
- function authinit {
- jsonout=$(curl -ks ${curl_url}/auth/login \
- -H "Content-Type: application/json" \
- -d @<(cat <<EOF
- {
- "email":"${myVar[uzivatel]}",
- "password":"${myVar[heslo]}"
- }
- EOF
- ))
- errcheck || exit ${err}
- # v tuto chvili bysme meli mit err=0 (vse ok) a sosnuty json
- # ziskani account id a accesstokenu
- accessToken=$(echo ${jsonout} | jq -r .auth.accessToken)
- accountId=$(echo ${jsonout} | jq -r .auth.account.id)
- mailboxId=$(echo ${jsonout} | jq -r .auth.mailbox.id)
- roleCode=$(echo ${jsonout} | jq -r .auth.mailbox.roleCode)
- # echo ${jsonout} | jq .
- }
- # funkce na zalozeni domeny
- #~~~~~~~~~~~~~~~~~~~~~~~~~~
- function domainadd {
- jsonout=$(curl -ks -XPOST ${curl_url}/domain \
- -H "Content-Type: application/json" \
- -H "Authorization: Bearer ${accessToken}" \
- -d @<(cat <<EOF
- {
- "accountId":"${accountId}",
- "name":"${myVar[domena]}"
- }
- EOF
- ))
- }
- # funkce na vyhledani domeny (v ramci clientadmina)
- #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- function domainsearch {
- jsonout=$(curl -ks ${curl_url}/domain/full \
- -H "Content-Type: application/json" \
- -H "Authorization: Bearer ${accessToken}"
- )
- domainId=$(echo ${jsonout} | jq -r '.domains[] | select(.name=="'${domain}'") | "\(.id)"')
- if [ -z $domainId ]
- then
- echo "Pro domenu ${domain} nelze pridavat mailboxy!"
- echo "Povolene domeny pro clientadmina ${uzivatel}:"
- echo ${jsonout} | jq -r '.domains[] | "\(.name)"'
- exit 1
- fi
- }
- # funkce na vytvoreni clientadmina (vyzaduje superadmina)
- #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- function clientadd {
- myVar[clientpass]=$(randpw)
- jsonout=$(curl -ks ${curl_url}/account \
- -H "Content-Type: application/json" \
- -H "Authorization: Bearer ${accessToken}" \
- -d @<(cat <<EOF
- {
- "companyName": "${myVar[nazevfirmy]}",
- "companySystemId" :${myVar[idfirmy]},
- "adminMailboxEmail": "clientadmin@${myVar[domena]}",
- "adminMailboxPassword": "${myVar[clientpass]}",
- "adminMailboxLanguageCode": "CS"
- }
- EOF
- ))
- }
- # funkce na vylistovani domen uzivatele
- #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- function domainlist {
- jsonout=$(curl -ks ${curl_url}/domain/full \
- -H "Content-Type: application/json" \
- -H "Authorization: Bearer ${accessToken}"
- )
- echo "Domeny spravovane clientadminem ${myVar[uzivatel]}:"
- echo ${jsonout} | jq -r '.domains[] | "\(.name)"'
- }
- # funkce na zalozeni mailboxu
- #~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- function mailboxadd {
- myVar[heslo]=$(randpw)
- jsonout=$(curl -ks -XPOST ${curl_url}/mailbox \
- -H "Content-Type: application/json" \
- -H "Authorization: Bearer ${accessToken}" \
- -d @<(cat <<EOF
- {
- "domainId": "${domainId}",
- "emailLocalPart": "${emailLocalPart}",
- "password": "${myVar[heslo]}",
- "languageCode": "CS",
- "roleCode": "BASIC_USER"
- }
- EOF
- ))
- }
- # funkce na zalozeni aliasu
- #~~~~~~~~~~~~~~~~~~~~~~~~~~
- function aliasadd {
- jsonout=$(curl -ks -XPOST ${curl_url}/mail-group \
- -H "Content-Type: application/json" \
- -H "Authorization: Bearer ${accessToken}" \
- -d @<(cat <<EOF
- {
- "domainId": "${domainId}",
- "groupEmailLocalPart": "${myVar[skupina]}",
- "groupContentEmailList": [
- "${myVar[cil]}"
- ]
- }
- EOF
- ))
- }
- # funkce na migraci aliasu z posty
- #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- function migratealias {
- jsonout=$(curl -ks -XPOST ${curl_url}/mail-group \
- -H "Content-Type: application/json" \
- -H "Authorization: Bearer ${accessToken}" \
- -d @<(cat <<EOF
- {
- "domainId": "${domainId}",
- "groupEmailLocalPart": "${myVar[skupina]}",
- "groupContentEmailList": [
- "${myVar[cil]}"
- ]
- }
- EOF
- ))
- }
- function emailidsearch {
- jsonout=$(curl -ks ${curl_url}/domain/full \
- -H "Content-Type: application/json" \
- -H "Authorization: Bearer ${accessToken}"
- )
- echo "ID emailu ${myvar[zdroj]} je: :"
- echo ${jsonout} | jq -r '.domains[].mailboxes[] | select(.email=="'${myVar[zdroj]}'") | "\(.id)"'
- zdrojID=`echo ${jsonout} | jq -r '.domains[].mailboxes[] | select(.email=="'${myVar[zdroj]}'") | "\(.id)"'`
- }
- # funkce na stažení dat o schránce z CM pro migraci forwardu z posty
- #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- function getmailboxinfo {
- jsonout=$(curl -ks ${curl_url}/mailbox/$zdrojID \
- -H "Content-Type: application/json" \
- -H "Authorization: Bearer ${accessToken}"
- )
- echo "Inforace o uzivateli ${myVar[zdroj]}:"
- for i in `echo ${jsonout} | jq -r '.mailbox.inboxForwardList[]'`; do forwards+="\"$i\","; done
- forwards=${forwards::-1}
- for i in `echo ${jsonout} | jq -r '.mailbox.blackList[]'`; do blacklist+="\"$i\","; done
- blacklist=${blacklist::-1}
- languageCode=`echo ${jsonout} | jq -r '.mailbox.languageCode'`
- messageQuota=`echo ${jsonout} | jq -r '.mailbox.messagesQuota'`
- diskSpaceQuotaGB=`echo ${jsonout} | jq -r '.mailbox.diskSpaceQuotaGB'`
- roleCode=`echo ${jsonout} | jq -r '.mailbox.roleCode'`
- echo "Presmerovani: $forwards"
- echo "Blacklist: $blacklist"
- echo "Jazyk: $languageCode"
- echo "Kvota zprav: $messageQuota"
- echo "Kvota GB: $diskSpaceQuotaGB"
- echo "Role: $roleCode"
- }
- # funkce na migraci forwardu z posty
- #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- function setforward {
- jsonout=$(curl -ks -XPUT ${curl_url}/mailbox/$zdrojID \
- -H "Content-Type: application/json" \
- -H "Authorization: Bearer ${accessToken}" \
- -d @<(cat <<EOF
- {
- "languageCode": "$languageCode",
- "inboxForwardList": [$forwards],
- "blackList": [$blacklist],
- "messagesQuota": $messageQuota,
- "diskSpaceQuotaGB": $diskSpaceQuotaGB,
- "roleCode": "$roleCode"
- }
- EOF
- ))
- }
- # funkce na vylistovani domen clientadmina
- #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- function mailboxlist {
- jsonout=$(curl -ks ${curl_url}/domain/full \
- -H "Content-Type: application/json" \
- -H "Authorization: Bearer ${accessToken}"
- )
- echo ${jsonout}
- echo ""
- echo "Emaily spravovane clientadminem ${myVar[uzivatel]}:"
- echo ${jsonout} | jq -r '.domains[].mailboxes[].id,.domains[].mailboxes[].email'
- }
- # funkce na zmenu hesla
- #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- function passwordchange {
- jsonout=$(curl -ks -XPUT ${curl_url}/mailbox/${mailboxId}/password \
- -H "Content-Type: application/json" \
- -H "Authorization: Bearer ${accessToken}" \
- -d @<(cat <<EOF
- {
- "password": "${myVar[noveheslo]}"
- }
- EOF
- ))
- }
- # funkce na check erroru z jsonu
- #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- function errcheck {
- jsonerror=$(echo ${jsonout} |jq -r .error.message)
- if [ "${jsonerror}" != "null" ]
- then
- echo "CHYBA!"
- echo "${jsonerror}"
- exit 1
- fi
- return 0
- }
- # funkce na kontrolu zadnych argumentu a naplneni array myVar
- #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- function checkargs {
- checkArray=( "$@" )
- # vyhodime nulty element z argumentu (typ akce) a reindexnem (aby pole zacinalo od 0)
- unset myArgs[0]; myArgs=( "${myArgs[@]}" )
- if [ ${#checkArray[@]} -ne ${#myArgs[@]} ]
- then
- echo "Nespravny pocet argumentu"
- echo "Potrebujem ${#checkArray[@]}: ${checkArray[@]}"
- echo "Mame ${#myArgs[@]}: ${myArgs[@]}"
- exit 1
- else
- # setnem promenne dle nazvu do myVar[nazev]
- for i in ${!checkArray[*]}
- do
- myVar[${checkArray[$i]}]=${myArgs[$i]}
- done
- fi
- }
- ################
- # konec funkci #
- ################
- ######################
- # samotny porcessing #
- ######################
- myArgs=( "$@" )
- declare -A myVar
- err=1
- # case na zaklade $1 argumentu skriptu
- case "${myArgs[0]}" in
- domainadd)
- echo ${myArgs[0]}
- checkargs uzivatel heslo domena
- # zalozeni domeny
- # pravdepodobne mame co potrebujeme
- echo "Zalozime domenu ${myVar[domena]}"
- #echo "accesstoken: ${accessToken}"
- #echo "accountId: ${accountId}"
- authinit
- domainadd
- errcheck && (echo "OK"; echo "JSONOUT:"; echo ${jsonout} | jq .)
- ;;
- domainlist)
- echo ${myArgs[0]}
- checkargs uzivatel heslo
- authinit
- domainlist
- errcheck
- ;;
- aliasadd)
- echo ${myArgs[0]}
- checkargs uzivatel heslo skupina cil
- authinit
- domain=$(echo ${myVar[uzivatel]} |cut -d '@' -f 2)
- domainsearch
- aliasadd
- errcheck
- ;;
- migratealias)
- echo ${myArgs[0]}
- checkargs uzivatel heslo skupina domena cil
- authinit
- domain=${myVar[domena]}
- domainsearch
- migratealias
- errcheck
- ;;
- setforward)
- echo ${myArgs[0]}
- checkargs uzivatel heslo zdroj cil
- authinit
- #domain=${myVar[domena]}
- #domainsearch
- emailidsearch
- getmailboxinfo
- setforward
- errcheck
- ;;
- mailboxadd)
- # pridani mailboxu
- echo ${myArgs[0]}
- checkargs uzivatel heslo mailbox
- if [[ "${myVar[mailbox]}" != *"@"* ]]
- then
- echo "Zadana hodnota ${myVar[mailbox]} nevypada jako email!"
- err=1
- else
- echo "Zalozime email ${myVar[mailbox]}"
- emailLocalPart=$(echo ${myVar[mailbox]} |cut -d '@' -f 1)
- domain=$(echo ${myVar[mailbox]} |cut -d '@' -f 2)
- authinit
- domainsearch
- # v tomto miste mame validni domainId, nebo uz jsme davno vybouchli
- #echo "DomainId=${domainId}"
- mailboxadd
- errcheck
- echo "OK"
- echo "JSONOUT:"
- echo ${jsonout} | jq .
- echo ""
- echo "Zalozen email ${myVar[mailbox]} s default heslem ${myVar[heslo]}"
- fi
- ;;
- mailboxlist)
- echo ${myArgs[0]}
- checkargs uzivatel heslo
- authinit
- mailboxlist
- errcheck
- ;;
- clientadd)
- echo ${myArgs[0]}
- checkargs uzivatel heslo nazevfirmy idfirmy domena
- authinit
- clientadd
- errcheck
- echo "OK"
- echo "JSONOUT:"
- echo ${jsonout} | jq .
- echo ""
- echo "Zalozen clientadmin:"
- echo "Nazev firmy: ${myVar[nazevfirmy]}"
- echo "ID Firmy : ${myVar[idfirmy]}"
- echo "ClientAdmin: clientadmin@${myVar[domena]}"
- echo "Heslo : ${myVar[clientpass]}"
- ;;
- passwordchange)
- echo ${myArgs[0]}
- checkargs uzivatel heslo noveheslo
- authinit
- passwordchange
- errcheck
- echo ${jsonout} | jq .
- ;;
- *)
- # default catchall pri chybe nebo chybnem zadani
- echo "Neznamy argument ${myArgs[0]}!"
- echo "Pouziti: $0 {clientadd|domainadd|domainlist|mailboxadd|mailboxlist|passwordchange|aliasadd} ARGs"
- echo "Argumenty:"
- echo " clientadd superadmin@superdomena.tld \"MegaH3slO\" \"Nazev Firmy s.r.o.\" \"ID Firmy dle ISka\" clientdomena.tld"
- echo " ID Firmy je ciselny udaj, clientdomena.tld je klientova prvni domena (pokud jich ma vice)"
- echo " domainadd clientadmin@clientdomena.tld \"Sl0z1teHeslo\" novadomena.tld"
- echo " mailboxadd clientadmin@clientdomena.tld \"Sl0z1teHeslo\" novyemail@novadomena.tld"
- echo " domainlist clientadmin@clientdomena.tld \"Sl0z1teHeslo\""
- echo " mailboxlist clientadmin@clientdomena.tld \"Sl0z1teHeslo\""
- echo " passwordchange nejakyuser@clientdomena.tld \"NejakeHesl0\" \"Nov3HeSl0\""
- echo " aliasadd clientadmin@clientdomena.tld \"Sl0z1teHesl0\" skupina cilovymail@domena.tld"
- echo " migratealias clientadmin@clientdomena.tld \"Sl0z1teHesl0\" skupina domena cilovymail@domena.tld"
- exit 1
- esac
- exit $err
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement