Mailinglist Archive: yast-devel (233 mails)

< Previous Next >
[yast-devel] Re: [yast-commit] <rest-service> master : registration: cleanup views, render registration result in xml (currently static output)
  • From: Josef Reidinger <jreidinger@xxxxxxx>
  • Date: Fri, 16 Oct 2009 09:08:22 +0200
  • Message-id: <200910160908.23140.jreidinger@xxxxxxx>
J.Daniel Schmidt write:
ref: refs/heads/master
commit 74c95aa98b5b072c3c6fd66c52039a7fc9497e0d
Author: J. Daniel Schmidt <jdsn@xxxxxxx>
Date: Thu Oct 15 22:28:41 2009 +0200

registration: cleanup views, render registration result in xml
(currently static output) add context data and user arguments to
registration process
---
.../app/controllers/configuration_controller.rb | 56 +++++++-------
.../app/controllers/registration_controller.rb | 42 +++++++++-
plugins/registration/app/models/registration.rb | 83
++++++++++++++++---- .../app/views/registration/create.html.erb |
12 +---
.../app/views/registration/create.json.erb | 1 +
.../app/views/registration/create.xml.erb | 12 +---
6 files changed, 136 insertions(+), 70 deletions(-)

diff --git
a/plugins/registration/app/controllers/configuration_controller.rb
b/plugins/registration/app/controllers/configuration_controller.rb index
c692581..5f4f50d 100644
--- a/plugins/registration/app/controllers/configuration_controller.rb
+++ b/plugins/registration/app/controllers/configuration_controller.rb
@@ -6,36 +6,34 @@ class ConfigurationController < ApplicationController
before_filter :login_required

def update
-# FIXME remove static certificate file after testing!!
-newca="-----BEGIN CERTIFICATE-----
-MIID5TCCAs2gAwIBAgIEOeSXnjANBgkqhkiG9w0BAQUFADCBgjELMAkGA1UEBhMC
-VVMxFDASBgNVBAoTC1dlbGxzIEZhcmdvMSwwKgYDVQQLEyNXZWxscyBGYXJnbyBD
-ZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEvMC0GA1UEAxMmV2VsbHMgRmFyZ28gUm9v
-dCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwHhcNMDAxMDExMTY0MTI4WhcNMjEwMTE0
-MTY0MTI4WjCBgjELMAkGA1UEBhMCVVMxFDASBgNVBAoTC1dlbGxzIEZhcmdvMSww
-KgYDVQQLEyNXZWxscyBGYXJnbyBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEvMC0G
-A1UEAxMmV2VsbHMgRmFyZ28gUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwggEi
-MA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDVqDM7Jvk0/82bfuUER84A4n13
-5zHCLielTWi5MbqNQ1mXx3Oqfz1cQJ4F5aHiidlMuD+b+Qy0yGIZLEWukR5zcUHE
-SxP9cMIlrCL1dQu3U+SlK93OvRw6esP3E48mVJwWa2uv+9iWsWCaSOAlIiR5NM4O
-JgALTqv9i86C1y8IcGjBqAr5dE8Hq6T54oN+J3N0Prj5OEL8pahbSCOz6+MlsoCu
-ltQKnMJ4msZoGK43YjdeUXWoWGPAUe5AeH6orxqg4bB4nVCMe+ez/I4jsNtlAHCE
-AQgAFG5Uhpq6zPk3EPbg3oQtnaSFN9OH4xXQwReQfhkhahKpdv0SAulPIV4XAgMB
-AAGjYTBfMA8GA1UdEwEB/wQFMAMBAf8wTAYDVR0gBEUwQzBBBgtghkgBhvt7hwcB
-CzAyMDAGCCsGAQUFBwIBFiRodHRwOi8vd3d3LndlbGxzZmFyZ28uY29tL2NlcnRw
-b2xpY3kwDQYJKoZIhvcNAQEFBQADggEBANIn3ZwKdyu7IvICtUpKkfnRLb7kuxpo
-7w6kAOnu5+/u9vnldKTC2FJYxHT7zmu1Oyl5GFrvm+0fazbuSCUlFLZWohDo7qd/
-0D+j0MNdJu4HzMPBJCGHHt8qElNvQRbn7a6U+oxy+hNH8Dx+rn0ROhPs7fpvcmR7
-nX1/Jv16+yWt6j4pf0zjAFcysLPp7VMX2YuyFA4w6OXVE8Zkr8QA1dhYJPz1j+zx
-x32l2w8n0cbyQIjmH/ZhqPRCyLk306m+LFZ4wnKbWV01QIroTmMatukgalHizqSQ
-33ZwmVxwQ023tqcZZE6St8WRPH9IFmV7Fv3L/PvZ1dZPIWU7Sn9Ho/s=
------END CERTIFICATE-----
-"
-
- # PUT
- puts params.inspect
+ #request.env.each do |k,v | puts "==#{k}== => ==#{v.inspect}==" end
+
+ if request.env["rack.input"].size>0
+ req = Hash.from_xml request.env["rack.input"].read
+ else
+ req = Hash.new
+ end
+
+ newurl = ''
+ newca = ''
+
+ # read registration server url
+ if req['registrationconfig'] &&
+ req['registrationconfig']['server'] &&
+ req['registrationconfig']['server']['url']
+ newurl = req['registrationconfig']['server']['url'].strip
+ end
+
+ # read ca certificate file
+ if req['registrationconfig'] &&
+ req['registrationconfig']['certificate'] &&
+ req['registrationconfig']['certificate']['data']
+ newca = req['registrationconfig']['certificate']['data'].strip +
"\n" +
+ end
+
@registration = Registration.new( { } )
- @registration.set_config 'https://static.test.server/test/path', newca
+ @registration.set_config newurl, newca
render :show
end

diff --git
a/plugins/registration/app/controllers/registration_controller.rb
b/plugins/registration/app/controllers/registration_controller.rb index
7ce1c05..78ea36a 100644
--- a/plugins/registration/app/controllers/registration_controller.rb
+++ b/plugins/registration/app/controllers/registration_controller.rb
@@ -9,14 +9,50 @@ class RegistrationController < ApplicationController
# POST to registration => run registration
@registration = Registration.new({})

- # TODO overwrite context data if defined
- #@registration.set_context( { } )
+ begin
+ if request.env["rack.input"].size>0
+ req = Hash.from_xml request.env["rack.input"].read
+ else
+ req = Hash.new
+ end
+ rescue
+ req = Hash.new
+ end
+
+
+
+ valid_context_keys = %w[forcereg nooptional nohwdata yastcall
norefresh logfile]
Hi,
This looks for me like constant. Constants in ruby is written whole upper
case, so you could use
VALID_CONTEXT_KEYS = %w[forcereg nooptional nohwdata yastcall norefresh
logfile]
and then ruby warn you during runtime if someone try to write to it ( just
shallow explanation, constant in ruby is little more complicated)
+ context = Hash.new
+
+ #puts req.inspect
+
+ if req['registration'] &&
+ req['registration']['options'] &&
+ req['registration']['options'].is_a?(Hash)
+ req['registration']['options'].each do |k, v|
+ case k
+ when 'debug'
+ context['debugMode'] = v
+ when 'restorerepos'
+ context['restoreRepos'] = v
+ else
+ context[k] = v if valid_context_keys.include? k

Maybe can be useful if key k is not valid to log it (as if customer send log
to see what happen)

+ end
+ end
+ end
+
+ puts context.inspect
+
+ # overwrite context data
+ @registration.set_context( context )

^^^^
This is not rubish. Your model is really not ruby. You set arguments like it
is perl or C++. Setters and getters is generated by attr_accessor - then you
use just @registration.context = context

If you want, I can change your module for learning purpose to use ruby way.


# TODO: parse post data and set the arguments
# @registration.set_arguments( { } )

ret = @registration.register
- headers["Status"] = "400 Bad Request" if ret == 3
+ #if (ret != 0)
+ # headers["Status"] = "400 Bad Request"
+ #end
end

def show
diff --git a/plugins/registration/app/models/registration.rb
b/plugins/registration/app/models/registration.rb index a0d41fe..0516163
100644
--- a/plugins/registration/app/models/registration.rb
+++ b/plugins/registration/app/models/registration.rb
@@ -14,7 +14,12 @@ class Registration

def initialize(hash)
# cleanup arguments
- @arguments = { 'test' => [ 'a{ss}', { 'value' => 'mytestvalue' } ] }
+ @arguments = { }
+ # initialize context
+ init_context hash
+ end
+
+ def init_context(hash)
If your context is more complex data structure, then you can use class instead
of hash. (especially if it contain some logic relation between its values
# set context defaults
@context = { 'yastcall' => [ 'i', 1 ],
'norefresh' => [ 'i', 1 ],
@@ -30,11 +35,10 @@ class Registration

# merge custom context data
raise "Invalid or missing registration initialization context data."
unless hash.is_a?(Hash) -
+
hash.each do |k, v|
- @context.merge!( { k => ['s', v.to_s] } )
+ @context.merge!( { k.to_s => ['s', v.to_s] } )

^^^
I don't know who start in Germany with this merge of single hash. It is not
merge purpose. Merge is to merge two hashes. If I want just correct this you
can use
@context[k.to_s] = ['s',v.to_s]

Better is to create separate class for context which could handle incoming
hash in simple method and hide internals).

end
-
end

def find
@@ -48,11 +52,11 @@ class Registration
end

def set_context(hash)
- self.initialize hash
+ self.init_context hash
end

def add_argument(key, value)
- @arguments.merge!( { key => [ 'a{ss}',{ 'value' => "#{value.to_s}" } ]
} ) + @arguments.merge!( { key.to_s => [ 'a{ss}',{ 'value' =>
value.to_s } ] } ) end

same as above


def add_arguments(hash)
@@ -113,23 +117,70 @@ class Registration


def to_xml( options = {} )
- # TODO FIXME ... create the registration xml structure
+ # TODO FIXME ... create the output based on parsed data
+ # return static response during development
+
xml = options[:builder] ||= Builder::XmlMarkup.new(options)
xml.instruct! unless options[:skip_instruct]

xml.registration do
- xml.tag!(:info, "infotest")
- xml.tag!(:foobar, "foobartest" )
- xml.arguments({:type => "array"}) do
- { "eins" => 1, "zwei" => 2, "drei" => 3 }.each do |k,v|
+ if @reg then
+ xml.tag!(:status, 'missinginfo')

^^^ xml creator support name methods, use tag! only if name of xml element
conflict with some method
so you can use
xml.status 'missinginfo'

+ xml.tag!(:exitcode, 55)
+ xml.tag!(:guid, "abcdefg1234567")
+
+
+ xml.missingarguments do
xml.argument do
- xml.tag!( :name, k)
- xml.tag!( :value, v)
+ xml.tag!(:name, 'regcode-SLES-13-SP5')
+ xml.tag!(:type, 'string')
+ end
+ xml.argument do
+ xml.tag!(:name, 'email')
+ xml.tag!(:type, 'string')
+ end
+ xml.argument do
+ xml.tag!(:name, 'moniker')
+ xml.tag!(:type, 'string')

Don't forget to properly document how it work, because it looks like some
registration magic, which should be enlightened.

end
end
- end
- end
- end
+
+ xml.changedrepos do
+ xml.repo do
+ xml.tag!(:name, 'foobar11n')
+ xml.tag!(:alias, 'foobar11a')
+ xml.tag!(:status, 'added')
+ end
+ xml.repo do
+ xml.tag!(:name, 'foobar22n')
+ xml.tag!(:alias, 'foobar22a')
+ xml.tag!(:status, 'deleted')
+ end
+ end
+
+ xml.changedservices do
+ xml.service do
+ xml.tag!(:name, 'foobar33n')
+ xml.tag!(:alias, 'foobar33a')
+ xml.tag!(:status, 'deleted')
+ xml.catalogs do
+ xml.catalog do
+ xml.tag!(:name, 'foobar44n')
+ xml.tag!(:alias, 'foobar44a')
+ xml.tag!(:status, 'enabled')
+ end
+ xml.catalog do
+ xml.tag!(:name, 'foobar55n')
+ xml.tag!(:alias, 'foobar55a')
+ xml.tag!(:status, 'disabled')
+ end # cat
+ end # cats
+ end # service
+ end # changedservices
+
+ end # if reg
+ end # xml-root
+ end # func

def status_to_json( options = {} )
hash = Hash.from_xml(status_to_xml())
diff --git a/plugins/registration/app/views/registration/create.html.erb
b/plugins/registration/app/views/registration/create.html.erb index
6ed6334..b02fb3c 100644
--- a/plugins/registration/app/views/registration/create.html.erb
+++ b/plugins/registration/app/views/registration/create.html.erb
@@ -1,11 +1 @@
-<%= # @registration == nil ? "@registration is nil - FIXME" :
@registration.to_xml - -%>
-<%= case @registration.class.to_s
- when 'NilClass'
- "@registration is nil"
- when 'String'
- @registration.to_s
- when 'Registration'
- @registration.to_xml
- end
- -%>
+<%= @registration.to_xml if @registration -%>
\ No newline at end of file
diff --git a/plugins/registration/app/views/registration/create.json.erb
b/plugins/registration/app/views/registration/create.json.erb new file
mode 100644
index 0000000..09982a7
--- /dev/null
+++ b/plugins/registration/app/views/registration/create.json.erb
@@ -0,0 +1 @@
+<%= @registration.to_json if @registration -%>
\ No newline at end of file
diff --git a/plugins/registration/app/views/registration/create.xml.erb
b/plugins/registration/app/views/registration/create.xml.erb index
6ed6334..b02fb3c 100644
--- a/plugins/registration/app/views/registration/create.xml.erb
+++ b/plugins/registration/app/views/registration/create.xml.erb
@@ -1,11 +1 @@
-<%= # @registration == nil ? "@registration is nil - FIXME" :
@registration.to_xml - -%>
-<%= case @registration.class.to_s
- when 'NilClass'
- "@registration is nil"
- when 'String'
- @registration.to_s
- when 'Registration'
- @registration.to_xml
- end
- -%>
+<%= @registration.to_xml if @registration -%>
\ No newline at end of file


It's just my 2c. If you have any question feel free to ask.

--
Josef Reidinger
YaST team
maintainer of perl-Bootloader, YaST2-Repair, webyast modules language and time
--
To unsubscribe, e-mail: yast-devel+unsubscribe@xxxxxxxxxxxx
For additional commands, e-mail: yast-devel+help@xxxxxxxxxxxx

< Previous Next >
This Thread
  • No further messages