appoxy_rails 0.0.18 → 0.0.19
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/lib/appoxy_rails.rb +1 -0
- data/lib/railtie.rb +9 -2
- data/lib/sessions/application_controller.rb +15 -10
- data/lib/sessions/sessions_controller.rb +251 -27
- data/lib/sessions/user.rb +10 -4
- data/lib/ui/application_helper.rb +0 -1
- data/lib/utils.rb +11 -0
- metadata +70 -96
    
        data/lib/appoxy_rails.rb
    CHANGED
    
    
    
        data/lib/railtie.rb
    CHANGED
    
    | @@ -1,14 +1,21 @@ | |
| 1 1 | 
             
            # see http://api.rubyonrails.org/classes/Rails/Railtie.html
         | 
| 2 2 |  | 
| 3 | 
            +
            # Nice write-up of hooking gems into the views/layouts/statics of Rails 3 apps: 
         | 
| 4 | 
            +
            # http://numbers.brighterplanet.com/2010/07/26/sharing-views-across-rails-3-apps/
         | 
| 5 | 
            +
             | 
| 3 6 | 
             
            require 'rails'
         | 
| 4 7 |  | 
| 5 | 
            -
            module  | 
| 6 | 
            -
              class Railtie < Rails::Railtie
         | 
| 8 | 
            +
            module AppoxyRails
         | 
| 9 | 
            +
              class Railtie < ::Rails::Railtie
         | 
| 7 10 |  | 
| 8 11 | 
             
                initializer "appoxy_rails.configure_rails_initialization" do |app|
         | 
| 9 12 | 
             
                  puts 'Initializing appoxy_rails Railtie'
         | 
| 10 13 |  | 
| 11 14 | 
             
            #      routes = app.routes
         | 
| 15 | 
            +
            #      app.paths.app.views.push Appoxy::Rails::Layout.view_path
         | 
| 16 | 
            +
             | 
| 17 | 
            +
            #        config.app_middleware.use '::ActionDispatch::Static', Appoxy::UI.public_path
         | 
| 18 | 
            +
            #        config.app.append_asset_paths
         | 
| 12 19 |  | 
| 13 20 | 
             
                end
         | 
| 14 21 | 
             
              end
         | 
| @@ -5,7 +5,6 @@ module Appoxy | |
| 5 5 |  | 
| 6 6 | 
             
                  def self.included(base)
         | 
| 7 7 | 
             
                    # Initialize module.
         | 
| 8 | 
            -
                    puts 'ApplicationController included.'
         | 
| 9 8 | 
             
                    base.helper_method :logged_in?
         | 
| 10 9 | 
             
                    base.helper_method :current_user
         | 
| 11 10 | 
             
                    base.helper_method :base_url
         | 
| @@ -53,14 +52,22 @@ module Appoxy | |
| 53 52 |  | 
| 54 53 |  | 
| 55 54 | 
             
                  def current_user
         | 
| 56 | 
            -
                    @current_user ||=  | 
| 55 | 
            +
                    @current_user ||= login_from_session
         | 
| 57 56 | 
             
                    @current_user
         | 
| 58 57 | 
             
                  end
         | 
| 59 58 |  | 
| 60 59 |  | 
| 61 60 | 
             
                  def login_from_session
         | 
| 62 61 | 
             
                    #puts 'Login from session=' + session[:user_id].inspect
         | 
| 63 | 
            -
                     | 
| 62 | 
            +
                    u = nil
         | 
| 63 | 
            +
                    if session[:user_id]
         | 
| 64 | 
            +
                      begin
         | 
| 65 | 
            +
                        u = ::User.find(session[:user_id])
         | 
| 66 | 
            +
                      rescue => ex
         | 
| 67 | 
            +
                        puts 'User not found: ' + ex.message
         | 
| 68 | 
            +
                      end
         | 
| 69 | 
            +
                    end
         | 
| 70 | 
            +
                    u
         | 
| 64 71 | 
             
                  end
         | 
| 65 72 |  | 
| 66 73 | 
             
                  def current_url
         | 
| @@ -78,10 +85,7 @@ module Appoxy | |
| 78 85 | 
             
                  end
         | 
| 79 86 |  | 
| 80 87 | 
             
                  def random_string(length=10)
         | 
| 81 | 
            -
                     | 
| 82 | 
            -
                    password = ''
         | 
| 83 | 
            -
                    length.times { password << chars[rand(chars.size)] }
         | 
| 84 | 
            -
                    password
         | 
| 88 | 
            +
                    Appoxy::Utils.random_string(length)
         | 
| 85 89 | 
             
                  end
         | 
| 86 90 |  | 
| 87 91 | 
             
                  def authenticate
         | 
| @@ -100,9 +104,10 @@ module Appoxy | |
| 100 104 | 
             
                        end
         | 
| 101 105 | 
             
                      end
         | 
| 102 106 | 
             
                      redirect_to :controller=>"sessions", :action=>"new", :ac=>params[:ac]
         | 
| 107 | 
            +
                    else
         | 
| 108 | 
            +
                      after_authenticate
         | 
| 103 109 | 
             
                    end
         | 
| 104 110 |  | 
| 105 | 
            -
                    after_authenticate
         | 
| 106 111 |  | 
| 107 112 | 
             
                  end
         | 
| 108 113 |  | 
| @@ -111,9 +116,9 @@ module Appoxy | |
| 111 116 | 
             
                  end
         | 
| 112 117 |  | 
| 113 118 |  | 
| 114 | 
            -
             | 
| 115 119 | 
             
                  def facebook_oauth_url(options={})
         | 
| 116 | 
            -
                    puts 'appconfig==' + Rails.application.config.inspect
         | 
| 120 | 
            +
            #        puts 'appconfig==' + Rails.application.config.inspect
         | 
| 121 | 
            +
                    raise "Please config your facebook id and api keys." unless Rails.application.config.respond_to?(:facebook_app_id)
         | 
| 117 122 | 
             
                    raise "Scope must be specified." unless options[:scope]
         | 
| 118 123 | 
             
                    app_id = Rails.application.config.facebook_app_id
         | 
| 119 124 | 
             
                    if app_id
         | 
| @@ -135,8 +135,155 @@ module Appoxy | |
| 135 135 | 
             
                    destroy
         | 
| 136 136 | 
             
                  end
         | 
| 137 137 |  | 
| 138 | 
            +
                  def openid_start
         | 
| 139 | 
            +
             | 
| 140 | 
            +
                    begin
         | 
| 141 | 
            +
                      identifier = params[:openid_identifier]
         | 
| 142 | 
            +
                      if identifier.nil?
         | 
| 143 | 
            +
                        flash[:warning] = "There is no openid identifier."
         | 
| 144 | 
            +
                        redirect_to root_path
         | 
| 145 | 
            +
                        return
         | 
| 146 | 
            +
                      end
         | 
| 147 | 
            +
                      oidreq = consumer.begin(identifier)
         | 
| 148 | 
            +
                    rescue OpenID::OpenIDError => e
         | 
| 149 | 
            +
                      flash[:error] = "Discovery failed for #{identifier}: #{e}"
         | 
| 150 | 
            +
                      redirect_to root_path
         | 
| 151 | 
            +
                      return
         | 
| 152 | 
            +
                    end
         | 
| 153 | 
            +
                    if true || params[:use_ax]
         | 
| 154 | 
            +
                      sregreq = OpenID::AX::FetchRequest.new
         | 
| 155 | 
            +
                      sregreq.add(OpenID::AX::AttrInfo.new("http://schema.openid.net/contact/email", "email", true))
         | 
| 156 | 
            +
                      oidreq.add_extension(sregreq)
         | 
| 157 | 
            +
                      oidreq.return_to_args['did_ax'] = 'y'
         | 
| 158 | 
            +
                    end
         | 
| 159 | 
            +
                    if params[:use_sreg]
         | 
| 160 | 
            +
                      sregreq = OpenID::SReg::Request.new
         | 
| 161 | 
            +
                      # required fields
         | 
| 162 | 
            +
                      sregreq.request_fields(['email', 'nickname'], true)
         | 
| 163 | 
            +
                      # optional fields
         | 
| 164 | 
            +
                      sregreq.request_fields(['dob', 'fullname'], false)
         | 
| 165 | 
            +
                      oidreq.add_extension(sregreq)
         | 
| 166 | 
            +
                      oidreq.return_to_args['did_sreg'] = 'y'
         | 
| 167 | 
            +
                    end
         | 
| 168 | 
            +
                    if params[:use_pape]
         | 
| 169 | 
            +
                      papereq = OpenID::PAPE::Request.new
         | 
| 170 | 
            +
                      papereq.add_policy_uri(OpenID::PAPE::AUTH_PHISHING_RESISTANT)
         | 
| 171 | 
            +
                      papereq.max_auth_age = 2*60*60
         | 
| 172 | 
            +
                      oidreq.add_extension(papereq)
         | 
| 173 | 
            +
                      oidreq.return_to_args['did_pape'] = 'y'
         | 
| 174 | 
            +
                    end
         | 
| 175 | 
            +
                    if params[:force_post]
         | 
| 176 | 
            +
                      oidreq.return_to_args['force_post']='x'*2048
         | 
| 177 | 
            +
                    end
         | 
| 178 | 
            +
                    return_to = base_url + "/sessions/openid_complete"
         | 
| 179 | 
            +
                    realm     = base_url
         | 
| 180 | 
            +
             | 
| 181 | 
            +
                    puts 'about to redirect'
         | 
| 182 | 
            +
             | 
| 183 | 
            +
                    if oidreq.send_redirect?(realm, return_to, params[:immediate])
         | 
| 184 | 
            +
                      url = oidreq.redirect_url(realm, return_to, params[:immediate])
         | 
| 185 | 
            +
                      puts 'yep, redirecting to ' + url
         | 
| 186 | 
            +
            #                response["x-test-yo"] = "fuck me"
         | 
| 187 | 
            +
                      redirect_to url
         | 
| 188 | 
            +
                    else
         | 
| 189 | 
            +
                      haml oidreq.html_markup(realm, return_to, params[:immediate], {'id' => 'openid_form'})
         | 
| 190 | 
            +
                    end
         | 
| 191 | 
            +
            #            dump_flash
         | 
| 192 | 
            +
             | 
| 193 | 
            +
                  end
         | 
| 194 | 
            +
             | 
| 195 | 
            +
             | 
| 196 | 
            +
                  def openid_complete
         | 
| 197 | 
            +
             | 
| 198 | 
            +
                    return if before_create == false
         | 
| 199 | 
            +
             | 
| 200 | 
            +
                    temp1       = session
         | 
| 201 | 
            +
             | 
| 202 | 
            +
                    current_url = base_url + "/sessions/openid_complete" # url_for(:action => 'complete', :only_path => false)
         | 
| 203 | 
            +
                    puts 'current_url=' + current_url.inspect
         | 
| 204 | 
            +
                    puts 'path_params=' + request.path_parameters.inspect
         | 
| 205 | 
            +
                    parameters = params.reject { |k, v| request.path_parameters[k.to_sym] }
         | 
| 206 | 
            +
                    puts 'PARAMETERS=' + parameters.inspect
         | 
| 207 | 
            +
                    oidresp = consumer.complete(parameters, current_url)
         | 
| 208 | 
            +
                    puts 'oidresp=' + oidresp.inspect
         | 
| 209 | 
            +
                    user_data = {}
         | 
| 210 | 
            +
                    case oidresp.status
         | 
| 211 | 
            +
                      when OpenID::Consumer::FAILURE
         | 
| 212 | 
            +
                        if oidresp.display_identifier
         | 
| 213 | 
            +
                          flash[:error] = ("Verification of #{oidresp.display_identifier} failed: #{oidresp.message}")
         | 
| 214 | 
            +
                        else
         | 
| 215 | 
            +
                          flash[:error] = "Verification failed: #{oidresp.message}"
         | 
| 216 | 
            +
                        end
         | 
| 217 | 
            +
                      when OpenID::Consumer::SUCCESS
         | 
| 218 | 
            +
                        logger.info ("Verification of #{oidresp.display_identifier} succeeded.")
         | 
| 219 | 
            +
             | 
| 220 | 
            +
                        user_data[:open_id] = oidresp.identity_url
         | 
| 221 | 
            +
                        if params[:did_ax]
         | 
| 222 | 
            +
                          sreg_resp    = OpenID::AX::FetchResponse.from_success_response(oidresp)
         | 
| 223 | 
            +
                          sreg_message = "AX Registration data was requested"
         | 
| 224 | 
            +
                          if sreg_resp.data.empty?
         | 
| 225 | 
            +
                            sreg_message << ", but none was returned."
         | 
| 226 | 
            +
                          else
         | 
| 227 | 
            +
                            sreg_message << ". The following data were sent:"
         | 
| 228 | 
            +
                            sreg_resp.data.each { |k, v|
         | 
| 229 | 
            +
                              sreg_message << "<br/><b>#{k}</b>: #{v}"
         | 
| 230 | 
            +
                            }
         | 
| 231 | 
            +
                            user_data[:email] = sreg_resp.data["http://schema.openid.net/contact/email"][0]
         | 
| 232 | 
            +
                          end
         | 
| 233 | 
            +
                          puts sreg_message
         | 
| 234 | 
            +
                        end
         | 
| 235 | 
            +
                        if params[:did_sreg]
         | 
| 236 | 
            +
                          sreg_resp    = OpenID::SReg::Response.from_success_response(oidresp)
         | 
| 237 | 
            +
                          sreg_message = "Simple Registration data was requested"
         | 
| 238 | 
            +
                          if sreg_resp.empty?
         | 
| 239 | 
            +
                            sreg_message << ", but none was returned."
         | 
| 240 | 
            +
                          else
         | 
| 241 | 
            +
                            sreg_message << ". The following data were sent:"
         | 
| 242 | 
            +
                            sreg_resp.data.each { |k, v|
         | 
| 243 | 
            +
                              sreg_message << "<br/><b>#{k}</b>: #{v}"
         | 
| 244 | 
            +
                            }
         | 
| 245 | 
            +
             | 
| 246 | 
            +
                          end
         | 
| 247 | 
            +
                          puts sreg_message
         | 
| 248 | 
            +
                        end
         | 
| 249 | 
            +
                        if params[:did_pape]
         | 
| 250 | 
            +
                          pape_resp    = OpenID::PAPE::Response.from_success_response(oidresp)
         | 
| 251 | 
            +
                          pape_message = "A phishing resistant authentication method was requested"
         | 
| 252 | 
            +
                          if pape_resp.auth_policies.member? OpenID::PAPE::AUTH_PHISHING_RESISTANT
         | 
| 253 | 
            +
                            pape_message << ", and the server reported one."
         | 
| 254 | 
            +
                          else
         | 
| 255 | 
            +
                            pape_message << ", but the server did not report one."
         | 
| 256 | 
            +
                          end
         | 
| 257 | 
            +
                          if pape_resp.auth_time
         | 
| 258 | 
            +
                            pape_message << "<br><b>Authentication time:</b> #{pape_resp.auth_time} seconds"
         | 
| 259 | 
            +
                          end
         | 
| 260 | 
            +
                          if pape_resp.nist_auth_level
         | 
| 261 | 
            +
                            pape_message << "<br><b>NIST Auth Level:</b> #{pape_resp.nist_auth_level}"
         | 
| 262 | 
            +
                          end
         | 
| 263 | 
            +
                          puts pape_message
         | 
| 264 | 
            +
                        end
         | 
| 265 | 
            +
                        # todo: CREATE A USER FOR THIS PROJECT HERE WITH IDENITY AND EMAIL
         | 
| 266 | 
            +
                        user = create_or_update_user(user_data)
         | 
| 267 | 
            +
                        if user
         | 
| 268 | 
            +
                          flash[:success] = "Authentication successful."
         | 
| 269 | 
            +
                        end
         | 
| 270 | 
            +
             | 
| 271 | 
            +
                      when OpenID::Consumer::SETUP_NEEDED
         | 
| 272 | 
            +
                        flash[:warning] = "Immediate request failed - Setup Needed"
         | 
| 273 | 
            +
                      when OpenID::Consumer::CANCEL
         | 
| 274 | 
            +
                        flash[:warning] = "OpenID transaction cancelled."
         | 
| 275 | 
            +
                      else
         | 
| 276 | 
            +
                    end
         | 
| 277 | 
            +
            #            dump_flash
         | 
| 278 | 
            +
            #        return_to = session[:return_to]
         | 
| 279 | 
            +
            #        puts 'return_to=' + return_to.inspect
         | 
| 280 | 
            +
            #        redirect_to (return_to || after_login_url || root_path)
         | 
| 281 | 
            +
             | 
| 282 | 
            +
             | 
| 283 | 
            +
                  end
         | 
| 138 284 |  | 
| 139 285 | 
             
                  def create_facebook
         | 
| 286 | 
            +
                    return if before_create == false
         | 
| 140 287 | 
             
                    if facebook_auth(Rails.application.config.facebook_app_id,
         | 
| 141 288 | 
             
                                     Rails.application.config.facebook_secret)
         | 
| 142 289 | 
             
                      after_create
         | 
| @@ -186,22 +333,40 @@ module Appoxy | |
| 186 333 | 
             
                        @user.save(:dirty=>true)
         | 
| 187 334 | 
             
                      end
         | 
| 188 335 |  | 
| 189 | 
            -
                       | 
| 190 | 
            -
                      @user
         | 
| 336 | 
            +
                      after_save_setup @user
         | 
| 191 337 |  | 
| 192 338 | 
             
                    end
         | 
| 193 339 | 
             
                  end
         | 
| 194 340 |  | 
| 195 | 
            -
                  def  | 
| 196 | 
            -
                     | 
| 197 | 
            -
             | 
| 341 | 
            +
                  def oauth_start(key, secret, callback_url, site, request_token_path, authorize_path, access_token_path)
         | 
| 342 | 
            +
                    consumer                = oauth_consumer(key, secret,
         | 
| 343 | 
            +
                                                             callback_url,
         | 
| 344 | 
            +
                                                             site,
         | 
| 345 | 
            +
                                                             request_token_path,
         | 
| 346 | 
            +
                                                             authorize_path,
         | 
| 347 | 
            +
                                                             access_token_path
         | 
| 348 | 
            +
                    )
         | 
| 349 | 
            +
                    @request_token          = consumer.get_request_token(:oauth_callback => callback_url)
         | 
| 198 350 | 
             
                    session[:request_token] = @request_token
         | 
| 199 | 
            -
                     | 
| 200 | 
            -
                    puts  | 
| 201 | 
            -
                    redirect_to  | 
| 351 | 
            +
                    auth_url                = @request_token.authorize_url(:oauth_callback => callback_url)
         | 
| 352 | 
            +
                    puts auth_url.inspect
         | 
| 353 | 
            +
                    redirect_to auth_url
         | 
| 354 | 
            +
                  end
         | 
| 355 | 
            +
             | 
| 356 | 
            +
                  def twitter_auth
         | 
| 357 | 
            +
                    signin                  = true
         | 
| 358 | 
            +
                    callback_url            = "#{base_url}/sessions/#{(signin ? "create_twitter" : "create_twitter_oauth")}"
         | 
| 359 | 
            +
                    auth_path               = signin ? "authenticate" : "authorize"
         | 
| 360 | 
            +
                    consumer                = oauth_start(Rails.application.config.twitter_consumer_key, Rails.application.config.twitter_consumer_secret,
         | 
| 361 | 
            +
                                                             callback_url,
         | 
| 362 | 
            +
                                                             "https://api.twitter.com",
         | 
| 363 | 
            +
                                                             "/oauth/request_token",
         | 
| 364 | 
            +
                                                             "/oauth/#{auth_path}",
         | 
| 365 | 
            +
                                                             "/oauth/access_token"
         | 
| 366 | 
            +
                    )
         | 
| 202 367 | 
             
                  end
         | 
| 203 368 |  | 
| 204 | 
            -
                  # OAUTH VERSION
         | 
| 369 | 
            +
                  # OAUTH VERSION for oauthing, shouldn't be in this controller
         | 
| 205 370 | 
             
                  def create_twitter_oauth
         | 
| 206 371 | 
             
                    puts 'params=' + params.inspect
         | 
| 207 372 | 
             
                    @request_token = session[:request_token]
         | 
| @@ -228,28 +393,34 @@ module Appoxy | |
| 228 393 |  | 
| 229 394 | 
             
                  end
         | 
| 230 395 |  | 
| 231 | 
            -
                  def  | 
| 232 | 
            -
                    before_create
         | 
| 233 | 
            -
                    puts 'params=' + params.inspect
         | 
| 396 | 
            +
                  def get_oauth_access_token
         | 
| 234 397 | 
             
                    @request_token = session[:request_token]
         | 
| 235 398 | 
             
                    @access_token  = @request_token.get_access_token(:oauth_verifier => params[:oauth_verifier])
         | 
| 236 399 | 
             
                    puts 'access_token = ' + @access_token.inspect
         | 
| 237 400 | 
             
                    p @access_token.params
         | 
| 401 | 
            +
                    @access_token
         | 
| 402 | 
            +
                  end
         | 
| 403 | 
            +
             | 
| 404 | 
            +
                  def create_twitter
         | 
| 405 | 
            +
                    return if before_create == false
         | 
| 406 | 
            +
                    puts 'params=' + params.inspect
         | 
| 407 | 
            +
                    get_oauth_access_token()
         | 
| 238 408 |  | 
| 239 409 | 
             
                    @user = User.find_by_twitter_id(@access_token.params[:user_id])
         | 
| 240 410 | 
             
                    unless @user
         | 
| 241 | 
            -
                      @user = User.new(:username | 
| 242 | 
            -
             | 
| 243 | 
            -
             | 
| 244 | 
            -
                      @user. | 
| 411 | 
            +
                      @user = User.new(# shouldn't set this, because can't say it will be unique ':username =>@access_token.params[:screen_name],
         | 
| 412 | 
            +
                      :twitter_screen_name=>@access_token.params[:screen_name],
         | 
| 413 | 
            +
                      :twitter_id         =>@access_token.params[:user_id])
         | 
| 414 | 
            +
                      @user.set_remember
         | 
| 415 | 
            +
                      @user.save
         | 
| 245 416 | 
             
                      puts '@user=' + @user.inspect
         | 
| 246 417 | 
             
                    else
         | 
| 247 418 | 
             
                      @user.username = @access_token.params[:screen_name]
         | 
| 419 | 
            +
                      @user.set_remember
         | 
| 248 420 | 
             
                      @user.save(:dirty=>true)
         | 
| 249 | 
            -
             | 
| 250 421 | 
             
                    end
         | 
| 251 422 |  | 
| 252 | 
            -
                     | 
| 423 | 
            +
                    after_save_setup @user
         | 
| 253 424 |  | 
| 254 425 | 
             
                    flash[:success] = "Authorized with Twitter."
         | 
| 255 426 |  | 
| @@ -258,16 +429,69 @@ module Appoxy | |
| 258 429 | 
             
                  end
         | 
| 259 430 |  | 
| 260 431 | 
             
                  private
         | 
| 261 | 
            -
             | 
| 262 | 
            -
             | 
| 263 | 
            -
                     | 
| 264 | 
            -
             | 
| 265 | 
            -
             | 
| 266 | 
            -
             | 
| 267 | 
            -
             | 
| 268 | 
            -
             | 
| 269 | 
            -
             | 
| 432 | 
            +
             | 
| 433 | 
            +
                  def after_save_setup(user)
         | 
| 434 | 
            +
                    if user.errors.present?
         | 
| 435 | 
            +
                      flash[:error] = "Error saving user: #{user.errors.full_messages}"
         | 
| 436 | 
            +
                      return false
         | 
| 437 | 
            +
                    else
         | 
| 438 | 
            +
                      set_user_cookies(user)
         | 
| 439 | 
            +
                      after_create
         | 
| 440 | 
            +
                      return user
         | 
| 441 | 
            +
                    end
         | 
| 442 | 
            +
                  end
         | 
| 443 | 
            +
             | 
| 444 | 
            +
                  def create_or_update_user(user_data)
         | 
| 445 | 
            +
                    user = User.find_by_email(user_data[:email]) # google returns different openid all the time so using email User.find_by_openid user_data[:openid]
         | 
| 446 | 
            +
             | 
| 447 | 
            +
                    unless user
         | 
| 448 | 
            +
                      user = User.new(user_data)
         | 
| 449 | 
            +
                      user.set_remember
         | 
| 450 | 
            +
                      user.save
         | 
| 451 | 
            +
                    else
         | 
| 452 | 
            +
                      if user.email.nil? || user.email != user_data[:email]
         | 
| 453 | 
            +
                        user.email = user_data[:email]
         | 
| 454 | 
            +
                      end
         | 
| 455 | 
            +
            #          if user.remember_me.nil? || user.remember_me_expires.nil? || user.remember_me_expires < Time.now
         | 
| 456 | 
            +
            #            logger.debug "Remember me expired."
         | 
| 457 | 
            +
            #            user.remember_me         = user_data[:remember_me]
         | 
| 458 | 
            +
            #            user.remember_me_expires = 30.days.since
         | 
| 459 | 
            +
            #          end
         | 
| 460 | 
            +
                      user.set_remember
         | 
| 461 | 
            +
                      user.save(:dirty=>true)
         | 
| 462 | 
            +
                    end
         | 
| 463 | 
            +
             | 
| 464 | 
            +
            #        puts 'user=' + user.inspect
         | 
| 465 | 
            +
                    return after_save_setup(user)
         | 
| 466 | 
            +
                  end
         | 
| 467 | 
            +
             | 
| 468 | 
            +
                  def set_user_cookies(user)
         | 
| 469 | 
            +
                    set_current_user(user)
         | 
| 470 | 
            +
                    response.set_cookie('user_id', :value => user.id, :expires => user.remember_expires)
         | 
| 471 | 
            +
                    response.set_cookie('rme', :value=>user.remember_me, :expires => user.remember_expires)
         | 
| 472 | 
            +
                  end
         | 
| 473 | 
            +
             | 
| 474 | 
            +
             | 
| 475 | 
            +
                  # todo: allow user to specify store type in options
         | 
| 476 | 
            +
                  def openid_consumer(options={})
         | 
| 477 | 
            +
                    @openid_consumer ||= OpenID::Consumer.new(session,
         | 
| 478 | 
            +
                                                              OpenID::Store::Filesystem.new("/mnt/tmp/openid"))
         | 
| 479 | 
            +
                    # todo: add S3Store to appoxy_sessions
         | 
| 480 | 
            +
                    #            @openid_consumer ||= OpenID::Consumer.new(session,
         | 
| 481 | 
            +
                    #                                                      S3Store.new(S3BucketWrapper.new(context, main_bucket)))
         | 
| 482 | 
            +
                  end
         | 
| 483 | 
            +
             | 
| 484 | 
            +
             | 
| 485 | 
            +
                  def oauth_consumer(key, secret, callback, site, request_token_path, authorize_path, access_token_path)
         | 
| 486 | 
            +
                    @consumer = OAuth::Consumer.new(key,
         | 
| 487 | 
            +
                                                    secret,
         | 
| 488 | 
            +
                                                    :site               => site,
         | 
| 489 | 
            +
                                                    :oauth_callback     => callback,
         | 
| 490 | 
            +
                                                    :request_token_path => request_token_path,
         | 
| 491 | 
            +
                                                    :authorize_path     => authorize_path,
         | 
| 492 | 
            +
                                                    :access_token_path  => access_token_path)
         | 
| 270 493 | 
             
                    p @consumer
         | 
| 494 | 
            +
                    @consumer
         | 
| 271 495 | 
             
                  end
         | 
| 272 496 |  | 
| 273 497 |  | 
    
        data/lib/sessions/user.rb
    CHANGED
    
    | @@ -16,7 +16,7 @@ module Appoxy | |
| 16 16 | 
             
                              {:name => :password, :hashed=>true},
         | 
| 17 17 | 
             
                              :first_name,
         | 
| 18 18 | 
             
                              :last_name,
         | 
| 19 | 
            -
                              : | 
| 19 | 
            +
                              :remember_token,
         | 
| 20 20 | 
             
                              :activation_code,
         | 
| 21 21 | 
             
                              :status, # invited, active
         | 
| 22 22 | 
             
                              :oauth_access_key,
         | 
| @@ -25,18 +25,18 @@ module Appoxy | |
| 25 25 | 
             
                              :lat, :lng
         | 
| 26 26 |  | 
| 27 27 | 
             
                  has_dates :last_login,
         | 
| 28 | 
            -
                            : | 
| 28 | 
            +
                            :remember_expires
         | 
| 29 29 |  | 
| 30 30 |  | 
| 31 31 | 
             
                  def validate
         | 
| 32 | 
            -
                    errors.add("email", "is not valid") unless User.email_is_valid?(email)
         | 
| 32 | 
            +
            #        errors.add("email", "is not valid") unless User.email_is_valid?(email)
         | 
| 33 33 |  | 
| 34 34 | 
             
                    if status == "invited"
         | 
| 35 35 | 
             
                      # doesn't need password
         | 
| 36 36 | 
             
                    elsif open_id
         | 
| 37 37 | 
             
                      # doesn't need password
         | 
| 38 38 | 
             
                    else
         | 
| 39 | 
            -
                      errors.add("password", "must be at least 6 characters long.") if password.blank?
         | 
| 39 | 
            +
            #          errors.add("password", "must be at least 6 characters long.") if password.blank?
         | 
| 40 40 | 
             
                    end
         | 
| 41 41 | 
             
                  end
         | 
| 42 42 |  | 
| @@ -75,6 +75,12 @@ module Appoxy | |
| 75 75 | 
             
                    (self.password == password) ? self : nil
         | 
| 76 76 | 
             
                  end
         | 
| 77 77 |  | 
| 78 | 
            +
                  def set_remember
         | 
| 79 | 
            +
                    rme_string            = random_string(50)
         | 
| 80 | 
            +
                    self.remember_token   = rme_string
         | 
| 81 | 
            +
                    self.remember_expires = 30.days.since
         | 
| 82 | 
            +
                  end
         | 
| 83 | 
            +
             | 
| 78 84 |  | 
| 79 85 | 
             
                end
         | 
| 80 86 |  | 
    
        data/lib/utils.rb
    ADDED
    
    
    
        metadata
    CHANGED
    
    | @@ -1,109 +1,90 @@ | |
| 1 | 
            -
            --- !ruby/object:Gem::Specification | 
| 1 | 
            +
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: appoxy_rails
         | 
| 3 | 
            -
            version: !ruby/object:Gem::Version | 
| 4 | 
            -
               | 
| 5 | 
            -
               | 
| 6 | 
            -
              - 0
         | 
| 7 | 
            -
              - 0
         | 
| 8 | 
            -
              - 18
         | 
| 9 | 
            -
              version: 0.0.18
         | 
| 3 | 
            +
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            +
              version: 0.0.19
         | 
| 5 | 
            +
              prerelease: 
         | 
| 10 6 | 
             
            platform: ruby
         | 
| 11 | 
            -
            authors: | 
| 7 | 
            +
            authors:
         | 
| 12 8 | 
             
            - Travis Reeder
         | 
| 13 9 | 
             
            autorequire: 
         | 
| 14 10 | 
             
            bindir: bin
         | 
| 15 11 | 
             
            cert_chain: []
         | 
| 16 | 
            -
             | 
| 17 | 
            -
            date: 2011-02-07 00:00:00 -08:00
         | 
| 12 | 
            +
            date: 2011-02-17 00:00:00.000000000 -08:00
         | 
| 18 13 | 
             
            default_executable: 
         | 
| 19 | 
            -
            dependencies: | 
| 20 | 
            -
            - !ruby/object:Gem::Dependency | 
| 14 | 
            +
            dependencies:
         | 
| 15 | 
            +
            - !ruby/object:Gem::Dependency
         | 
| 21 16 | 
             
              name: rest-client
         | 
| 22 | 
            -
               | 
| 23 | 
            -
              requirement: &id001 !ruby/object:Gem::Requirement 
         | 
| 17 | 
            +
              requirement: &26527800 !ruby/object:Gem::Requirement
         | 
| 24 18 | 
             
                none: false
         | 
| 25 | 
            -
                requirements: | 
| 26 | 
            -
                - -  | 
| 27 | 
            -
                  - !ruby/object:Gem::Version | 
| 28 | 
            -
                     | 
| 29 | 
            -
                    - 0
         | 
| 30 | 
            -
                    version: "0"
         | 
| 19 | 
            +
                requirements:
         | 
| 20 | 
            +
                - - ! '>='
         | 
| 21 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 22 | 
            +
                    version: '0'
         | 
| 31 23 | 
             
              type: :runtime
         | 
| 32 | 
            -
              version_requirements: *id001
         | 
| 33 | 
            -
            - !ruby/object:Gem::Dependency 
         | 
| 34 | 
            -
              name: oauth
         | 
| 35 24 | 
             
              prerelease: false
         | 
| 36 | 
            -
               | 
| 25 | 
            +
              version_requirements: *26527800
         | 
| 26 | 
            +
            - !ruby/object:Gem::Dependency
         | 
| 27 | 
            +
              name: oauth
         | 
| 28 | 
            +
              requirement: &26527464 !ruby/object:Gem::Requirement
         | 
| 37 29 | 
             
                none: false
         | 
| 38 | 
            -
                requirements: | 
| 39 | 
            -
                - -  | 
| 40 | 
            -
                  - !ruby/object:Gem::Version | 
| 41 | 
            -
                     | 
| 42 | 
            -
                    - 0
         | 
| 43 | 
            -
                    version: "0"
         | 
| 30 | 
            +
                requirements:
         | 
| 31 | 
            +
                - - ! '>='
         | 
| 32 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 33 | 
            +
                    version: '0'
         | 
| 44 34 | 
             
              type: :runtime
         | 
| 45 | 
            -
              version_requirements: *id002
         | 
| 46 | 
            -
            - !ruby/object:Gem::Dependency 
         | 
| 47 | 
            -
              name: ruby-openid
         | 
| 48 35 | 
             
              prerelease: false
         | 
| 49 | 
            -
               | 
| 36 | 
            +
              version_requirements: *26527464
         | 
| 37 | 
            +
            - !ruby/object:Gem::Dependency
         | 
| 38 | 
            +
              name: ruby-openid
         | 
| 39 | 
            +
              requirement: &26527164 !ruby/object:Gem::Requirement
         | 
| 50 40 | 
             
                none: false
         | 
| 51 | 
            -
                requirements: | 
| 52 | 
            -
                - -  | 
| 53 | 
            -
                  - !ruby/object:Gem::Version | 
| 54 | 
            -
                     | 
| 55 | 
            -
                    - 0
         | 
| 56 | 
            -
                    version: "0"
         | 
| 41 | 
            +
                requirements:
         | 
| 42 | 
            +
                - - ! '>='
         | 
| 43 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 44 | 
            +
                    version: '0'
         | 
| 57 45 | 
             
              type: :runtime
         | 
| 58 | 
            -
              version_requirements: *id003
         | 
| 59 | 
            -
            - !ruby/object:Gem::Dependency 
         | 
| 60 | 
            -
              name: appoxy_api
         | 
| 61 46 | 
             
              prerelease: false
         | 
| 62 | 
            -
               | 
| 47 | 
            +
              version_requirements: *26527164
         | 
| 48 | 
            +
            - !ruby/object:Gem::Dependency
         | 
| 49 | 
            +
              name: appoxy_api
         | 
| 50 | 
            +
              requirement: &26526828 !ruby/object:Gem::Requirement
         | 
| 63 51 | 
             
                none: false
         | 
| 64 | 
            -
                requirements: | 
| 65 | 
            -
                - -  | 
| 66 | 
            -
                  - !ruby/object:Gem::Version | 
| 67 | 
            -
                     | 
| 68 | 
            -
                    - 0
         | 
| 69 | 
            -
                    version: "0"
         | 
| 52 | 
            +
                requirements:
         | 
| 53 | 
            +
                - - ! '>='
         | 
| 54 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 55 | 
            +
                    version: '0'
         | 
| 70 56 | 
             
              type: :runtime
         | 
| 71 | 
            -
              version_requirements: *id004
         | 
| 72 | 
            -
            - !ruby/object:Gem::Dependency 
         | 
| 73 | 
            -
              name: mini_fb
         | 
| 74 57 | 
             
              prerelease: false
         | 
| 75 | 
            -
               | 
| 58 | 
            +
              version_requirements: *26526828
         | 
| 59 | 
            +
            - !ruby/object:Gem::Dependency
         | 
| 60 | 
            +
              name: mini_fb
         | 
| 61 | 
            +
              requirement: &26526480 !ruby/object:Gem::Requirement
         | 
| 76 62 | 
             
                none: false
         | 
| 77 | 
            -
                requirements: | 
| 78 | 
            -
                - -  | 
| 79 | 
            -
                  - !ruby/object:Gem::Version | 
| 80 | 
            -
                     | 
| 81 | 
            -
                    - 0
         | 
| 82 | 
            -
                    version: "0"
         | 
| 63 | 
            +
                requirements:
         | 
| 64 | 
            +
                - - ! '>='
         | 
| 65 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 66 | 
            +
                    version: '0'
         | 
| 83 67 | 
             
              type: :runtime
         | 
| 84 | 
            -
              version_requirements: *id005
         | 
| 85 | 
            -
            - !ruby/object:Gem::Dependency 
         | 
| 86 | 
            -
              name: simple_record
         | 
| 87 68 | 
             
              prerelease: false
         | 
| 88 | 
            -
               | 
| 69 | 
            +
              version_requirements: *26526480
         | 
| 70 | 
            +
            - !ruby/object:Gem::Dependency
         | 
| 71 | 
            +
              name: simple_record
         | 
| 72 | 
            +
              requirement: &26526156 !ruby/object:Gem::Requirement
         | 
| 89 73 | 
             
                none: false
         | 
| 90 | 
            -
                requirements: | 
| 91 | 
            -
                - -  | 
| 92 | 
            -
                  - !ruby/object:Gem::Version | 
| 93 | 
            -
                     | 
| 94 | 
            -
                    - 0
         | 
| 95 | 
            -
                    version: "0"
         | 
| 74 | 
            +
                requirements:
         | 
| 75 | 
            +
                - - ! '>='
         | 
| 76 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 77 | 
            +
                    version: '0'
         | 
| 96 78 | 
             
              type: :runtime
         | 
| 97 | 
            -
               | 
| 79 | 
            +
              prerelease: false
         | 
| 80 | 
            +
              version_requirements: *26526156
         | 
| 98 81 | 
             
            description: Appoxy API Helper gem description...
         | 
| 99 82 | 
             
            email: travis@appoxy.com
         | 
| 100 83 | 
             
            executables: []
         | 
| 101 | 
            -
             | 
| 102 84 | 
             
            extensions: []
         | 
| 103 | 
            -
             | 
| 104 | 
            -
            extra_rdoc_files: 
         | 
| 85 | 
            +
            extra_rdoc_files:
         | 
| 105 86 | 
             
            - README.markdown
         | 
| 106 | 
            -
            files: | 
| 87 | 
            +
            files:
         | 
| 107 88 | 
             
            - lib/api/api_controller.rb
         | 
| 108 89 | 
             
            - lib/api/client.rb
         | 
| 109 90 | 
             
            - lib/api/client_helper.rb
         | 
| @@ -125,38 +106,31 @@ files: | |
| 125 106 | 
             
            - lib/ui/test.rb
         | 
| 126 107 | 
             
            - lib/ui/time_zoner.rb
         | 
| 127 108 | 
             
            - lib/ui/visualizations.rb
         | 
| 109 | 
            +
            - lib/utils.rb
         | 
| 128 110 | 
             
            - README.markdown
         | 
| 129 111 | 
             
            has_rdoc: true
         | 
| 130 112 | 
             
            homepage: http://www.appoxy.com
         | 
| 131 113 | 
             
            licenses: []
         | 
| 132 | 
            -
             | 
| 133 114 | 
             
            post_install_message: 
         | 
| 134 115 | 
             
            rdoc_options: []
         | 
| 135 | 
            -
             | 
| 136 | 
            -
            require_paths: 
         | 
| 116 | 
            +
            require_paths:
         | 
| 137 117 | 
             
            - lib
         | 
| 138 | 
            -
            required_ruby_version: !ruby/object:Gem::Requirement | 
| 118 | 
            +
            required_ruby_version: !ruby/object:Gem::Requirement
         | 
| 139 119 | 
             
              none: false
         | 
| 140 | 
            -
              requirements: | 
| 141 | 
            -
              - -  | 
| 142 | 
            -
                - !ruby/object:Gem::Version | 
| 143 | 
            -
                   | 
| 144 | 
            -
             | 
| 145 | 
            -
                  version: "0"
         | 
| 146 | 
            -
            required_rubygems_version: !ruby/object:Gem::Requirement 
         | 
| 120 | 
            +
              requirements:
         | 
| 121 | 
            +
              - - ! '>='
         | 
| 122 | 
            +
                - !ruby/object:Gem::Version
         | 
| 123 | 
            +
                  version: '0'
         | 
| 124 | 
            +
            required_rubygems_version: !ruby/object:Gem::Requirement
         | 
| 147 125 | 
             
              none: false
         | 
| 148 | 
            -
              requirements: | 
| 149 | 
            -
              - -  | 
| 150 | 
            -
                - !ruby/object:Gem::Version | 
| 151 | 
            -
                   | 
| 152 | 
            -
                  - 0
         | 
| 153 | 
            -
                  version: "0"
         | 
| 126 | 
            +
              requirements:
         | 
| 127 | 
            +
              - - ! '>='
         | 
| 128 | 
            +
                - !ruby/object:Gem::Version
         | 
| 129 | 
            +
                  version: '0'
         | 
| 154 130 | 
             
            requirements: []
         | 
| 155 | 
            -
             | 
| 156 131 | 
             
            rubyforge_project: 
         | 
| 157 | 
            -
            rubygems_version: 1. | 
| 132 | 
            +
            rubygems_version: 1.5.2
         | 
| 158 133 | 
             
            signing_key: 
         | 
| 159 134 | 
             
            specification_version: 3
         | 
| 160 135 | 
             
            summary: Appoxy Rails Helper gem
         | 
| 161 136 | 
             
            test_files: []
         | 
| 162 | 
            -
             |