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) %>:

< 9a10,13 > > <% if @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} > ) %> >

> >
> > <%= submit_tag l(:button_save) %> 306a307,309 > setting_mail_handler_create_users_from_incoming_mails: Erstelle Benutzer aus eingehenden E-Mails > setting_mail_handler_assign_unknown_addresses_to_user: Unbekannte Absender folgendem Benutzer zuordnen > setting_mail_handler_role_to_add_users_to_project: Rolle für neue Benutzer 281a282,284 > setting_mail_handler_create_users_from_incoming_mails: Create users from incoming E-Mails > setting_mail_handler_assign_unknown_addresses_to_user: Assign Unknown addresses to the following User > setting_mail_handler_role_to_add_users_to_project: Role for new Users 120c120,126 < default: --- > default: > mail_handler_create_users_from_incoming_mails: > default: 0 > mail_handler_assign_unknown_addresses_to_user: > default: 0 > mail_handler_role_to_add_users_to_project: > default: 0 35c35,36 < :messages --- > :messages, > :settings 196a198,212 > end > > def test_should_create_new_user_and_assign_to_project > issue = submit_email('ticket_with_new_user.eml') > assert issue.is_a?(Issue) > assert !issue.new_record? > assert_equal issue.subject, 'New ticker from new user' > assert_equal 'onlinestore', issue.project.name.downcase > assert_equal 'jjins', issue.author.login > assert_equal 'jjins@somenet.foo', issue.author.mail > creator = User.find_by_login('jjins') > assert_not_nil creator > member = Member.find(:first, :conditions => {:project_id => issue.project.id, :user_id => creator.id}) > assert_not_nil member > assert_equal 'Reporter', member.role.name