Hello Luis,
Good luck! The GitLab documentation on OmniAuth examples at https://docs.gitlab.com/ce/integration/omniauth.html#examples states: If you have successfully set up a provider that is not shipped with GitLab itself, please let us know. You can help others by reporting successful configurations and probably share a few insights or provide warnings for common errors or pitfalls by sharing your experience in the public Wiki <https://github.com/gitlabhq/gitlab-public-wiki/wiki/Custom-omniauth-provider-configurations> . The public Wiki has been deprecated (and all content removed), but if you git clone it from https://github.com/gitlabhq/gitlab-public-wiki.wiki.git and then check out commit 02db843614a1642c7101c721874d89b64a63d936 you can look at Custom-omniauth-provider-configurations.md Sounds like you're blazing a trail here. Good luck! Best, Aleksey -- Need training on Git or GitLab? Email train...@verticalsysadmin.com. On Mon, Apr 10, 2017 at 2:53 AM, Luís Nabais <luisnab...@gmail.com> wrote: > Hello guys. > > Before someone asks, due to some specific limitations at my job's > networking, I need to try something with this complexity. I wish it could > be simpler. > > Basically, I have a Python script which authenticates users in our IMAP > server. I need Omniauth provider to call it to authenticate, get return > result (exit code) and let/refuse user login. > It doesn't get any user data, not even their emails (our emails can have > multiple suffixes. Just user and password. > > Right now I've done this: > - GitLab Container (using Docker, latest version, 17.04), using GitLab > 9.0.4-ce.0. > - I get a button below regular login screen, to Login via Ourprovider > - I get the form with user, password and login button (I get to the > request phase correctly) > - If I enter data and press Login, it goes to callback, where I have the > user and password > > And there's where I cannot understand corretly the issue. > > I'm trying to just develop a fake temporary solution, in which I just > return something like Tru/False, just for checking if user logged in > correctly or not and allow login. > User already exists and I can login normally through the normal GitLab > process. > > I can't understand next phase. > Do I need to return something like True/False? > Do I need to use token for anything? If yes, how can I access it? > How do I say user can login? > How do I say to GitLab user can't login? > > > > I "configured" this: > > - Added this configuration to /etc/gitlab/gitlab.rb > gitlab_rails['omniauth_enabled'] = true > gitlab_rails['omniauth_providers'] = [ > { > "name" => "Ourprovider", > "secret" => "our_secret", > "url" => "https://www.justsomeurl_still_not_used_and_dont_know_ > whats_it_for.com", > "args" => { "user_admin" => > "just_some_user_which_exists_for_this_not_to_be_empty" > } > } > ] > > > > - Added provider to omniauth.rb (/opt/gitlab/embedded/service/ > gitlab-rails/config/initializers/omniauth.rb) > >> module OmniAuth >> module Strategies >> autoload :Bitbucket, Rails.root.join('lib', 'omniauth', 'strategies', >> 'bitbucket') - already there, not needed for us >> autoload :Ourprovider, Rails.root.join('lib', 'omniauth', >> 'strategies', 'ourprovider') - added this line >> end >> end >> >> Rails.application.config.middleware.use OmniAuth::Builder do >> provider :ourprovider >> end >> > > > - Added script provider in /opt/gitlab/embedded/service/ > gitlab-rails/lib/omniauth/strategies/ourprovider.rb > >> module OmniAuth >> module Strategies >> class Ourprovider >> include OmniAuth::Strategy >> >> attr_reader :token >> >> option :title, "IMAP Authentication" >> option :fields, [:name, :email] >> option :uid_field, [:name, :email] >> >> def request_phase >> File.open('/tmp/omniauth', 'a') { |file| >> file.write("request_phase (test)\n") } >> >> OmniAuth::Form.build( >> :title => "IMAP Authentication", >> :url => callback_path >> ) do |f| >> f.text_field 'Username', 'username' >> f.password_field 'Password', 'password' >> f.button "Login" >> end.to_response >> end >> def callback_phase >> File.open('/tmp/omniauth', 'a') { |file| >> file.write("callback_phase\n") } >> #File.open('/tmp/omniauth', 'a') { |file| file.write("request: " >> + request.params.to_s + "\n") } >> #File.open('/tmp/omniauth', 'a') { |file| file.write("username: " >> + request['username'].to_s + "\n") } >> end >> >> uid do >> File.open('/tmp/omniauth', 'a') { |file| file.write("uid\n") } >> end >> >> info do >> File.open('/tmp/omniauth', 'a') { |file| file.write("info\n") } >> { >> :nickname => request['username'], >> } >> end >> end >> end >> end >> > > > As you can see, I only have some text being written to a file in the > methods. I'm trying to understand the way it works. After I understand how > to allow/refuse login, I'll try to really authenticate users against our > IMAP server. > I'm very confused, at this point... > > Can anybody help me understanding this? > Thanks a lot for all your help! > Cheers. > Best regards, > Luis Nabais > > -- > You received this message because you are subscribed to the Google Groups > "GitLab" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to gitlabhq+unsubscr...@googlegroups.com. > To view this discussion on the web visit https://groups.google.com/d/ > msgid/gitlabhq/d130da93-4df7-4a4a-832a-bca1965c08fd%40googlegroups.com > <https://groups.google.com/d/msgid/gitlabhq/d130da93-4df7-4a4a-832a-bca1965c08fd%40googlegroups.com?utm_medium=email&utm_source=footer> > . > For more options, visit https://groups.google.com/d/optout. > ᐧ -- You received this message because you are subscribed to the Google Groups "GitLab" group. To unsubscribe from this group and stop receiving emails from it, send an email to gitlabhq+unsubscr...@googlegroups.com. To view this discussion on the web visit https://groups.google.com/d/msgid/gitlabhq/CANNWuVX-Z4WVtgGce3ATokAimO0WvsVJ4%2ByhwZSYgJupLr0thg%40mail.gmail.com. For more options, visit https://groups.google.com/d/optout.