Skip to content

Commit

Permalink
Update api version requirement support
Browse files Browse the repository at this point in the history
  • Loading branch information
gschueler committed Feb 15, 2011
1 parent 14643fd commit d4e6495
Show file tree
Hide file tree
Showing 4 changed files with 34 additions and 8 deletions.
2 changes: 1 addition & 1 deletion rundeckapp/grails-app/conf/ApiRequestFilters.groovy
Expand Up @@ -59,7 +59,7 @@ public class ApiRequestFilters {
}
if(unsupported){
flash.errorCode='api.error.api-version.unsupported'
flash.errorArgs=[params.api_version,API_CURRENT_VERSION]
flash.errorArgs=[params.api_version,request.forwardURI,"Current version: "+API_CURRENT_VERSION]
redirect(controller:'api',action:'renderError')
return false
}
Expand Down
19 changes: 19 additions & 0 deletions rundeckapp/grails-app/controllers/ApiController.groovy
Expand Up @@ -26,6 +26,25 @@ class ApiController {
}
}

/**
* Utility to require specific min or max api version for an action.
*/
public def requireVersion={min,max=0->
if(request.api_version < min){
request.error=g.message(code:'api.error.api-version.unsupported',
args:[request.api_version,request.forwardURI,"Minimum supported version: "+min])
error()
return false
}
if(max>0 && request.api_version > max){
request.error=g.message(code:'api.error.api-version.unsupported',
args:[request.api_version,request.forwardURI,"Maximum supported version: "+max])
error()
return false
}
return true
}

def error={
return render(contentType:"text/xml",encoding:"UTF-8"){
result(error:"true", apiversion:ApiRequestFilters.API_CURRENT_VERSION){
Expand Down
4 changes: 2 additions & 2 deletions rundeckapp/grails-app/i18n/messages.properties
Expand Up @@ -246,8 +246,8 @@ execution.show.mode.Annotated.desc=View all output in grouped contexts sequentia
execution.show.mode.Compact.desc=View all output collated by node

# API Messages
api.error.api-version.required=RunDeck API Version not specified
api.error.api-version.unsupported=RunDeck API Version is not supported: {0}, current version: {1}
api.error.api-version.required=API Version not specified
api.error.api-version.unsupported=Unsupported API Version "{0}". API Request: {1}. Reason: {2}
api.error.user-unauthorized={0} is not authorized for: {1}
api.error.unknown=An unknown error occurred
api.error.invalid.request=Invalid API Request: {0}
Expand Down
17 changes: 12 additions & 5 deletions test/api/test-require-version.sh
Expand Up @@ -4,44 +4,51 @@

DIR=$(cd `dirname $0` && pwd)
source $DIR/include.sh
getpath(){
echo "$1" | sed 's#^https\{0,1\}://.*:[0-9]*/\(.*\)$#/\1#'
}

# now submit req
WRONG_VERS="FAKE"
runurl="${RDURL}/api/${WRONG_VERS}/projects"
path=$(getpath "$runurl")

echo "TEST: Invalid API Version..."
echo "TEST: Invalid API Version, $path..."

# get listing
sh $DIR/api-expect-error.sh ${runurl} "${params}" "RunDeck API Version is not supported: ${WRONG_VERS}, current version: 1" || exit 2
sh $DIR/api-expect-error.sh ${runurl} "${params}" "Unsupported API Version \"${WRONG_VERS}\". API Request: ${path}. Reason: Current version: 1" || exit 2
echo "OK"


WRONG_VERS=$(( $API_VERSION + 1 ))
runurl="${RDURL}/api/${WRONG_VERS}/projects"
path=$(getpath "$runurl")

echo "TEST: Wrong API Version: ${WRONG_VERS}..."

# get listing
sh $DIR/api-expect-error.sh ${runurl} "${params}" "RunDeck API Version is not supported: ${WRONG_VERS}, current version: 1" || exit 2
sh $DIR/api-expect-error.sh ${runurl} "${params}" "Unsupported API Version \"${WRONG_VERS}\". API Request: ${path}. Reason: Current version: 1" || exit 2
echo "OK"


WRONG_VERS="0"
runurl="${RDURL}/api/${WRONG_VERS}/projects"
path=$(getpath "$runurl")

echo "TEST: Wrong API Version: ${WRONG_VERS}..."

# get listing
sh $DIR/api-expect-error.sh ${runurl} "${params}" "RunDeck API Version is not supported: ${WRONG_VERS}, current version: 1" || exit 2
sh $DIR/api-expect-error.sh ${runurl} "${params}" "Unsupported API Version \"${WRONG_VERS}\". API Request: ${path}. Reason: Current version: 1" || exit 2
echo "OK"

WRONG_VERS="000001"
runurl="${RDURL}/api/${WRONG_VERS}/projects"
path=$(getpath "$runurl")

echo "TEST: Wrong API Version: ${WRONG_VERS}..."

# get listing
sh $DIR/api-expect-error.sh ${runurl} "${params}" "RunDeck API Version is not supported: ${WRONG_VERS}, current version: 1" || exit 2
sh $DIR/api-expect-error.sh ${runurl} "${params}" "Unsupported API Version \"${WRONG_VERS}\". API Request: ${path}. Reason: Current version: 1" || exit 2
echo "OK"

rm $DIR/curl.out

0 comments on commit d4e6495

Please sign in to comment.