Return-Path: Delivered-To: apmail-incubator-deltacloud-dev-archive@minotaur.apache.org Received: (qmail 58212 invoked from network); 3 Nov 2010 13:46:31 -0000 Received: from unknown (HELO mail.apache.org) (140.211.11.3) by 140.211.11.9 with SMTP; 3 Nov 2010 13:46:31 -0000 Received: (qmail 24028 invoked by uid 500); 3 Nov 2010 13:47:02 -0000 Delivered-To: apmail-incubator-deltacloud-dev-archive@incubator.apache.org Received: (qmail 23873 invoked by uid 500); 3 Nov 2010 13:47:02 -0000 Mailing-List: contact deltacloud-dev-help@incubator.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: deltacloud-dev@incubator.apache.org Delivered-To: mailing list deltacloud-dev@incubator.apache.org Received: (qmail 23763 invoked by uid 99); 3 Nov 2010 13:46:59 -0000 Received: from nike.apache.org (HELO nike.apache.org) (192.87.106.230) by apache.org (qpsmtpd/0.29) with ESMTP; Wed, 03 Nov 2010 13:46:59 +0000 X-ASF-Spam-Status: No, hits=-5.0 required=10.0 tests=RCVD_IN_DNSWL_HI,SPF_HELO_PASS,SPF_PASS X-Spam-Check-By: apache.org Received-SPF: pass (nike.apache.org: domain of mfojtik@redhat.com designates 209.132.183.28 as permitted sender) Received: from [209.132.183.28] (HELO mx1.redhat.com) (209.132.183.28) by apache.org (qpsmtpd/0.29) with ESMTP; Wed, 03 Nov 2010 13:46:51 +0000 Received: from int-mx09.intmail.prod.int.phx2.redhat.com (int-mx09.intmail.prod.int.phx2.redhat.com [10.5.11.22]) by mx1.redhat.com (8.13.8/8.13.8) with ESMTP id oA3DkU3U010391 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK) for ; Wed, 3 Nov 2010 09:46:30 -0400 Received: from patashnik.brq.redhat.com (dhcp-2-138.brq.redhat.com [10.34.2.138]) by int-mx09.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id oA3DkRlD032197 for ; Wed, 3 Nov 2010 09:46:29 -0400 From: mfojtik@redhat.com To: deltacloud-dev@incubator.apache.org Subject: [PATCH core 1/3] Added 405 HTTP code when calling invalid instance action Date: Wed, 3 Nov 2010 14:46:24 +0100 Message-Id: <1288791986-23889-2-git-send-email-mfojtik@redhat.com> In-Reply-To: <1288791986-23889-1-git-send-email-mfojtik@redhat.com> References: <1288791986-23889-1-git-send-email-mfojtik@redhat.com> X-Scanned-By: MIMEDefang 2.68 on 10.5.11.22 X-Virus-Checked: Checked by ClamAV on apache.org From: Michal Fojtik --- .../lib/deltacloud/helpers/application_helper.rb | 8 ++++++++ server/lib/deltacloud/models/instance.rb | 20 +++++++++++++++----- 2 files changed, 23 insertions(+), 5 deletions(-) diff --git a/server/lib/deltacloud/helpers/application_helper.rb b/server/lib/deltacloud/helpers/application_helper.rb index c7fa481..189148c 100644 --- a/server/lib/deltacloud/helpers/application_helper.rb +++ b/server/lib/deltacloud/helpers/application_helper.rb @@ -102,6 +102,14 @@ module ApplicationHelper end def instance_action(name) + original_instance = driver.instance(credentials, :id => params[:id]) + + # If original instance doesn't include called action + # return with 405 error (Method is not Allowed) + unless driver.instance_actions_for(original_instance.state).include?(name.to_sym) + return report_error(405, 'not_allowed') + end + @instance = driver.send(:"#{name}_instance", credentials, params["id"]) return redirect(instances_url) if name.eql?(:destroy) or @instance.class!=Instance diff --git a/server/lib/deltacloud/models/instance.rb b/server/lib/deltacloud/models/instance.rb index 9cf69b8..0167331 100644 --- a/server/lib/deltacloud/models/instance.rb +++ b/server/lib/deltacloud/models/instance.rb @@ -29,10 +29,20 @@ class Instance < BaseModel attr_accessor :private_addresses attr_accessor :instance_profile attr_accessor :launch_time - def initialize(init=nil) - super(init) - self.actions = [] if self.actions.nil? - self.public_addresses = [] if self.public_addresses.nil? - self.private_addresses = [] if self.private_addresses.nil? + + def initialize(init=nil) + super(init) + self.actions = [] if self.actions.nil? + self.public_addresses = [] if self.public_addresses.nil? + self.private_addresses = [] if self.private_addresses.nil? end + + def method_missing(name, *args) + if name =~ /is_(\w+)\?/ + return true if self.state.downcase.eql?($1) + else + raise NoMethodError + end + end + end -- 1.7.2.3