Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/bin/sh
- ###############################
- ##
- baseurl=YOUR_GITLAB_URL
- logdir=YOUR_LOG_DIRECTORY
- basedir=YOUR_BASE_DIRECTORY
- usermail=YOUR_ADMIN_MAIL
- userpass=YOUR_ADMIN_PASSWORD
- project_access=20 #00=deined 10=read 20=report 30=admin
- ## SIMPLE LOGGER
- ## $logdir default => /var/log
- ## logfile path & name : $logdir/2012-XX-XX.log
- ## log type : [16:00:36]loggingtest
- function logger(){
- user=`whoami`
- filename=`date +%Y-%m-%d`
- filename=$filename.log
- if [ ! $logdir ]; then
- logdir=/var/log
- fi
- if [ ! -d $logdir ]; then
- mkdir -p $logdir && chown -R $user $logdir
- fi
- if [ "$1" ]; then
- now=`date +%T`
- echo [$now]$1 >> $logdir/$filename
- fi
- }
- ## Is there excuted process?
- if [ -e $basedir/cookies.txt ]
- then
- logger "There is running script : add_users_to_projects"
- exit
- fi
- start=`date +%s`
- logger "==========================================================================================="
- logger "adding user process start"
- #get login page's authtoken
- authtoken=`curl -s -c $basedir/cookies.txt $baseurl/users/sign_in | grep -Po '(?<=<meta content=")([^"]+)(?=" name="csrf-token" />)'`
- logger "Login page's auth token & cookies acquired : $authtoken"
- # login
- authtoken=${authtoken//+/%2b} #when csrf token includes '+' character, authentication is failed, it must be URI encoded
- 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
- logger "Login completed "
- #get projects list
- projectslist=`mysql -ugitlab -pYOUR_GITLAB_DB_ACCOUNT -h YOUR_DB_HOST < $basedir/select_projects.sql`
- projectscount=`echo "$projectslist" | wc -l`
- let "projectscount-=1" #remove column name
- logger "Gitlab project count : $projectscount"
- #adding users loop
- for project in $projectslist
- do
- if [ "$project" != "name" ]; #database column name pass
- then
- logger "Project name : $project"
- # get admin project pages and store it to project_page.html
- curl -i -s -b $basedir/cookies.txt $baseurl/admin/projects/$project > $basedir/project_page.html
- # parse user_ids
- userIdsStr=`grep -Po '(<select id="user_ids")([^\}]+)(<select)' $basedir/project_page.html | grep -Po '(?<=option value=")\d+(?=">)'|tr '\n' ','|sed 's/,/\&user_ids\[\]=/g'`
- userIdsLog=`grep -Po '(<select id="user_ids")([^\}]+)(<select)' $basedir/project_page.html | grep -Po '(?<=option value=")\d+(?=">)'|tr '\n' ','`
- if [ ${#userIdsLog} = 0 ];
- then
- logger "Added user Ids : no new users"
- else
- postdata="utf8=%E2%9C%93&_method=put&authenticity_token=$authtoken&user_ids[]=$userIdsStr&project_access=$project_access&commit=Add"
- echo
- curl -s -b $basedir/cookies.txt -d $postdata $baseurl/admin/projects/$project/team_update
- logger "Added user Ids : $userIdsLog"
- fi
- fi
- done
- end=`date +%s`
- let "end-=$start"
- logger "elapsed time : $end"
- logger "batch ended"
- rm -f $basedir/cookies.txt $basedir/project_page.html # remove temp files
- exit
Add Comment
Please, Sign In to add comment