USP_VALIDATEPROXYUSER
Parameters
Parameter | Parameter Type | Mode | Description |
---|---|---|---|
@CUSTOMAUTHENTICATIONUSERID | nvarchar(255) | IN | |
@PERSONALACCESSTOKEN | nvarchar(4000) | IN | |
@CHANGEAGENTID | uniqueidentifier | IN |
Definition
Copy
CREATE procedure dbo.USP_VALIDATEPROXYUSER
(
@CUSTOMAUTHENTICATIONUSERID nvarchar(255) = null,
@PERSONALACCESSTOKEN nvarchar(4000) = null,
@CHANGEAGENTID uniqueidentifier = null
)
as
begin
set nocount on;
if @CHANGEAGENTID is null
exec dbo.USP_CHANGEAGENT_GETORCREATECHANGEAGENT @CHANGEAGENTID output;
declare @CURRENTDATE datetime;
set @CURRENTDATE = getdate();
declare @ID uniqueidentifier = null;
declare @INVALIDLOGINATTEMPTS int = 0;
declare @USERNAME nvarchar(128) = null;
declare @PERSONALACCESSTOKENIDS table (PERSONALACCESSTOKENID uniqueidentifier);
declare @TOOMANYINVALIDATTEMPTREVOKECODEID uniqueidentifier = 'B24DC45C-18BC-4721-A60E-D8FD4D7F0C0E';
declare @DETAILS nvarchar(250);
/*
Condition to validate proxy user creds
--CUSTOM_AUTHENTICATION_USERID and PAT should match
--App user should be active
--PAT should be enabled
--Expiration date should be greater than equal to current date
--Invalid login attempts should be less than 5
--App user should be a proxy user
*/
select
@ID = APPUSER.ID,
@USERNAME = USERNAME
from
dbo.APPUSER
inner join dbo.PERSONALACCESSTOKEN on APPUSER.ID = PERSONALACCESSTOKEN.PROXYUSERID
where
APPUSER.[CUSTOM_AUTHENTICATION_USERID] = @CUSTOMAUTHENTICATIONUSERID and
PERSONALACCESSTOKEN.[TOKEN] = @PERSONALACCESSTOKEN and
PERSONALACCESSTOKEN.[ENABLED] = 1 and
APPUSER.[ISACTIVE] = 1 and
APPUSER.[INVALIDLOGINATTEMPTS] < 5 and
PERSONALACCESSTOKEN.[EXPIRATIONDATE] >= @CURRENTDATE and
APPUSER.[ISPROXYUSER] = 1;
if @ID is not null
begin
--reset the counter for invalid attempts to zero once validated.
update dbo.APPUSER set
[INVALIDLOGINATTEMPTS] = 0,
[CHANGEDBYID] = @CHANGEAGENTID,
[DATECHANGED] = @CURRENTDATE
where [ID] = @ID and
[INVALIDLOGINATTEMPTS] > 0;
end
else
begin
--Set invalid login counter and and isactive as per invalidloginattempts value
update dbo.APPUSER set
INVALIDLOGINATTEMPTS = case when INVALIDLOGINATTEMPTS < 5 then INVALIDLOGINATTEMPTS + 1 else 5 end,
ISACTIVE = case when INVALIDLOGINATTEMPTS >= 4 then 0 else ISACTIVE end,
CHANGEDBYID = @CHANGEAGENTID,
DATECHANGED = @CURRENTDATE
where CUSTOM_AUTHENTICATION_USERID = @CUSTOMAUTHENTICATIONUSERID;
set @DETAILS = 'Invalid credentials for proxy user-'+ @CUSTOMAUTHENTICATIONUSERID +' caused token deactivation.';
-- Insert all enabled personal token ids into a table variable
insert into @PERSONALACCESSTOKENIDS (PERSONALACCESSTOKENID)
select
P.ID
from dbo.PERSONALACCESSTOKEN P
inner join dbo.APPUSER on APPUSER.ID = P.PROXYUSERID
where APPUSER.INVALIDLOGINATTEMPTS >= 5
and APPUSER.CUSTOM_AUTHENTICATION_USERID = @CUSTOMAUTHENTICATIONUSERID
and P.[ENABLED] = 1;
if exists(select 1 from @PERSONALACCESSTOKENIDS)
begin
update P set
P.[ENABLED] = 0,
P.CHANGEDBYID = @CHANGEAGENTID,
P.DATECHANGED = @CURRENTDATE
from dbo.PERSONALACCESSTOKEN P
inner join @PERSONALACCESSTOKENIDS T on T.PERSONALACCESSTOKENID = P.ID
where P.[ENABLED] <> 0;
if @@ROWCOUNT > 0
begin
insert into dbo.PERSONALACCESSTOKENREVOKEDETAIL (ID, PERSONALACCESSTOKENREVOKECODEID, DETAILS, ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED)
Select T.PERSONALACCESSTOKENID, @TOOMANYINVALIDATTEMPTREVOKECODEID, @DETAILS, @CHANGEAGENTID, @CHANGEAGENTID, @CURRENTDATE, @CURRENTDATE
from @PERSONALACCESSTOKENIDS T;
end
end
end
select @USERNAME;
end