diff options
Diffstat (limited to 'application.rb')
-rw-r--r-- | application.rb | 69 |
1 files changed, 61 insertions, 8 deletions
diff --git a/application.rb b/application.rb index fe9b8b4..ecb4b7e 100644 --- a/application.rb +++ b/application.rb @@ -10,8 +10,9 @@ require File.join(File.dirname(__FILE__),'model.rb') require File.join(File.dirname(__FILE__),'helper.rb') #require File.join(File.dirname(__FILE__),'parser.rb') +use Rack::Session::Cookie, :expire_after => 28800, + :secret => "ui6vaiNi-change_me" use Rack::Flash -set :sessions, true helpers do @@ -27,10 +28,23 @@ helpers do end +before do + unless env['REQUEST_METHOD'] == "GET" or ( env['REQUEST_URI'] =~ /\/login$/ and env['REQUEST_METHOD'] == "POST" ) or !AA_SERVER + if !logged_in() + flash[:notice] = "You have to login first to do this." + redirect url_for('/login') + end + end +end + get '/?' do redirect url_for('/create') end +get '/login' do + haml :login +end + get '/models/?' do @models = ToxCreateModel.all(:order => [ :created_at.desc ]) #@models.each { |model| model.process } @@ -93,18 +107,25 @@ get %r{/compound/(.*)} do |inchi| end post '/models' do # create a new model - unless params[:file] and params[:file][:tempfile] #params[:endpoint] and flash[:notice] = "Please upload a Excel or CSV file." redirect url_for('/create') end - @model = ToxCreateModel.create(:name => params[:file][:filename].sub(/\..*$/,"")) + unless logged_in() + logout + flash[:notice] = "Please login to create a new model." + redirect url_for('/create') + end + + @model = ToxCreateModel.create(:name => params[:file][:filename].sub(/\..*$/,""), :token_id => session[:token_id]) + @model.update :web_uri => url_for("/model/#{@model.id}", :full) + @model.save task = OpenTox::Task.create("Uploading dataset and creating lazar model",url_for("/models",:full)) do @model.update :status => "Uploading and saving dataset" begin - @dataset = OpenTox::Dataset.create + @dataset = OpenTox::Dataset.create(nil, session[:token_id]) # check format by extension - not all browsers provide correct content-type]) case File.extname(params[:file][:filename]) when ".csv" @@ -119,6 +140,7 @@ post '/models' do # create a new model rescue => e error "Dataset creation failed with #{e.message}" end + @dataset.token_id = session[:token_id] if session[:token_id] @dataset.save if @dataset.compounds.size < 10 error "Too few compounds to create a prediction model. Did you provide compounds in SMILES format and classification activities as described in the #{link_to "instructions", "/excel_format"}? As a rule of thumb you will need at least 100 training compounds for nongeneric datasets. A lower number could be sufficient for congeneric datasets." @@ -136,7 +158,7 @@ post '/models' do # create a new model @model.update :status => "Creating prediction model" begin - lazar = OpenTox::Model::Lazar.create(:dataset_uri => @dataset.uri) + lazar = OpenTox::Model::Lazar.create(:dataset_uri => @dataset.uri, :token_id => session[:token_id]) rescue => e error "Model creation failed with '#{e.message}'. Please check if the input file is in a valid #{link_to "Excel", "/excel_format"} or #{link_to "CSV", "/csv_format"} format." end @@ -159,6 +181,7 @@ post '/models' do # create a new model validation = OpenTox::Validation.create_crossvalidation( :algorithm_uri => OpenTox::Algorithm::Lazar.uri, :dataset_uri => lazar.parameter("dataset_uri"), + :token_id => session[:token_id], :prediction_feature => lazar.parameter("prediction_feature"), :algorithm_params => "feature_generation_uri=#{lazar.parameter("feature_generation_uri")}" ) @@ -231,7 +254,7 @@ post '/predict/?' do # post chemical name to model title = nil db_activities = [] lazar = OpenTox::Model::Lazar.new model.uri - prediction_dataset_uri = lazar.run(:compound_uri => @compound.uri) + prediction_dataset_uri = lazar.run(:compound_uri => @compound.uri, :token_id => session[:token_id]) prediction_dataset = OpenTox::LazarPrediction.find(prediction_dataset_uri) if prediction_dataset.metadata[OT.hasSource].match(/dataset/) @predictions << { @@ -298,7 +321,7 @@ post "/lazar/?" do # get detailed prediction @page = params[:page].to_i if params[:page] @model_uri = params[:model_uri] lazar = OpenTox::Model::Lazar.new @model_uri - prediction_dataset_uri = lazar.run(:compound_uri => params[:compound_uri]) + prediction_dataset_uri = lazar.run(:compound_uri => params[:compound_uri], :token_id => params[:token_id]) @prediction = OpenTox::LazarPrediction.find(prediction_dataset_uri) @compound = OpenTox::Compound.new(params[:compound_uri]) #@title = prediction.metadata[DC.title] @@ -328,12 +351,42 @@ post "/lazar/?" do # get detailed prediction haml :lazar end +post '/login' do + if session[:token_id] != nil + flash[:notice] = "You are already logged in as user: #{session[:username]}. Please log out first." + redirect url_for('/login') + end + if params[:username] == '' || params[:password] == '' + flash[:notice] = "Please enter username and password." + redirect url_for('/login') + end + if login(params[:username], params[:password]) + flash[:notice] = "Login successful." + else + flash[:notice] = "Login failed." + end + haml :login +end + +post '/logout' do + logout + redirect url_for('/login') +end + delete '/model/:id/?' do model = ToxCreateModel.get(params[:id]) begin - RestClient.delete model.uri if model.uri + RestClient.delete(model.uri, :token_id => session[:token_id]) if model.uri RestClient.delete model.task_uri if model.task_uri model.destroy + unless ToxCreateModel.get(params[:id]) + begin + aa = OpenTox::Authorization.delete_policies_from_uri(model.web_uri, session[:token_id]) + LOGGER.debug "Policy deleted for Dataset URI: #{uri} with result: #{aa}" + rescue + LOGGER.warn "Policy delete error for Dataset URI: #{uri}" + end + end flash[:notice] = "#{model.name} model deleted." rescue flash[:notice] = "#{model.name} model delete error." |