Guest User

Untitled

a guest
Dec 18th, 2018
234
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.14 KB | None | 0 0
  1. #!/bin/sh
  2. ###############################
  3. ##
  4. baseurl=YOUR_GITLAB_URL
  5. logdir=YOUR_LOG_DIRECTORY
  6. basedir=YOUR_BASE_DIRECTORY
  7. usermail=YOUR_ADMIN_MAIL
  8. userpass=YOUR_ADMIN_PASSWORD
  9.  
  10. project_access=20 #00=deined 10=read 20=report 30=admin
  11. ## SIMPLE LOGGER
  12. ## $logdir default => /var/log
  13. ## logfile path & name : $logdir/2012-XX-XX.log
  14. ## log type : [16:00:36]loggingtest
  15.  
  16. function logger(){
  17. user=`whoami`
  18. filename=`date +%Y-%m-%d`
  19. filename=$filename.log
  20. if [ ! $logdir ]; then
  21. logdir=/var/log
  22. fi
  23. if [ ! -d $logdir ]; then
  24. mkdir -p $logdir && chown -R $user $logdir
  25. fi
  26.  
  27. if [ "$1" ]; then
  28. now=`date +%T`
  29. echo [$now]$1 >> $logdir/$filename
  30. fi
  31. }
  32. ## Is there excuted process?
  33. if [ -e $basedir/cookies.txt ]
  34. then
  35. logger "There is running script : add_users_to_projects"
  36. exit
  37. fi
  38. start=`date +%s`
  39.  
  40. logger "==========================================================================================="
  41. logger "adding user process start"
  42. #get login page's authtoken
  43. authtoken=`curl -s -c $basedir/cookies.txt $baseurl/users/sign_in | grep -Po '(?<=<meta content=")([^"]+)(?=" name="csrf-token" />)'`
  44. logger "Login page's auth token & cookies acquired : $authtoken"
  45.  
  46. # login
  47. authtoken=${authtoken//+/%2b} #when csrf token includes '+' character, authentication is failed, it must be URI encoded
  48. curl -s -b $basedir/cookies.txt -c $basedir/cookies.txt -d "utf8=%E2%9C%93&authenticity_token=$authtoken&user[email]=$usermail&user[password]=$userpass&commit=Sign+in" $baseurl/users/sign_in
  49. logger "Login completed "
  50. #get projects list
  51. projectslist=`mysql -ugitlab -pYOUR_GITLAB_DB_ACCOUNT -h YOUR_DB_HOST < $basedir/select_projects.sql`
  52. projectscount=`echo "$projectslist" | wc -l`
  53. let "projectscount-=1" #remove column name
  54. logger "Gitlab project count : $projectscount"
  55. #adding users loop
  56. for project in $projectslist
  57. do
  58. if [ "$project" != "name" ]; #database column name pass
  59. then
  60. logger "Project name : $project"
  61.  
  62. # get admin project pages and store it to project_page.html
  63. curl -i -s -b $basedir/cookies.txt $baseurl/admin/projects/$project > $basedir/project_page.html
  64.  
  65. # parse user_ids
  66. userIdsStr=`grep -Po '(<select id="user_ids")([^\}]+)(<select)' $basedir/project_page.html | grep -Po '(?<=option value=")\d+(?=">)'|tr '\n' ','|sed 's/,/\&user_ids\[\]=/g'`
  67. userIdsLog=`grep -Po '(<select id="user_ids")([^\}]+)(<select)' $basedir/project_page.html | grep -Po '(?<=option value=")\d+(?=">)'|tr '\n' ','`
  68. if [ ${#userIdsLog} = 0 ];
  69. then
  70. logger "Added user Ids : no new users"
  71. else
  72. postdata="utf8=%E2%9C%93&_method=put&authenticity_token=$authtoken&user_ids[]=$userIdsStr&project_access=$project_access&commit=Add"
  73. echo
  74. curl -s -b $basedir/cookies.txt -d $postdata $baseurl/admin/projects/$project/team_update
  75. logger "Added user Ids : $userIdsLog"
  76. fi
  77. fi
  78. done
  79. end=`date +%s`
  80. let "end-=$start"
  81. logger "elapsed time : $end"
  82. logger "batch ended"
  83. rm -f $basedir/cookies.txt $basedir/project_page.html # remove temp files
  84.  
  85. exit
Add Comment
Please, Sign In to add comment