Tutorials
SVN Form Server HowTo
The following cgi script let’s a user create a personal SVN repository by leaving their email address. The corresponding svn checkout line is emailed automatically to that address.
#!/bin/bash echo "Content-type: text/html" echo "" echo '<html>' echo '<head>' echo '<title>SVN Registration Form</title>' echo '</head>' echo '<body>' echo "Dear user, <br>" echo "<br>" echo "to register with SVN please submit your email address:" echo "<br><br>" # create a html get action for a form echo "<form method=GET action=\"${SCRIPT}\">"\ '<table>'\ ' <tr><td>Email Address: </TD><TD><input type="text" name="VAL" size=30></td></tr>'\ '</table>'\ '<br><input type="submit" value="Submit Form"></form>' # make sure we have been invoked properly if [ "$REQUEST_METHOD" != "GET" ]; then echo "<hr>script error: cannot complete request<hr>" exit 1 fi # if no search arguments, exit gracefully if [ -z "$QUERY_STRING" ]; then exit 0 else # extract the submitted data we are looking for with sed VAL=`echo "$QUERY_STRING" | sed -n 's/^.*VAL=\([^&]*\).*$/\1/p' | sed "s/%20/ /g"` VAL="${VAL/\%40/@}" # undo replacement of @ with %40 VAL=`echo "$VAL" | sed "s/[^a-zA-Z0-9.@_\-]//g"` # remove all meta characters for safety if [ "${VAL/@gmail.com/}" == "$VAL" ]; then echo "We are sorry! <br>"\ "<br>"\ "The input \"<b>$VAL</b>\" is not a valid email address!" else # create a new user account echo `date`: >> ~subversion/svnform_log # write log file ~subversion/svnaddrepo.sh "$VAL" "$VAL" >> ~subversion/svnform_log # call script in subversion's home echo "" >> ~subversion/svnform_log # write log file echo "Thank you! <br>"\ "<br>"\ "Please <b>check your email</b> for instructions how to access your newly created SVN repository!" fi fi echo '</body>' echo '</html>' exit 0
The above script makes the following assumptions:
- that all users have a valid email address @ gmail.com - other addresses will be rejected for safety reasons.
- that the script is only accessible in a sub-net to limit the number of potential users to the ones with access to the sub-net.
- that it is run by the user “subversion” as described by the suEXEC tutorial.
- that it is installed with proper permissions (700) and ownership (subversion:_www).
- that the script “svnaddrepo.sh” resides in the home of the user “subversion”, so that it can be started via suEXEC to actually create the repository and email the notification.
- that Postfix is setup for GMail as described here.