#wip: Sessions Management.

This commit is contained in:
mbruzon 2026-07-14 14:42:33 +02:00
parent ebe451c88a
commit a76e63aa39
16 changed files with 648 additions and 11 deletions

View File

@ -51,8 +51,23 @@
}, },
"AnP_QueuesManager_end" : null, "AnP_QueuesManager_end" : null,
"AnP_DatabasesManager_start" : null,
"AnP_DatabasesManager_end" : null,
"AnP_DispatchesManager_start" : null,
"default_dispatches" : {
"sqlserver" : {
"sessions" : {
"type" : "SessionsSQLServerDispatch",
"database" : "anp"
}
}
},
"AnP_DispatchesManager_end" : null,
"AnP_ControllersManager_start" : null, "AnP_ControllersManager_start" : null,
"default_controllers" : { "default_controllers" : {
"sessions" : "SessionsController",
"ai" : "AIController", "ai" : "AIController",
"clonations_processes" : "CloneController", "clonations_processes" : "CloneController",
"ai_translate" : "AITranslateController" "ai_translate" : "AITranslateController"

View File

@ -2,13 +2,12 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
from typing import Self, Callable from typing import Self, Callable
from AnP.Abstracts.ModelAbstract import ModelAbstract
from AnP.Abstracts.ControllerAbstract import ControllerAbstract from AnP.Abstracts.ControllerAbstract import ControllerAbstract
from AnP.Models.RequestModel import RequestModel from AnP.Models.RequestModel import RequestModel
from AnP.Models.AIResponseModel import AIResponseModel from AnP.Models.AIResponseModel import AIResponseModel
from AnP.Utils.Common import Common from AnP.Utils.Common import Common
class AIController(ControllerAbstract, ModelAbstract): class AIController(ControllerAbstract):
def __analyse_loras(self:Self, def __analyse_loras(self:Self,
iterations:dict[str, int], iterations:dict[str, int],

View File

@ -0,0 +1,26 @@
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
from typing import Self
from AnP.Abstracts.ControllerAbstract import ControllerAbstract
from AnP.Models.RequestModel import RequestModel
class SessionsController(ControllerAbstract):
def get_guest(self:Self, request:RequestModel) -> None:
pass
def login(self:Self, request:RequestModel) -> None:
pass
def logout(self:Self, request:RequestModel) -> None:
pass
def update(self:Self, request:RequestModel) -> None:
pass
def register(self:Self, request:RequestModel) -> None:
pass
def change_password(self:Self, request:RequestModel) -> None:
pass

View File

@ -0,0 +1,75 @@
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
from typing import Self, Any, Optional, Sequence
from AnP.Interfaces.Application.AnPInterface import AnPInterface
from AnP.Abstracts.DispatchAbstract import DispatchAbstract
from AnP.Models.DatabaseResponseModel import DatabaseResponseModel
from AnP.Utils.Common import Common
class SessionsSQLServerDispatch(DispatchAbstract):
def __init__(self:Self, anp:AnPInterface, inputs:Optional[dict[str, Any|None]|Sequence[Any|None]] = None) -> None:
super().__init__(anp, inputs)
self.__database:str = Common.get_value("database", inputs, "anp_sqlserver")
def get_guest(self:Self, session:int|None, ip:str) -> tuple[str, int|None, list[str]]:
response:DatabaseResponseModel = self.anp.databases.execute(
self.__database,
"execute dbo.sessions_login_guest {session}, {ip}, @errors output, @id output",
{"session" : session, "ip" : ip}
)
return response.variables.get("errors"), response.variables.get("id")
def login(self:Self, session:int, nick:str, password:str, ip:str) -> tuple[str, int|None, list[str]]:
response:DatabaseResponseModel = self.anp.databases.execute(
self.__database,
"execute dbo.sessions_login {session}, {nick}, {password}, {ip}, @errors output, @id output",
{"session" : session, "nick" : nick, "password" : password, "ip" : ip}
)
return response.variables.get("errors"), response.variables.get("id")
def logout(self:Self, session:int) -> tuple[str, int|None, list[str]]:
response:DatabaseResponseModel = self.anp.databases.execute(
self.__database,
"execute dbo.sessions_logout {session}, @errors output, @id output",
{"session" : session}
)
return response.variables.get("errors"), response.variables.get("id")
def update(self:Self, session:int, ip:str) -> tuple[str, list[str]]:
response:DatabaseResponseModel = self.anp.databases.execute(
self.__database,
"execute dbo.sessions_update {session}, {ip}, @errors output",
{"session" : session, "ip" : ip}
)
return response.variables.get("errors")
def register(self:Self, session:int, nick:str, password:str, email:str) -> str:
response:DatabaseResponseModel = self.anp.databases.execute(
self.__database,
"execute dbo.sessions_login {session}, {nick}, {password}, {email}, @errors output",
{"session" : session, "nick" : nick, "password" : password, "email" : email}
)
return response.variables.get("errors")
def change_password(self:Self, session:int, current_password:str, new_password:str) -> str:
response:DatabaseResponseModel = self.anp.databases.execute(
self.__database,
"execute dbo.sessions_login {session}, {current_password}, {new_password}, @errors output",
{"session" : session, "current_password" : current_password, "new_password" : new_password}
)
return response.variables.get("errors")

View File

@ -13,12 +13,16 @@ from AnP.Drivers.SeleniumDriver import SeleniumDriver
from AnP.Drivers.SQLiteDriver import SQLiteDriver from AnP.Drivers.SQLiteDriver import SQLiteDriver
from AnP.Controllers.CloneController import CloneController from AnP.Controllers.CloneController import CloneController
from AnP.Controllers.AITranslateController import AITranslateController from AnP.Controllers.AITranslateController import AITranslateController
from AnP.Controllers.SessionsController import SessionsController
from AnP.Dispatches.SQLServer.SessionsSQLServerDispatch import SessionsSQLServerDispatch
inputs:dict[str, dict[str, Any|None]] = { inputs:dict[str, dict[str, Any|None]] = {
"default_models" : { "default_models" : {
"SessionsController" : SessionsController,
"AIController" : AIController, "AIController" : AIController,
"CloneController" : CloneController, "CloneController" : CloneController,
"AITranslateController" : AITranslateController, "AITranslateController" : AITranslateController,
"SessionsSQLServerDispatch" : SessionsSQLServerDispatch,
"WebSocketServerDriver" : WebSocketServerDriver, "WebSocketServerDriver" : WebSocketServerDriver,
"HTTPSocketServerDriver" : HTTPSocketServerDriver, "HTTPSocketServerDriver" : HTTPSocketServerDriver,
"HTTPServerDriver" : HTTPServerDriver, "HTTPServerDriver" : HTTPServerDriver,

View File

@ -55,7 +55,7 @@ create procedure dbo.permissions_tables_create as begin set nocount on
constraint fk_permissions_groups_permission foreign key(permission) references dbo.Permissions(id) constraint fk_permissions_groups_permission foreign key(permission) references dbo.Permissions(id)
on update no action on update no action
on delete no action, on delete no action,
constraint fk_permissions_groups_group foreign key([group]) references dbo.Users(id) constraint fk_permissions_groups_group foreign key([group]) references dbo.Groups(id)
on update no action on update no action
on delete no action, on delete no action,
constraint uq_permissions_groups unique(permission, [group]) with(fillfactor = 90) constraint uq_permissions_groups unique(permission, [group]) with(fillfactor = 90)
@ -107,7 +107,7 @@ create procedure dbo.permissions_tables_create as begin set nocount on
constraint fk__permissions_groups_permission foreign key(permission) references dbo.Permissions(id) constraint fk__permissions_groups_permission foreign key(permission) references dbo.Permissions(id)
on update no action on update no action
on delete no action, on delete no action,
constraint fk__permissions_groups_group foreign key([group]) references dbo.Users(id) constraint fk__permissions_groups_group foreign key([group]) references dbo.Groups(id)
on update no action on update no action
on delete no action on delete no action
) )

View File

@ -14,6 +14,7 @@ create procedure dbo.common_tables_fill as begin set nocount on
declare @guest_user_id integer = (select top 1 id from dbo.Users where nick = 'guest') declare @guest_user_id integer = (select top 1 id from dbo.Users where nick = 'guest')
declare @guest_group_id integer = (select top 1 id from dbo.Groups where [name] = 'guest' and date_out is null) declare @guest_group_id integer = (select top 1 id from dbo.Groups where [name] = 'guest' and date_out is null)
declare @root_group_id integer = (select top 1 id from dbo.Groups where [name] = 'root' and date_out is null) declare @root_group_id integer = (select top 1 id from dbo.Groups where [name] = 'root' and date_out is null)
declare @user_permissions_id integer = (select top 1 id from dbo.Permissions where [name] = 'user' and date_out is null)
declare @guest_permissions_id integer = (select top 1 id from dbo.Permissions where [name] = 'guest' and date_out is null) declare @guest_permissions_id integer = (select top 1 id from dbo.Permissions where [name] = 'guest' and date_out is null)
declare @administrator_permissions_id integer = (select top 1 id from dbo.Permissions where [name] = 'administrator' and date_out is null) declare @administrator_permissions_id integer = (select top 1 id from dbo.Permissions where [name] = 'administrator' and date_out is null)
declare @user_group_id integer = (select top 1 id from dbo.Groups where [name] = 'users' and date_out is null) declare @user_group_id integer = (select top 1 id from dbo.Groups where [name] = 'users' and date_out is null)
@ -75,8 +76,40 @@ create procedure dbo.common_tables_fill as begin set nocount on
delete from dbo._Ips where [session] != @machine delete from dbo._Ips where [session] != @machine
end end
execute dbo.users_tables_upgrade if (select top 1 0 from information_schema.table_constraints where
execute dbo.ips_tables_upgrade table_catalog = db_name() and
table_name = 'Users' and
constraint_name = 'fk_users_session'
) is null alter table dbo.Users add constraint fk_users_session foreign key([session]) references dbo.Sessions(id)
on update no action
on delete no action
if (select top 1 0 from information_schema.table_constraints where
table_catalog = db_name() and
table_name = '_Users' and
constraint_name = 'fk__users_session'
) is null alter table dbo._Users add constraint fk__users_session foreign key([session]) references dbo.Sessions(id)
on update no action
on delete no action
if (select top 1 0 from information_schema.table_constraints where
table_catalog = db_name() and
table_name = 'Ips' and
constraint_name = 'fk_ips_session'
) is null alter table dbo.Ips add constraint fk_ips_session foreign key([session]) references dbo.Sessions(id)
on update no action
on delete no action
if (select top 1 0 from information_schema.table_constraints where
table_catalog = db_name() and
table_name = '_Ips' and
constraint_name = 'fk__ips_session'
) is null alter table dbo._Ips add constraint fk__ips_session foreign key([session]) references dbo.Sessions(id)
on update no action
on delete no action
-- execute dbo.users_tables_upgrade
-- execute dbo.ips_tables_upgrade
end end
@ -134,9 +167,14 @@ create procedure dbo.common_tables_fill as begin set nocount on
(@procedure, @machine, 'users', 1) (@procedure, @machine, 'users', 1)
set @user_group_id = scope_identity() set @user_group_id = scope_identity()
end end
if (select top 1 0 from dbo.PermissionsGroups where permission = @guest_permissions_id and [group] = @user_group_id) is null if @user_permissions_id is null begin
insert into dbo.Permissions([procedure], [session], [name], [description]) values
(@procedure, @machine, 'user', 'User permissions')
set @user_permissions_id = scope_identity()
end
if (select top 1 0 from dbo.PermissionsGroups where permission = @user_permissions_id and [group] = @user_group_id) is null
insert into dbo.PermissionsGroups([procedure], [session], permission, [group]) values insert into dbo.PermissionsGroups([procedure], [session], permission, [group]) values
(@procedure, @machine, @guest_permissions_id, @user_group_id) (@procedure, @machine, @user_permissions_id, @user_group_id)
drop table #Settings drop table #Settings

View File

@ -1,5 +1,18 @@
use AnP use AnP
if object_id(N'dbo.bw', N'FN') is not null drop function dbo.bw
go
create function dbo.bw(
@number bigint,
@bits smallint
) returns bigint begin
return (case
when @bits > 0 then @number * power(cast(2 as bigint), @bits)
when @bits < 0 then @number / power(cast(2 as bigint), -@bits)
else @number end)
end
go
if object_id(N'dbo.where_set', N'FN') is not null drop function dbo.where_set if object_id(N'dbo.where_set', N'FN') is not null drop function dbo.where_set
go go
create function dbo.where_set( create function dbo.where_set(
@ -22,7 +35,7 @@ create procedure tables_list(
@pages integer output, @pages integer output,
@items integer output, @items integer output,
@results integer output @results integer output
) as begin set nocount on ) with execute as owner as begin set nocount on
declare @item_from integer declare @item_from integer
declare @query nvarchar(max) declare @query nvarchar(max)
@ -45,7 +58,7 @@ create procedure tables_list(
set @query = ( set @query = (
N'select * from ' + @view + @where_string + N'select * from ' + @view + @where_string +
' order by ' + (case when isnull(@order_by, '') = '' then 'id asc' else @order_by end) + ' order by ' + (case when isnull(@order_by, '') = '' then 'id desc' else @order_by end) +
' offset ' + convert(varchar(14), (@page - 1) * @items_per_page) + ' rows fetch next ' + convert(varchar(14), @items_per_page) + ' rows only' ' offset ' + convert(varchar(14), (@page - 1) * @items_per_page) + ' rows fetch next ' + convert(varchar(14), @items_per_page) + ' rows only'
) )
@ -53,4 +66,15 @@ create procedure tables_list(
set @results = @@rowcount set @results = @@rowcount
end end
go
if object_id(N'dbo.json_set', N'FN') is not null drop function dbo.json_set
go
create function dbo.json_set(
@path varchar(max),
@key varchar(max),
@value varchar(max)
) returns varchar(max) begin
return json_modify(@path, '$.' + @key, @value)
end
go go

View File

@ -0,0 +1,456 @@
use AnP
if object_id(N'dbo.SessionsPermissionsView', N'V') is not null drop view dbo.SessionsPermissionsView
go
create view dbo.SessionsPermissionsView as
select distinct
sessions.id as [session],
permissions.name as [permission]
from dbo.SessionsActived sessions
join dbo.Users users on sessions.[user] = users.id
join dbo.Ips ips on sessions.[ip] = ips.id
join dbo.GroupsUsers groups_users on groups_users.belongs = 1 and users.id = groups_users.[user]
join dbo.GroupsIps groups_ips on groups_ips.belongs = 1 and ips.id = groups_ips.[ip]
join dbo.Groups groups on groups_users.[group] = groups.id or groups_ips.[group] = groups.id
join dbo.PermissionsGroups permissions_groups on permissions_groups.belongs = 1 and groups.id = permissions_groups.[group]
join dbo.Permissions permissions on permissions_groups.[permission] = permissions.id
where
users.date_out is null and
ips.date_out is null and
groups.date_out is null and
groups_users.date_out is null and
groups_ips.date_out is null and
permissions.date_out is null and
permissions_groups.date_out is null
go
if object_id(N'dbo.sessions_validate', N'FN') is not null drop function dbo.sessions_validate
go
create function dbo.sessions_validate(
@session integer,
@permissions varchar(max) = ''
) returns integer begin
declare @error integer = (case
when @session is null then dbo.bw(1, 1)
when @session < 1 then dbo.bw(1, 2)
else isnull((
select 0 from dbo.SessionsActived where id = @session
), isnull((
select dbo.bw(1, 4) from dbo.Sessions where id = @session
), dbo.bw(1, 3))) end)
if @error = 0 and @permissions != '' and (
select top 1 0 from dbo.SessionsPermissionsView where [session] = @session and [permission] in (
select [value] from string_split(@permissions, ',')
)
) is null
set @error = dbo.bw(1, 5)
return @error
end
go
if object_id(N'dbo.sessions_nick_validate', N'FN') is not null drop function dbo.sessions_nick_validate
go
create function dbo.sessions_nick_validate(
@nick varchar(32)
) returns integer begin
return (case
when @nick is null then dbo.bw(1, 1)
when @nick = '' then dbo.bw(1, 2)
when len(@nick) > 32 then dbo.bw(1, 3)
when @nick like '%[^a-zA-Z0-9]%' then dbo.bw(1, 4)
when @nick like '[^a-zA-Z]%' then dbo.bw(1, 5)
else 0 end)
end
go
if object_id(N'dbo.sessions_password_validate', N'FN') is not null drop function dbo.sessions_password_validate
go
create function dbo.sessions_password_validate(
@password varchar(256)
) returns integer begin
return (case
when @password is null then dbo.bw(1, 1)
when @password = '' then dbo.bw(1, 2)
when len(@password) > 256 then dbo.bw(1, 3)
else (
(case when @password collate Latin1_General_100_CS_AS_SC_UTF8 not like '%[a-z]%' then dbo.bw(1, 4) else 0 end) |
(case when @password collate Latin1_General_100_CS_AS_SC_UTF8 not like '%[A-Z]%' then dbo.bw(1, 5) else 0 end) |
(case when @password not like '%[0-9]%' then dbo.bw(1, 6) else 0 end) |
(case when @password not like '%[^a-zA-Z0-9]%' then dbo.bw(1, 7) else 0 end) |
0) end)
end
go
if object_id(N'dbo.ips_set', N'P') is not null drop procedure dbo.ips_set
go
create procedure dbo.ips_set(
@procedure integer,
@session integer,
@address varchar(39),
@error integer output,
@id integer output
) as begin set nocount on
set @error = (case
when @address is null then dbo.bw(1, 1)
when @address = '' then dbo.bw(1, 2)
when len(@address) > 39 then dbo.bw(1, 3)
when @address not like '[0-9a-fA-F:.]%' then dbo.bw(1, 4)
when not ((
@address like '%._%._%._%' and
@address not like '%[^0-9.]%' and
len(@address) - len(replace(@address, '.', '')) = 3 and
parsename(@address, 1) between 0 and 255 and
parsename(@address, 2) between 0 and 255 and
parsename(@address, 3) between 0 and 255 and
parsename(@address, 4) between 0 and 255
) or (
@address not like '%[^0-9a-fA-F:]%' and
@address like '%:%' and
@address not like '%:::%' and
@address not like '%[0-9a-fA-F][0-9a-fA-F][0-9a-fA-F][0-9a-fA-F][0-9a-fA-F]%' and
len(@address) - len(replace(@address, ':', '')) between 2 and 7
)) then dbo.bw(1, 5)
else 0 end)
if @error = 0 begin
insert into dbo.Ips([procedure], [session], [address]) values (@procedure, @session, @address)
set @id = scope_identity()
end
end
go
if object_id(N'dbo.sessions_register', N'P') is not null drop procedure dbo.sessions_register
go
create procedure dbo.sessions_register(
@session integer,
@nick varchar(32),
@password varchar(256),
@email varchar(256),
@errors varchar(512) output
) as begin set nocount on
declare @database varchar(64) = db_name()
declare @procedure_id integer
declare @parameters varchar(max) = '{' +
'"session":' + convert(varchar(14), @session) + ',' +
'"nick":"' + @nick + '",' +
-- '"password":"' + @password + '",' +
'"email":"' + @email + '",' +
'"id":null' +
'}'
declare @error_code integer = 0
declare @password_hash varbinary(64)
declare @id integer = null
execute dbo.procedure_get_id @database, 'sessions_register', @procedure_id output
set @errors = ''
begin try
declare @nick_error integer = dbo.sessions_nick_validate(@nick)
declare @password_error integer = dbo.sessions_password_validate(@password)
set @error_code = (
dbo.bw(dbo.sessions_validate(@session, 'guest'), 1) |
dbo.bw(@nick_error, 7) |
dbo.bw(@password_error, 14) |
0)
if @error_code = 0 begin
if (select top 1 0 from dbo.Users where date_out is null and nick = @nick) is not null
set @error_code = @error_code | dbo.bw(1, 13)
if @error_code = 0 begin
insert into dbo.Users(nick, password) values
(@nick, hashbytes(dbo.settings_get('password_hash_algorithm', null, 'SHA2_512'), @password))
set @id = scope_identity()
set @parameters = dbo.json_set(@parameters, 'id', @id)
end
end
end try
begin catch
set @error_code = @error_code | dbo.bw(1, 0)
execute dbo.exceptions_set @procedure_id, @session, @parameters, @errors
end catch
execute dbo.logs_set @procedure_id, @session, @parameters, @errors, 1
end
go
if object_id(N'dbo.sessions_login_guest', N'P') is not null drop procedure dbo.sessions_login_guest
go
create procedure dbo.sessions_login_guest(
@session integer,
@ip varchar(39),
@errors varchar(512) output,
@id integer output
) as begin set nocount on
declare @database varchar(64) = db_name()
declare @procedure_id integer
declare @machine integer = dbo.machine_session_get()
declare @parameters varchar(max) = '{"ip":"' + @ip + '","id":null}'
declare @error_code integer = 0
set @errors = ''
execute dbo.procedure_get_id @database, 'sessions_login_guest', @procedure_id output
begin try
declare @ip_id integer
declare @ip_error integer
execute dbo.ips_set @procedure_id, @session, @ip, @ip_error output, @ip_id output
set @error_code = (
(case when @session is null then 0 else dbo.bw(1, 1) end) |
dbo.bw(@ip_error, 2) |
0)
if @error_code = 0 begin
insert into dbo.SessionsActived([procedure], [user], [ip]) values (@procedure_id, @machine, @ip_id)
set @id = scope_identity()
set @parameters = dbo.json_set(@parameters, 'id', @id)
end
end try
begin catch
set @error_code = @errors | dbo.bw(1, 0)
execute dbo.exceptions_set @procedure_id, @machine, @parameters, @errors
end catch
set @errors = ''
select [permission] from dbo.SessionsPermissionsView where [session] = @id
execute dbo.logs_set @procedure_id, @machine, @parameters, @errors, 1
end
go
if object_id(N'dbo.sessions_login', N'P') is not null drop procedure dbo.sessions_login
go
create procedure dbo.sessions_login(
@session integer,
@user varchar(32),
@password varchar(256),
@ip varchar(39),
@errors varchar(512) output,
@id integer output
) as begin set nocount on
declare @database varchar(64) = db_name()
declare @procedure_id integer
declare @error_code integer = 0
declare @parameters varchar(max) = '{' +
'"user":"' + @user + '"' +
-- ',"password":"' + @password + '"' +
',"ip":"' + @ip + '",' +
'"id":null' +
'}'
set @errors = ''
execute dbo.procedure_get_id @database, 'sessions_login', @procedure_id output
begin try
declare @ip_id integer
declare @ip_error integer
execute dbo.ips_set @procedure_id, @session, @ip, @ip_error output, @ip_id output
set @error_code = (
dbo.bw(dbo.sessions_validate(@session, 'guest'), 1) |
dbo.bw(dbo.sessions_nick_validate(@user), 7) |
dbo.bw(dbo.sessions_password_validate(@password), 15) |
dbo.bw(@ip_error, 23) |
0)
if @error_code = 0 begin
declare @user_id integer = (select top 1 id from dbo.Users where nick = @user)
set @error_code = @error_code | (select top 1 (
(case when date_out is null then 0 else dbo.bw(1, 13) end) |
(case when password = hashbytes(dbo.settings_get('password_hash_algorithm', null, 'SHA2_512'), @password) then 0 else dbo.bw(1, 14) end) |
0) from dbo.Users where id = @user_id)
if @error_code = 0 begin
insert into dbo.SessionsActived([procedure], [user], [ip]) values(@procedure_id, @user_id, @ip_id)
set @id = scope_identity()
set @parameters = dbo.json_set(@parameters, 'id', @id)
end
end
end try
begin catch
set @error_code = @errors | dbo.bw(1, 0)
execute dbo.exceptions_set @procedure_id, @session, @parameters, @errors
end catch
execute dbo.logs_set @procedure_id, @session, @parameters, @errors, 1
end
go
if object_id(N'dbo.sessions_logout', N'P') is not null drop procedure dbo.sessions_logout
go
create procedure dbo.sessions_logout(
@session integer,
@errors varchar(512) output,
@id integer output
) as begin set nocount on
declare @database varchar(64) = db_name()
declare @procedure_id integer
declare @error_code integer = 0
declare @parameters varchar(max) = '{' +
'"session":' + convert(varchar(14), @session) + ',' +
'"id":null' +
'}'
set @errors = ''
execute dbo.procedure_get_id @database, 'sessions_logout', @procedure_id output
begin try
set @error_code = (
dbo.bw(dbo.sessions_validate(@session, ''), 1) |
0)
if @error_code = 0 begin
insert into dbo.SessionsActived([procedure], [user], [ip]) select @procedure_id, [user], [ip] from dbo.SessionsActived where id = @session
set @id = scope_identity()
delete from dbo.SessionsActived where id = @session
set @parameters = dbo.json_set(@parameters, 'id', @id)
end
end try
begin catch
set @error_code = @errors | dbo.bw(1, 0)
execute dbo.exceptions_set @procedure_id, @session, @parameters, @errors
end catch
execute dbo.logs_set @procedure_id, @session, @parameters, @errors, 1
end
go
if object_id(N'dbo.sessions_update', N'P') is not null drop procedure dbo.sessions_update
go
create procedure dbo.sessions_update(
@session integer,
@ip varchar(39),
@errors varchar(512) output,
@id integer output
) as begin set nocount on
declare @database varchar(64) = db_name()
declare @procedure_id integer
declare @error_code integer = 0
declare @parameters varchar(max) = '{' +
'"session":' + convert(varchar(14), @session) + ',' +
'"ip":"' + @ip + '",' +
'"id":null' +
'}'
set @errors = ''
execute dbo.procedure_get_id @database, 'sessions_update', @procedure_id output
begin try
declare @ip_id integer
declare @ip_error integer
execute dbo.ips_set @procedure_id, @session, @ip, @ip_error output, @ip_id output
set @error_code = (
dbo.bw(dbo.sessions_validate(@session, ''), 1) |
dbo.bw(@ip_error, 2) |
0)
if @error_code = 0
update dbo.SessionsActived set [ip] = @ip_id, date_last = getdate() where id = @session
end try
begin catch
set @error_code = @errors | dbo.bw(1, 0)
execute dbo.exceptions_set @procedure_id, @session, @parameters, @errors
end catch
execute dbo.logs_set @procedure_id, @session, @parameters, @errors, 8
end
go
if object_id(N'dbo.sessions_autoclose', N'P') is not null drop procedure dbo.sessions_autoclose
go
create procedure dbo.sessions_autoclose as begin set nocount on
delete from dbo.SessionsActived where datediff(second, date_last, getdate()) > timeout
end
go
if object_id(N'dbo.sessions_change_password', N'P') is not null drop procedure dbo.sessions_change_password
go
create procedure dbo.sessions_change_password(
@session integer,
@current_password varchar(256),
@new_password varchar(256),
@errors varchar(512) output
) as begin set nocount on
declare @database varchar(64) = db_name()
declare @procedure_id integer
declare @error_code integer = 0
declare @parameters varchar(max) = '{' +
'"session":' + convert(varchar(14), @session) + ',' +
'"id":null' +
'}'
set @errors = ''
execute dbo.procedure_get_id @database, 'sessions_change_password', @procedure_id output
begin try
set @error_code = (
dbo.bw(dbo.sessions_validate(@session, ''), 1) |
dbo.bw(dbo.sessions_password_validate(@current_password), 6) |
dbo.bw(dbo.sessions_password_validate(@new_password), 15) |
(case when @current_password = @new_password then dbo.bw(1, 23) else 0 end) |
0)
if @error_code = 0 begin
if (
select top 1 0
from dbo.SessionsActived sessions
join dbo.Users users on sessions.[user] = users.id
where
sessions.id = @session and
users.password != hashbytes(dbo.settings_get('password_hash_algorithm', null, 'SHA2_512'), @current_password)
) is null
set @error_code = @error_code | dbo.bw(1, 14)
else
update users
set users.[password] = hashbytes(dbo.settings_get('password_hash_algorithm', null, 'SHA2_512'), @new_password)
from dbo.SessionsActived sessions
join dbo.Users users on sessions.[user] = users.id
where sessions.id = @session
end
end try
begin catch
set @error_code = @errors | dbo.bw(1, 0)
execute dbo.exceptions_set @procedure_id, @session, @parameters, @errors
end catch
execute dbo.logs_set @procedure_id, @session, @parameters, @errors, 1
end
go

View File

@ -12,7 +12,7 @@ if exist Tools\sqlserver.secrets.cmd (
call Tools\sqlserver.secrets.cmd call Tools\sqlserver.secrets.cmd
) )
docker compose ps | findstr "anp-sql-server" >nul || call Tools\dockers.execute.bat docker compose ps | findstr "anp-sql-server" >nul || (call Tools\dockers.execute.bat && sleep 3)
for %%f in (SQLServer\AnP.*.sql) do ( for %%f in (SQLServer\AnP.*.sql) do (
echo %%f echo %%f