Advertisement
Guest User

Untitled

a guest
Jun 3rd, 2017
597
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Bash 11.63 KB | None | 0 0
  1. #!/bin/bash
  2. # bash interface pro cloudmail api
  3. # sanity checky promennych nemusime moc resit
  4. # api nam nedovoli tam narvat neco, co tam nelze poslat
  5. # dependency: jq, cat, cut, tr, curl
  6. # funkcni na: debian jessie, ubuntu xenial
  7.  
  8. #############
  9. # variables #
  10. #############
  11.  
  12. #curl_url="https://cm.dev.vsh-labs.cz/api/v1"
  13. curl_url="https://mailapi.vshosting.cloud"
  14.  
  15. ##################
  16. # pomocne funkce #
  17. ##################
  18.  
  19. # funkce pro random heslo
  20. #~~~~~~~~~~~~~~~~~~~~~~~~
  21. function randpw { < /dev/urandom tr -dc _A-Z-a-z-0-9 | head -c${1:-16};echo;}
  22.  
  23. # funkce init login
  24. #~~~~~~~~~~~~~~~~~~
  25. function authinit {
  26.     jsonout=$(curl -ks ${curl_url}/auth/login \
  27.         -H "Content-Type: application/json" \
  28.         -d @<(cat <<EOF
  29. {
  30.     "email":"${myVar[uzivatel]}",
  31.     "password":"${myVar[heslo]}"
  32. }
  33. EOF
  34.         ))
  35.     errcheck || exit ${err}
  36.     # v tuto chvili bysme meli mit err=0 (vse ok) a sosnuty json
  37.     # ziskani account id a accesstokenu
  38.     accessToken=$(echo ${jsonout} | jq -r .auth.accessToken)
  39.     accountId=$(echo ${jsonout} | jq -r .auth.account.id)
  40.     mailboxId=$(echo ${jsonout} | jq -r .auth.mailbox.id)
  41.     roleCode=$(echo ${jsonout} | jq -r .auth.mailbox.roleCode)
  42. #   echo ${jsonout} | jq .
  43. }
  44.  
  45. # funkce na zalozeni domeny
  46. #~~~~~~~~~~~~~~~~~~~~~~~~~~
  47. function domainadd {
  48.     jsonout=$(curl -ks -XPOST ${curl_url}/domain \
  49.         -H "Content-Type: application/json" \
  50.         -H "Authorization: Bearer ${accessToken}" \
  51.         -d @<(cat <<EOF
  52. {  
  53.    "accountId":"${accountId}",
  54.    "name":"${myVar[domena]}"
  55. }
  56. EOF
  57.         ))
  58. }
  59.  
  60. # funkce na vyhledani domeny (v ramci clientadmina)
  61. #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  62. function domainsearch {
  63.     jsonout=$(curl -ks ${curl_url}/domain/full \
  64.         -H "Content-Type: application/json" \
  65.         -H "Authorization: Bearer ${accessToken}"
  66.         )
  67.     domainId=$(echo ${jsonout} | jq -r '.domains[] | select(.name=="'${domain}'") | "\(.id)"')
  68.     if [ -z $domainId ]
  69.     then
  70.         echo "Pro domenu ${domain} nelze pridavat mailboxy!"
  71.         echo "Povolene domeny pro clientadmina ${uzivatel}:"
  72.         echo ${jsonout} | jq -r '.domains[] | "\(.name)"'
  73.         exit 1
  74.     fi
  75. }
  76.  
  77. # funkce na vytvoreni clientadmina (vyzaduje superadmina)
  78. #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  79. function clientadd {
  80.     myVar[clientpass]=$(randpw)
  81.     jsonout=$(curl -ks ${curl_url}/account \
  82.         -H "Content-Type: application/json" \
  83.         -H "Authorization: Bearer ${accessToken}" \
  84.         -d @<(cat <<EOF
  85. {  
  86.    "companyName": "${myVar[nazevfirmy]}",
  87.    "companySystemId" :${myVar[idfirmy]},
  88.    "adminMailboxEmail": "clientadmin@${myVar[domena]}",
  89.    "adminMailboxPassword": "${myVar[clientpass]}",
  90.    "adminMailboxLanguageCode": "CS"
  91. }
  92. EOF
  93.         ))
  94. }
  95.  
  96. # funkce na vylistovani domen uzivatele
  97. #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  98. function domainlist {
  99.     jsonout=$(curl -ks ${curl_url}/domain/full \
  100.         -H "Content-Type: application/json" \
  101.         -H "Authorization: Bearer ${accessToken}"
  102.         )
  103.     echo "Domeny spravovane clientadminem ${myVar[uzivatel]}:"
  104.     echo ${jsonout} | jq -r '.domains[] | "\(.name)"'
  105. }
  106.  
  107. # funkce na zalozeni mailboxu
  108. #~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  109. function mailboxadd {
  110.     myVar[heslo]=$(randpw)
  111.     jsonout=$(curl -ks -XPOST ${curl_url}/mailbox \
  112.         -H "Content-Type: application/json" \
  113.         -H "Authorization: Bearer ${accessToken}" \
  114.         -d @<(cat <<EOF
  115. {
  116.   "domainId": "${domainId}",
  117.   "emailLocalPart": "${emailLocalPart}",
  118.   "password": "${myVar[heslo]}",
  119.   "languageCode": "CS",
  120.   "roleCode": "BASIC_USER"
  121. }
  122. EOF
  123.         ))
  124. }
  125.  
  126. # funkce na zalozeni aliasu
  127. #~~~~~~~~~~~~~~~~~~~~~~~~~~
  128.  
  129. function aliasadd {
  130.     jsonout=$(curl -ks -XPOST ${curl_url}/mail-group \
  131.         -H "Content-Type: application/json" \
  132.         -H "Authorization: Bearer ${accessToken}" \
  133.         -d @<(cat <<EOF
  134. {
  135.   "domainId": "${domainId}",
  136.   "groupEmailLocalPart": "${myVar[skupina]}",
  137.   "groupContentEmailList": [
  138.     "${myVar[cil]}"
  139.   ]
  140. }
  141. EOF
  142.         ))
  143. }
  144.  
  145. # funkce na migraci aliasu z posty
  146. #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  147.  
  148. function migratealias {
  149.         jsonout=$(curl -ks -XPOST ${curl_url}/mail-group \
  150.                 -H "Content-Type: application/json" \
  151.                 -H "Authorization: Bearer ${accessToken}" \
  152.                 -d @<(cat <<EOF
  153. {
  154.   "domainId": "${domainId}",
  155.   "groupEmailLocalPart": "${myVar[skupina]}",
  156.   "groupContentEmailList": [
  157.     "${myVar[cil]}"
  158.   ]
  159. }
  160. EOF
  161.                 ))
  162. }
  163.  
  164. function emailidsearch {
  165.         jsonout=$(curl -ks ${curl_url}/domain/full \
  166.                 -H "Content-Type: application/json" \
  167.                 -H "Authorization: Bearer ${accessToken}"
  168.                 )
  169.  
  170.         echo "ID emailu ${myvar[zdroj]} je: :"
  171.     echo ${jsonout} | jq -r '.domains[].mailboxes[] | select(.email=="'${myVar[zdroj]}'") | "\(.id)"'
  172.         zdrojID=`echo ${jsonout} | jq -r '.domains[].mailboxes[] | select(.email=="'${myVar[zdroj]}'") | "\(.id)"'`
  173.  
  174. }
  175.  
  176. # funkce na stažení dat o schránce z CM pro migraci forwardu z posty
  177. #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  178.  
  179. function getmailboxinfo {
  180.  
  181.    
  182.         jsonout=$(curl -ks ${curl_url}/mailbox/$zdrojID \
  183.                 -H "Content-Type: application/json" \
  184.                 -H "Authorization: Bearer ${accessToken}"
  185.                 )
  186.  
  187.         echo "Inforace o uzivateli ${myVar[zdroj]}:"
  188.         for i in `echo ${jsonout} | jq -r '.mailbox.inboxForwardList[]'`; do forwards+="\"$i\","; done
  189.     forwards=${forwards::-1}
  190.         for i in `echo ${jsonout} | jq -r '.mailbox.blackList[]'`; do blacklist+="\"$i\","; done
  191.         blacklist=${blacklist::-1}
  192.     languageCode=`echo ${jsonout} | jq -r '.mailbox.languageCode'`
  193.     messageQuota=`echo ${jsonout} | jq -r '.mailbox.messagesQuota'`
  194.     diskSpaceQuotaGB=`echo ${jsonout} | jq -r '.mailbox.diskSpaceQuotaGB'`
  195.     roleCode=`echo ${jsonout} | jq -r '.mailbox.roleCode'`
  196.  
  197.     echo "Presmerovani: $forwards"
  198.     echo "Blacklist: $blacklist"
  199.     echo "Jazyk: $languageCode"
  200.     echo "Kvota zprav: $messageQuota"
  201.     echo "Kvota GB: $diskSpaceQuotaGB"
  202.     echo "Role: $roleCode"
  203. }
  204.  
  205. # funkce na migraci forwardu z posty
  206. #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  207.  
  208. function setforward {
  209.     jsonout=$(curl -ks -XPUT ${curl_url}/mailbox/$zdrojID \
  210.         -H "Content-Type: application/json" \
  211.         -H "Authorization: Bearer ${accessToken}" \
  212.         -d @<(cat <<EOF
  213.  
  214. {
  215.   "languageCode": "$languageCode",
  216.   "inboxForwardList": [$forwards],
  217.   "blackList": [$blacklist],
  218.   "messagesQuota": $messageQuota,
  219.   "diskSpaceQuotaGB": $diskSpaceQuotaGB,
  220.   "roleCode": "$roleCode"
  221.  
  222.  
  223. }
  224. EOF
  225.         ))
  226. }
  227.  
  228. # funkce na vylistovani domen clientadmina
  229. #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  230. function mailboxlist {
  231.     jsonout=$(curl -ks ${curl_url}/domain/full \
  232.         -H "Content-Type: application/json" \
  233.         -H "Authorization: Bearer ${accessToken}"
  234.         )
  235.  
  236.     echo ${jsonout}
  237.     echo ""
  238.     echo "Emaily spravovane clientadminem ${myVar[uzivatel]}:"
  239.     echo ${jsonout} | jq -r '.domains[].mailboxes[].id,.domains[].mailboxes[].email'
  240. }
  241.  
  242. # funkce na zmenu hesla
  243. #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  244. function passwordchange {
  245.         jsonout=$(curl -ks -XPUT ${curl_url}/mailbox/${mailboxId}/password \
  246.                 -H "Content-Type: application/json" \
  247.                 -H "Authorization: Bearer ${accessToken}" \
  248.                 -d @<(cat <<EOF
  249. {
  250.   "password": "${myVar[noveheslo]}"
  251. }
  252. EOF
  253.                 ))
  254. }
  255.  
  256. # funkce na check erroru z jsonu
  257. #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  258. function errcheck {
  259.     jsonerror=$(echo ${jsonout} |jq -r .error.message)
  260.     if [ "${jsonerror}" != "null" ]
  261.     then   
  262.         echo "CHYBA!"
  263.         echo "${jsonerror}"
  264.         exit 1
  265.     fi
  266.     return 0
  267. }
  268.  
  269. # funkce na kontrolu zadnych argumentu a naplneni array myVar
  270. #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  271. function checkargs {
  272.     checkArray=( "$@" )
  273.     # vyhodime nulty element z argumentu (typ akce) a reindexnem (aby pole zacinalo od 0)
  274.     unset myArgs[0]; myArgs=( "${myArgs[@]}" )
  275.     if [ ${#checkArray[@]} -ne ${#myArgs[@]} ]
  276.     then
  277.         echo "Nespravny pocet argumentu"
  278.         echo "Potrebujem ${#checkArray[@]}: ${checkArray[@]}"
  279.         echo "Mame ${#myArgs[@]}: ${myArgs[@]}"
  280.         exit 1
  281.     else
  282.         # setnem promenne dle nazvu do myVar[nazev]
  283.         for i in ${!checkArray[*]}
  284.         do
  285.             myVar[${checkArray[$i]}]=${myArgs[$i]}
  286.         done
  287.     fi
  288. }
  289.  
  290. ################
  291. # konec funkci #
  292. ################
  293.  
  294. ######################
  295. # samotny porcessing #
  296. ######################
  297.  
  298. myArgs=( "$@" )
  299. declare -A myVar
  300. err=1
  301.  
  302. # case na zaklade $1 argumentu skriptu
  303. case "${myArgs[0]}" in
  304. domainadd)
  305.     echo ${myArgs[0]}
  306.     checkargs uzivatel heslo domena
  307.     # zalozeni domeny
  308.     # pravdepodobne mame co potrebujeme
  309.     echo "Zalozime domenu ${myVar[domena]}"
  310.     #echo "accesstoken: ${accessToken}"
  311.     #echo "accountId: ${accountId}"
  312.     authinit
  313.     domainadd
  314.     errcheck && (echo "OK"; echo "JSONOUT:"; echo ${jsonout} | jq .)
  315. ;;
  316.  
  317. domainlist)
  318.     echo ${myArgs[0]}
  319.     checkargs uzivatel heslo
  320.     authinit
  321.     domainlist
  322.     errcheck
  323. ;;
  324.  
  325. aliasadd)
  326.     echo ${myArgs[0]}
  327.     checkargs uzivatel heslo skupina cil
  328.     authinit
  329.     domain=$(echo ${myVar[uzivatel]} |cut -d '@' -f 2)
  330.     domainsearch
  331.     aliasadd
  332.     errcheck
  333. ;;
  334.  
  335. migratealias)
  336.         echo ${myArgs[0]}
  337.         checkargs uzivatel heslo skupina domena cil
  338.         authinit
  339.         domain=${myVar[domena]}
  340.         domainsearch
  341.         migratealias
  342.         errcheck
  343. ;;
  344.  
  345. setforward)
  346.     echo ${myArgs[0]}
  347.     checkargs uzivatel heslo zdroj cil
  348.     authinit
  349.     #domain=${myVar[domena]}
  350.     #domainsearch
  351.     emailidsearch
  352.     getmailboxinfo
  353.     setforward
  354.     errcheck
  355. ;;
  356.  
  357. mailboxadd)
  358.     # pridani mailboxu
  359.     echo ${myArgs[0]}
  360.     checkargs uzivatel heslo mailbox
  361.     if [[ "${myVar[mailbox]}" != *"@"* ]]
  362.     then
  363.         echo "Zadana hodnota ${myVar[mailbox]} nevypada jako email!"
  364.         err=1
  365.     else
  366.         echo "Zalozime email ${myVar[mailbox]}"
  367.         emailLocalPart=$(echo ${myVar[mailbox]} |cut -d '@' -f 1)
  368.         domain=$(echo ${myVar[mailbox]} |cut -d '@' -f 2)
  369.         authinit
  370.         domainsearch
  371.         # v tomto miste mame validni domainId, nebo uz jsme davno vybouchli
  372.         #echo "DomainId=${domainId}"
  373.         mailboxadd
  374.         errcheck
  375.         echo "OK"
  376.         echo "JSONOUT:"
  377.         echo ${jsonout} | jq .
  378.         echo ""
  379.         echo "Zalozen email ${myVar[mailbox]} s default heslem ${myVar[heslo]}"
  380.     fi 
  381. ;;
  382.  
  383. mailboxlist)
  384.     echo ${myArgs[0]}
  385.     checkargs uzivatel heslo
  386.     authinit
  387.     mailboxlist
  388.     errcheck
  389. ;;
  390.  
  391. clientadd)
  392.     echo ${myArgs[0]}
  393.     checkargs uzivatel heslo nazevfirmy idfirmy domena
  394.     authinit
  395.     clientadd
  396.     errcheck
  397.     echo "OK"
  398.     echo "JSONOUT:"
  399.     echo ${jsonout} | jq .
  400.     echo ""
  401.     echo "Zalozen clientadmin:"
  402.     echo "Nazev firmy: ${myVar[nazevfirmy]}"
  403.     echo "ID Firmy   : ${myVar[idfirmy]}"
  404.     echo "ClientAdmin: clientadmin@${myVar[domena]}"
  405.     echo "Heslo      : ${myVar[clientpass]}"
  406. ;;
  407.  
  408. passwordchange)
  409.     echo ${myArgs[0]}
  410.     checkargs uzivatel heslo noveheslo
  411.     authinit
  412.     passwordchange
  413.     errcheck
  414.     echo ${jsonout} | jq .
  415. ;;
  416.  
  417. *)
  418.     # default catchall pri chybe nebo chybnem zadani
  419.     echo "Neznamy argument ${myArgs[0]}!"
  420.     echo "Pouziti: $0 {clientadd|domainadd|domainlist|mailboxadd|mailboxlist|passwordchange|aliasadd} ARGs"
  421.     echo "Argumenty:"
  422.     echo "  clientadd superadmin@superdomena.tld \"MegaH3slO\" \"Nazev Firmy s.r.o.\" \"ID Firmy dle ISka\" clientdomena.tld"
  423.     echo "     ID Firmy je ciselny udaj, clientdomena.tld je klientova prvni domena (pokud jich ma vice)"
  424.     echo "  domainadd clientadmin@clientdomena.tld \"Sl0z1teHeslo\" novadomena.tld"
  425.     echo "  mailboxadd clientadmin@clientdomena.tld \"Sl0z1teHeslo\" novyemail@novadomena.tld"
  426.     echo "  domainlist clientadmin@clientdomena.tld \"Sl0z1teHeslo\""
  427.     echo "  mailboxlist clientadmin@clientdomena.tld \"Sl0z1teHeslo\""
  428.     echo "  passwordchange nejakyuser@clientdomena.tld \"NejakeHesl0\" \"Nov3HeSl0\""
  429.     echo "  aliasadd clientadmin@clientdomena.tld \"Sl0z1teHesl0\" skupina cilovymail@domena.tld"
  430.     echo "  migratealias clientadmin@clientdomena.tld \"Sl0z1teHesl0\" skupina domena cilovymail@domena.tld"
  431.     exit 1
  432. esac
  433.  
  434. exit $err
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement