42a43,45 > @users = User.active.find(:all, :order => :login) > @roles = Role.find(:all, :order => :name) > 44,48c44,58 < unless @user < # Unknown user => the email is ignored < # TODO: ability to create the user's account < logger.info "MailHandler: email submitted by unknown user [#{email.from.first}]" if logger && logger.info < return false --- > unless @user # create user > if Setting.mail_handler_create_users_from_incoming_mails.to_i != 0 # creates a user and assigns him to a project > @user = create_user(email) > return false unless @user > return false unless create_role(@user) > elsif Setting.mail_handler_assign_unknown_addresses_to_user.to_i != 0 # use default users, needs :add_issue right on project > unless @user = User.find_by_id(Setting.mail_handler_assign_unknown_addresses_to_user.to_i) > logger.info "MailHandler: could not find User with id [#{Setting.mail_handler_assign_unknown_addresses_to_user.to_i}] to assign sender #{email.from.first}" if logger && loggger.info > return false > end > else > # unknown user and no values specified to handle unknown mails > logger.info "MailHandler: email submitted by unknown user [#{email.from.first}] (change Settings in incoming E-Mail tab for default behaviour)" if logger && logger.info > return false > end 53c63,135 < --- > > > protected > def target_project > # TODO: other ways to specify project: > # * parse the email To field > # * specific project (eg. Setting.mail_handler_target_project) > target = Project.find_by_identifier(get_keyword(:project)) > raise MissingInformation.new('Unable to determine target project') if target.nil? > target > end > > # creates a user from email address and sets the status depending on the configured actions > def create_user(email) > new_user = User.new > new_user.mail = email.from.first.to_s > new_user.admin = false > email_user_name = email.from.first.to_s.split('@').first > new_user.login = if !User.find_by_login(email_user_name) # set login to the email address without domain or if it exists to the full email > email_user_name > else > email.from.first.to_s > end > new_user.status = User::STATUS_REGISTERED > new_user.firstname = email_user_name.split('.').first > new_user.lastname = email_user_name.split('.').last > password = Token.generate_token_value(8) > new_user.password = password > new_user.password_confirmation = password > > case Setting.mail_handler_create_users_from_incoming_mails > when '1' || '2' > token = Token.new(:user => new_user, :action => "register") > Mailer.deliver_register(token) if new_user.save and token.save > Mailer.deliver_account_information(new_user, password) > when '3' > new_user.status = User::STATUS_ACTIVE > new_user.last_login_on = Time.now > if new_user.save > Mailer.deliver_account_information(new_user, password, :notice_account_register_done) > else > logger.info "could not create user #{new_user}" if logger and logger.info > return false > end > else > Mailer.deliver_account_activation_request(new_user) > Mailer.deliver_account_information(new_user, password, :notice_account_pending) > end > return new_user > end > > # creates a member on the target_project for the given user with the configured role > def create_role(user) > # Roles need right for add_issue > if Setting.mail_handler_role_to_add_users_to_project.to_i != 0 > if Role.find_by_id(Setting.mail_handler_role_to_add_users_to_project.to_i) > member = Member.new( > :user_id => user.id, > :project_id => self.target_project.id, > :role_id => Setting.mail_handler_role_to_add_users_to_project.to_i > ) > unless member.save > logger.info "could not create Role for user #{user.login} and project #{self.target_project.name}" if logger and logger.info > return false > end > else > logger.info "could not assing #{user} to #{self.target_project.name}, missing Role id: #{Setting.mail_handler_role_to_add_users_to_project}" if logger and logger.info > return false > end > end > return true > end > 97c179 < # check permission --- > # check permissions 121,129d202 < def target_project < # TODO: other ways to specify project: < # * parse the email To field < # * specific project (eg. Setting.mail_handler_target_project) < target = Project.find_by_identifier(get_keyword(:project)) < raise MissingInformation.new('Unable to determine target project') if target.nil? < target < end < 167c240 < :content => plain_text_body) --- > :content => plain_text_body) 183,185c256,258 < :file => attachment, < :author => user, < :content_type => attachment.content_type) --- > :file => attachment, > :author => user, > :content_type => attachment.content_type) 161c161 < def account_information(user, password) --- > def account_information(user, password, information = '') 166a167 > :information => information, 38c38 < def self.generate_token_value --- > def self.generate_token_value(length = 40) 41c41 < 40.times { |i| token_value << chars[rand(chars.size-1)] } --- > length.times { |i| token_value << chars[rand(chars.size-1)] } 2c2 <
<%= l(:mail_body_account_information_external, @user.auth_source.name) %>
--- ><%= l(:mail_body_account_information_external, @user.auth_source.name) %>
4,5c4,5 <<%= l(:mail_body_account_information) %>:
<<%= l(:mail_body_account_information) %>:
><%= l(@information) %>
> <% end -%> 5a6,8 > <% if @information -%> > <%= l(@information) %> > <% end -%> 3,15c3,7 << <%= check_box_tag 'settings[mail_handler_api_enabled]', 1, Setting.mail_handler_api_enabled?, < :onclick => "if (this.checked) { Form.Element.enable('settings_mail_handler_api_key'); } else { Form.Element.disable('settings_mail_handler_api_key'); }" %> < <%= hidden_field_tag 'settings[mail_handler_api_enabled]', 0 %>
< << <%= text_field_tag 'settings[mail_handler_api_key]', Setting.mail_handler_api_key, < :size => 30, < :id => 'settings_mail_handler_api_key', < :disabled => !Setting.mail_handler_api_enabled? %> < <%= link_to_function l(:label_generate_key), "if ($('settings_mail_handler_api_key').disabled == false) { $('settings_mail_handler_api_key').value = randomKey(20) }" %>
<> <%= check_box_tag 'settings[mail_handler_api_enabled]', 1, Setting.mail_handler_api_enabled?, > :onclick => "if (this.checked) { Form.Element.enable('settings_mail_handler_api_key'); } else { Form.Element.disable('settings_mail_handler_api_key'); }" %> > <%= hidden_field_tag 'settings[mail_handler_api_enabled]', 0 %>
17c9,46 < <%= submit_tag l(:button_save) %> --- >> <%= text_field_tag 'settings[mail_handler_api_key]', Setting.mail_handler_api_key, > :size => 30, > :id => 'settings_mail_handler_api_key', > :disabled => !Setting.mail_handler_api_enabled? %> > <%= link_to_function l(:label_generate_key), "if ($('settings_mail_handler_api_key').disabled == false) { $('settings_mail_handler_api_key').value = randomKey(20) }" %>
> >> > <%= select_tag 'settings[mail_handler_create_users_from_incoming_mails]', > options_for_select( [[l(:label_disabled), "0"], > [l(:label_registration_activation_by_email), "1"], > [l(:label_registration_manual_activation), "2"], > [l(:label_registration_automatic_activation), "3"] > ], Setting.mail_handler_create_users_from_incoming_mails ), > :onChange => "if (this.options[this.selectedIndex].value == \"0\") { Form.Element.enable('settings_mail_handler_assign_unknown_addresses_to_user'); } else { Form.Element.disable('settings_mail_handler_assign_unknown_addresses_to_user'); }" > %> >
> >> > <%= select(:settings, :mail_handler_role_to_add_users_to_project, @roles.collect {|p| [ p.name, p.id ] }, > { :include_blank => true, :selected => Setting.mail_handler_role_to_add_users_to_project.to_i } > ) %> >
> > >> > <%= select(:settings, :mail_handler_assign_unknown_addresses_to_user, @users.collect {|p| [ p.login, p.id ] }, > { :include_blank => true, :selected => Setting.mail_handler_assign_unknown_addresses_to_user.to_i }, > { :disabled => Setting.mail_handler_create_users_from_incoming_mails.to_i == 0} > ) %> >
> >