USP_APPUSERCLAIMS_LINKAPPUSER

Parameters

Parameter Parameter Type Mode Description
@NAMEIDENTIFIER nvarchar(450) IN
@WSFEDERATIONINVITATIONID uniqueidentifier IN
@EMAILADDRESS nvarchar(100) IN
@SKIPMAKEANONYMOUS bit IN

Definition

Copy


CREATE procedure dbo.USP_APPUSERCLAIMS_LINKAPPUSER
(
  @NAMEIDENTIFIER nvarchar(450),
  @WSFEDERATIONINVITATIONID uniqueidentifier = null,
  @EMAILADDRESS nvarchar(100) = null,
  @SKIPMAKEANONYMOUS bit = 0
)
as
begin
  set nocount on;

  declare @APPUSERID uniqueidentifier = null;

  select
    @APPUSERID = APPUSER.ID
  from dbo.APPUSER
  inner join dbo.APPUSERTHIRDPARTYAUTH
    on APPUSER.ID = APPUSERTHIRDPARTYAUTH.ID
  left outer join dbo.APPUSERCLAIMS
    on APPUSER.ID = APPUSERCLAIMS.APPUSERID
  where APPUSERTHIRDPARTYAUTH.INACTIVE = 0
    and APPUSERCLAIMS.NAMEIDENTIFIER is null
    and APPUSERTHIRDPARTYAUTH.INVITATIONID = @WSFEDERATIONINVITATIONID;

  if @APPUSERID is null
    begin
      set @WSFEDERATIONINVITATIONID = null;

      select
        @APPUSERID = APPUSER.ID
      from dbo.APPUSER
      left outer join dbo.APPUSERTHIRDPARTYAUTH
        on APPUSER.ID = APPUSERTHIRDPARTYAUTH.ID
      left outer join dbo.APPUSERCLAIMS
        on APPUSER.ID = APPUSERCLAIMS.APPUSERID
      where isnull(APPUSERTHIRDPARTYAUTH.INACTIVE, 0) = 0
        and APPUSERCLAIMS.NAMEIDENTIFIER is null
        and APPUSER.EMAILADDRESS = @EMAILADDRESS;
    end
  else
    -- Bug 631823 

    -- If invitationID is mapped to one user, but the email address belongs to another...raise error

    if exists(
      select APPUSER.ID
      from dbo.APPUSER
      left outer join dbo.APPUSERCLAIMS
        on APPUSER.ID = APPUSERCLAIMS.APPUSERID
      where APPUSER.ID <> @APPUSERID
        and APPUSER.EMAILADDRESS = @EMAILADDRESS
    )
      begin
        raiserror('BBERR_DUPLICATEEMAILADDRESS', 13, 1);
        return 1;
      end

  if @APPUSERID is not null
    begin
      declare @CURRENTDATE datetime = getdate();
      declare @CHANGEAGENTID uniqueidentifier;
      declare @OLDUSERNAME nvarchar(256);

      exec dbo.USP_CHANGEAGENT_GETORCREATECHANGEAGENT @CHANGEAGENTID output;

      select @OLDUSERNAME = USERNAME from dbo.APPUSER where ID=@APPUSERID;

      insert into dbo.APPUSERCLAIMS
        (NAMEIDENTIFIER, APPUSERID, EMAILADDRESS, ISREGISTERED)
      values
        (@NAMEIDENTIFIER, @APPUSERID, @EMAILADDRESS, 0);

      if @SKIPMAKEANONYMOUS = 0
        begin
          update dbo.APPUSER
          set APPUSER.USERSID = SUSER_SID('NT AUTHORITY\ANONYMOUS LOGON'),
            CHANGEDBYID = @CHANGEAGENTID,
            DATECHANGED = @CURRENTDATE
      where APPUSER.ID = @APPUSERID
          and APPUSER.USERSID <> SUSER_SID('NT AUTHORITY\ANONYMOUS LOGON');

          update dbo.CHANGEAGENT
          set USERNAME = (select USERNAME from dbo.APPUSER where ID = @APPUSERID)
          where USERNAME =  @OLDUSERNAME;
        end

      if exists(select 1 from dbo.APPUSERTHIRDPARTYAUTH where ID = @APPUSERID)
        update dbo.APPUSERTHIRDPARTYAUTH set
          INVITATIONSTATUSCODE = 3, -- Active

          INVITATIONDATE = @CURRENTDATE,
          CHANGEDBYID = @CHANGEAGENTID,
          DATECHANGED = @CURRENTDATE
        where ID = @APPUSERID;

      else
        insert into dbo.APPUSERTHIRDPARTYAUTH
          (ID, INVITATIONID, INVITATIONSTATUSCODE, INVITATIONDATE, ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED)
        values
          (@APPUSERID, @WSFEDERATIONINVITATIONID, 3, @CURRENTDATE, @CHANGEAGENTID, @CHANGEAGENTID, @CURRENTDATE, @CURRENTDATE);

    end

  select @APPUSERID as APPUSERID;

  return 0;
end