Skip to content
Snippets Groups Projects
Select Git revision
  • clone-5.1.6-build
  • bb-10.6-midenok-MDEV-16417
  • bb-10.4-MDEV-23675
  • 10.5
  • bb-10.2-MDEV-18867
  • bb-10.3-sujatha
  • bb-10.2-sujatha
  • bb-10.5-MDEV-23456
  • bb-10.1-sujatha
  • bb-10.4-anel-MDEV-23626-connect
  • bb-10.5-midenok
  • bb-10.2-MDEV-19264-backup-slave-info
  • bb-10.2-MDEV-23456
  • bb-10.4-anel-MDEV-23589
  • 10.5-mdev21829
  • bb-10.6-midenok-MDEV-17554
  • bb-10.5-mdev23662
  • 10.2
  • bb-10.4-thiru
  • 10.1
  • bb-10.2-midenok
  • mariadb-10.5.5
  • mariadb-10.4.14
  • mariadb-10.3.24
  • mariadb-10.2.33
  • mariadb-10.1.46
  • mariadb-10.5.4
  • mariadb-10.5.3
  • mariadb-10.4.13
  • mariadb-10.3.23
  • mariadb-10.2.32
  • mariadb-10.1.45
  • mariadb-5.5.68
  • mariadb-10.5.2
  • mariadb-10.5.1
  • mariadb-10.4.12
  • mariadb-10.3.22
  • mariadb-10.2.31
  • mariadb-10.1.44
  • mariadb-5.5.67
  • mariadb-10.4.11
41 results

INDEX

Blame
  • Code owners
    Assign users and groups as approvers for specific file changes. Learn more.
    ShibbolethController.cs NaN GiB
    using Coscine.STS.Data;
    using Coscine.STS.Models;
    using Coscine.STS.Utils;
    using Microsoft.AspNetCore.Identity;
    using Microsoft.AspNetCore.Mvc;
    using System;
    using System.Linq;
    using System.Security.Claims;
    using System.Threading.Tasks;
    using Coscine.ApiCommons.Models;
    using Coscine.Database.Model;
    
    namespace Coscine.STS.Controllers
    {
        [Route("[controller]/[action]")]
        public class ShibbolethController : Controller
        {
            private readonly SignInManager<CoscineUser> _signInManager;
    
            public ShibbolethController(SignInManager<CoscineUser> signInManager)
            {
                _signInManager = signInManager;
            }
    
            [HttpGet]
            public async Task<ActionResult> Callback(string returnUrl = null, string remoteError = null)
            {
                if (remoteError != null)
                {
                    throw new ArgumentException($"Error from external provider: {remoteError}");
                }
    
                var info = await _signInManager.GetExternalLoginInfoAsync();
                if (info == null)
                {
                    return Redirect(UrlGenerator.GetLoginUrl(Request));
                }
    
                ExternalAuthenticatorModel externalAuthenticatorModel = new ExternalAuthenticatorModel();
                var shibbolethAuthItem = externalAuthenticatorModel.GetWhere((externalAuthenticator) => externalAuthenticator.DisplayName == "Shibboleth");
    
                ExternalIdModel externalIdModel = new ExternalIdModel();
                var identifier = info.Principal.FindFirstValue(ShibbolethAttributeMapping.Identifier);
                identifier = identifier.Substring(identifier.IndexOf(">") + 1);
                identifier = identifier.Substring(0, identifier.IndexOf("<"));
    
                var mapping = externalIdModel.GetAllWhere((map) => map.ExternalId_Column == identifier && map.ExternalAuthenticatorId == shibbolethAuthItem.Id);
                User user;
                UserPlainModel userPlainModel = new UserPlainModel(Program.Configuration);
                if (mapping.Count() > 0)
                {
                    var userId = mapping.First().UserId;
                    user = userPlainModel.GetById(userId);
                }
                else
                {
                    user = ShibbolethAttributeMapping.CreateUser(info.Principal);
                    userPlainModel.Insert(user);
                    externalIdModel.Insert(new ExternalId
                    {
                        ExternalId_Column = identifier,
                        ExternalAuthenticatorId = shibbolethAuthItem.Id,
                        UserId = user.Id
                    });
                }
    
                var coscineUser = new CoscineUser()
                {
                    UserName = user.Id.ToString(),
                    Email = user.EmailAddress
                };
                
                var result = await _signInManager.UserManager.CreateAsync(coscineUser);
                result = await _signInManager.UserManager.AddLoginAsync(coscineUser, info);
                await _signInManager.SignInAsync(coscineUser, isPersistent: false);            
    
                return Redirect(UrlGenerator.ExtendReturnUrl(returnUrl, Request));            
            }
            
            [HttpPost]
            public ActionResult Login(string returnUrl)
            {
                var provider = "Saml2";
                var redirectUrl = Program.MainUrl + "/Shibboleth/Callback?returnUrl=" + returnUrl;
                redirectUrl = UrlGenerator.ExtendReturnUrl(redirectUrl, Request);
                var properties = _signInManager.ConfigureExternalAuthenticationProperties(provider, redirectUrl);
                return new ChallengeResult(provider, properties);
            }
        }
    }