From c8f9387420233bd7e845cb205c3b68ede1f90024 Mon Sep 17 00:00:00 2001 From: Steve Coast Date: Fri, 18 Aug 2006 17:54:41 +0000 Subject: [PATCH] various fixes --- app/controllers/application.rb | 12 +-- app/controllers/node_controller.rb | 149 ++++++++++++++++++++++++++--- app/controllers/user_controller.rb | 1 - app/models/user.rb | 4 +- config/routes.rb | 14 +-- db/migrate.sql | 7 ++ 6 files changed, 158 insertions(+), 29 deletions(-) create mode 100644 db/migrate.sql diff --git a/app/controllers/application.rb b/app/controllers/application.rb index 6cd6dac06..82ef80920 100644 --- a/app/controllers/application.rb +++ b/app/controllers/application.rb @@ -10,20 +10,20 @@ class ApplicationController < ActionController::Base username, passwd = get_auth_data # check if authorized # try to get user - if user = User.authenticate(username, passwd) + if @user = User.authenticate(username, passwd) # user exists and password is correct ... horray! - if user.methods.include? 'lastlogin' + if @user.methods.include? 'lastlogin' # note last login @session['lastlogin'] = user.lastlogin - user.last.login = Time.now - user.save() - @session["User.id"] = user.id + @user.last.login = Time.now + @user.save() + @session["User.id"] = @user.id end else # the user does not exist or the password was wrong @response.headers["Status"] = "Unauthorized" @response.headers["WWW-Authenticate"] = "Basic realm=\"#{realm}\"" - render_text(errormessage, 401) + render_text(errormessage, 401) end end diff --git a/app/controllers/node_controller.rb b/app/controllers/node_controller.rb index a783ea9e6..c27081650 100644 --- a/app/controllers/node_controller.rb +++ b/app/controllers/node_controller.rb @@ -4,16 +4,141 @@ class NodeController < ApplicationController before_filter :authorize def create -# @node = Node.new -# @node.id = 1 -# @node.latitude = 1 -# @node.save + if request.put? + doc = XML::Document.new(request.raw_post) #THIS IS BROKEN, libxml docus dont talk about creating a doc from a string + doc.find('//osm/node').each do |pt| + render :text => 'arghsd.rkugt;dsrt' + return + lat = pt.attributes['lat'].to_f + lon = pt.attributes['lon'].to_f + node_id = pt.attributes['id'].to_i - if request.putt? - @txt = resp.body + if lat > 90 or lat < -90 or lon > 180 or lon < -180 or node_id != 0 + render :nothing => true, :status => 400 # BAD REQUEST + return + end + + tags = [] + + pt.elements.each('tag') do |tag| + tags << [tag.attributes['k'],tag.attributes['v']] + end + tags = tags.collect { |k,v| "#{k}=#{v}" }.join(';') + tags = '' if tags.nil? + + now = Time.now + + node = Node.new + node.latitude = lat + node.longitude = lon + node.visible = 1 + node.tags = tags + node.timestamp = now + node.user_id = @user.id + + #FIXME add a node to the old nodes table too + + if node.save + render :text => node.id + else + render :nothing => true, :status => 500 + end + end end + + render :text => 'WRONG! ' + return + end + def rest + unless Node.exists?(params[:id]) + render :nothing => true, :status => 400 + return + end + + node = Node.find(params[:id]) + + + case request.method + when :get + doc = XML::Document.new + + # this needs a new libxml: + # doc.encoding = "UTF-8" + + root = XML::Node.new 'osm' + root['version'] = '0.4' + root['generator'] = 'OpenStreetMap server' + doc.root = root + el1 = XML::Node.new 'node' + el1['id'] = node.id.to_s + el1['lat'] = node.latitude.to_s + el1['lon'] = node.longitude.to_s + split_tags(el1, node.tags) + el1['visible'] = node.visible.to_s + el1['timestamp'] = node.timestamp.xmlschema + root << el1 + + render :text => doc.to_s + + # + # DELETE + # + when :delete + + if node.visible + node.visible = 0 + node.save + else + render :nothing => true, :status => 410 + end + + # + # PUT + # + when :put + + doc = XML::Document.new(request.raw_post) + doc.elements.each('osm/node') do |pt| + lat = pt.attributes['lat'].to_f + lon = pt.attributes['lon'].to_f + node_id = pt.attributes['id'].to_i + + if lat > 90 or lat < -90 or lon > 180 or lon < -180 or node_id != params[:id] + render :nothing => true, :status => 400 # BAD REQUEST + return + end + + tags = [] + + pt.elements.each('tag') do |tag| + tags << [tag.attributes['k'],tag.attributes['v']] + end + tags = tags.collect { |k,v| "#{k}=#{v}" }.join(';') + tags = '' if tags.nil? + + now = Time.now + + node.latitude = lat + node.longitude = lon + node.visible = 1 + node.tags = tags + node.timestamp = now + node.user_id = @user.id + + #FIXME add a node to the old nodes table too + + if node.save + render :text => node.id + else + render :nothing => true, :status => 500 + end + end + end + end + + def dummy if request.post? userid = dao.useridfromcreds(r.user, r.get_basic_auth_pw) @@ -66,7 +191,7 @@ class NodeController < ApplicationController end - def rest + def dummydummy # # POST ??? @@ -127,13 +252,13 @@ class NodeController < ApplicationController if request.get? node = node.find(params[:id]) - doc = Document.new - doc.encoding = "UTF-8" - root = Node.new 'osm' + doc = document.new + doc.encoding = "utf-8" + root = node.new 'osm' root['version'] = '0.4' - root['generator'] = 'OpenStreetMap server' + root['generator'] = 'openstreetmap server' doc.root = root - el1 = Node.new 'node' + el1 = node.new 'node' el1['id'] = node.id.to_s el1['lat'] = node.latitude.to_s el1['lon'] = node.longitude.to_s diff --git a/app/controllers/user_controller.rb b/app/controllers/user_controller.rb index b982a93c9..3012765d2 100644 --- a/app/controllers/user_controller.rb +++ b/app/controllers/user_controller.rb @@ -11,7 +11,6 @@ class UserController < ApplicationController else render :action => 'new' end - end def new diff --git a/app/models/user.rb b/app/models/user.rb index 1a1279042..589546e2d 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -25,9 +25,7 @@ class User < ActiveRecord::Base end def self.authenticate(email, passwd) - find_first([ "email = ? AND pass_crypt =?", - email, - Digest::MD5.hexdigest(passwd) ]) + find_first([ "email = ? AND pass_crypt =?", email, Digest::MD5.hexdigest(passwd) ]) end private diff --git a/config/routes.rb b/config/routes.rb index 828e0f40d..4b87400b4 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -1,15 +1,15 @@ ActionController::Routing::Routes.draw do |map| - map.connect ':controller/service.wsdl', :action => 'wsdl' +# map.connect ':controller/service.wsdl', :action => 'wsdl' + map.connect 'api/0.4/node/create', :controller => 'node', :action => 'create' + map.connect 'api/0.4/node/:id', :controller => 'node', :action => 'rest', :id => nil - map.connect '/api/0.4/node/:id', :controller => 'node', :action => 'rest' - map.connect '/api/0.4/node/create', :controller => 'node', :action => 'create' - map.connect '/api/0.4/segment/:id', :controller => 'segment', :action => 'rest' - map.connect '/api/0.4/segment/create', :controller => 'segment', :action => 'create' +# map.connect 'api/0.4/segment/:id', :controller => 'segment', :action => 'rest' +# map.connect 'api/0.4/segment/create', :controller => 'segment', :action => 'create' - map.connect '/api/0.4/way/:id', :controller => 'way', :action => 'rest' - map.connect '/api/0.4/way/create', :controller => 'way', :action => 'create' +# map.connect 'api/0.4/way/:id', :controller => 'way', :action => 'rest' +# map.connect 'api/0.4/way/create', :controller => 'way', :action => 'create' map.connect ':controller/:action/:id' end diff --git a/db/migrate.sql b/db/migrate.sql new file mode 100644 index 000000000..83840d5cf --- /dev/null +++ b/db/migrate.sql @@ -0,0 +1,7 @@ +drop table meta_nodes; +alter table current_nodes modify tags text not null; +alter table current_nodes modify id bigint(64) not null auto_increment; + + +alter table nodes modify tags text not null; + -- 2.43.2