lib/zen/package/users/lib/users/model/user.rb in zen-0.3 vs lib/zen/package/users/lib/users/model/user.rb in zen-0.4

- old
+ new

@@ -1,29 +1,74 @@ module Users - #:nodoc: module Model ## # Model that represents a single user. # - # @since 0.1 + # @example Sending an Email for a new user + # Zen::Event.listen(:after_new_user) do |user| + # Mail.deliver do + # from 'user@domain.tld' + # to user.email + # subject 'Your new account' + # body "Dear #{user.name}, your account has been created." + # end + # end # + # @since 0.1 + # @event before_new_user + # @event after_new_user + # @event before_edit_user + # @event after_edit_user + # @event before_delete_user + # @event after_delete_user + # class User < Sequel::Model + ## # Regex to do some basic Email validation. Emails such as foo@bar, - # foo@bar.com and foo@bar.a.b are all valid but foo bar@bar.com isn't. + # "foo@bar.com" and "foo@bar.a.b" are all valid but "foo bar@bar.com" + # isn't. + # EMAIL_REGEX = '^[^@]\S+@\S+(\.[a-z]+)*[^.]$' + ## + # Array containing the columns that can be set by the user. + # + # @since 17-02-2012 + # + COLUMNS = [ + :email, + :name, + :website, + :password, + :confirm_password, + :user_status_id, + :language, + :frontend_language, + :date_format, + :user_group_pks + ] + include Zen::Model::Helper many_to_many :user_groups, :class => 'Users::Model::UserGroup', :eager => [:permissions] many_to_one :user_status, :class => 'Users::Model::UserStatus' one_to_many :permissions, :class => 'Users::Model::Permission' + one_to_many :widgets, :class => 'Dashboard::Model::Widget' plugin :timestamps, :create => :created_at, :update => :updated_at plugin :association_dependencies, :permissions => :delete + plugin :events, + :before_create => :before_new_user, + :after_create => :after_new_user, + :before_update => :before_edit_user, + :after_update => :after_edit_user, + :before_destroy => :before_delete_user, + :after_destroy => :after_delete_user + ## # Searches for a set of users that match the given query. # # @since 16-10-2011 # @param [String] query The search query. @@ -81,11 +126,14 @@ # @param [String] password The raw password # def password=(password) return if password.nil? or password.empty? - password = BCrypt::Password.create(password, :cost => 10) + password = BCrypt::Password.create( + Zen::Security.sanitize(password), + :cost => 10 + ) super(password) end ## @@ -104,9 +152,14 @@ # Hook run before creating or updating an object. # # @since 0.3 # def before_save + # Password is sanitized in password=. + sanitize_fields([ + :email, :name, :website, :language, :frontend_language, :date_format + ]) + if self.user_status_id.nil? self.user_status_id = Users::Model::UserStatus[:name => 'closed'].id end super