Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
P
performance
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
zry
performance
Commits
6a0b283f
Commit
6a0b283f
authored
Dec 07, 2021
by
ruyun.zhang@suvalue.com
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
使用期限授权
parent
cadad92f
Hide whitespace changes
Inline
Side-by-side
Showing
9 changed files
with
209 additions
and
0 deletions
+209
-0
performance/Performance.Api/Middlewares/ExpirationLimitMiddleware.cs
+47
-0
performance/Performance.Api/Middlewares/FunctionLimit.cs
+113
-0
performance/Performance.Api/Middlewares/RequestCultureMiddlewareExtensions.cs
+17
-0
performance/Performance.Api/Performance.Api.csproj
+10
-0
performance/Performance.Api/Program.cs
+1
-0
performance/Performance.Api/Startup.cs
+6
-0
performance/Performance.Api/secret.key
+2
-0
performance/Performance.Api/wwwroot/Performance.Api.xml
+12
-0
performance/Performance.DtoModels/ResponseType.cs
+1
-0
No files found.
performance/Performance.Api/Middlewares/ExpirationLimitMiddleware.cs
0 → 100644
View file @
6a0b283f
using
Microsoft.AspNetCore.Hosting
;
using
Microsoft.AspNetCore.Http
;
using
Microsoft.AspNetCore.Mvc
;
using
Microsoft.Extensions.Caching.Memory
;
using
Performance.DtoModels
;
using
Performance.Infrastructure
;
using
System
;
using
System.IO
;
using
System.Threading.Tasks
;
namespace
Performance.Api
{
/// <summary>
/// 过期限制
/// </summary>
public
class
ExpirationLimitMiddleware
{
private
readonly
RequestDelegate
_next
;
public
ExpirationLimitMiddleware
(
RequestDelegate
next
)
{
_next
=
next
;
}
public
async
Task
Invoke
(
HttpContext
context
)
{
if
(
context
.
Request
.
Path
.
StartsWithSegments
(
"/api/function/limit"
))
{
var
response
=
new
ApiResponse
<
LimitInformation
>(
ResponseType
.
OK
,
FunctionLimit
.
Limit
);
context
.
Response
.
ContentType
=
"application/json"
;
await
context
.
Response
.
WriteAsync
(
JsonHelper
.
Serialize
(
response
));
return
;
}
else
if
(
FunctionLimit
.
Limit
.
ExpirationTime
>
DateTime
.
Now
)
{
await
_next
.
Invoke
(
context
);
return
;
}
else
{
var
response
=
new
ApiResponse
(
ResponseType
.
Expiration
,
$"
{
FunctionLimit
.
Limit
.
Remark
}
,请联系易策商务!"
);
context
.
Response
.
ContentType
=
"application/json"
;
await
context
.
Response
.
WriteAsync
(
JsonHelper
.
Serialize
(
response
));
}
}
}
}
performance/Performance.Api/Middlewares/FunctionLimit.cs
0 → 100644
View file @
6a0b283f
using
System
;
using
System.IO
;
using
System.Security.Cryptography
;
using
System.Text
;
using
XC.RSAUtil
;
namespace
Performance.Api
{
public
class
LimitInformation
{
public
DateTime
ExpirationTime
{
get
;
set
;
}
public
string
Remark
{
get
;
internal
set
;
}
}
public
class
FunctionLimit
{
public
static
LimitInformation
Limit
{
get
;
}
=
new
LimitInformation
();
public
static
void
Init
()
{
var
filePath
=
Path
.
Combine
(
Environment
.
CurrentDirectory
,
"secret.key"
);
if
(!
File
.
Exists
(
filePath
))
{
Limit
.
ExpirationTime
=
DateTime
.
MinValue
;
Limit
.
Remark
=
"授权文件无效;功能受限!"
;
return
;
}
string
content
=
ReadLimitContent
(
filePath
);
if
(
string
.
IsNullOrEmpty
(
content
))
{
Limit
.
ExpirationTime
=
DateTime
.
MinValue
;
Limit
.
Remark
=
"授权文件发生错误;功能受限!"
;
return
;
}
var
timestamp
=
ConvertToExpiration
(
content
);
if
(
timestamp
==
0
)
{
Limit
.
ExpirationTime
=
DateTime
.
MinValue
;
Limit
.
Remark
=
"授权文件无法解析;功能受限!"
;
return
;
}
Limit
.
ExpirationTime
=
(
new
DateTime
(
1970
,
1
,
1
,
8
,
0
,
0
,
DateTimeKind
.
Unspecified
)).
AddSeconds
(
timestamp
);
Limit
.
Remark
=
Limit
.
ExpirationTime
>
DateTime
.
Now
?
"已授权开放使用!"
:
"授权过期,功能受限!"
;
}
private
static
long
ConvertToExpiration
(
string
content
)
{
long
result
=
0
;
try
{
var
bigDataRsa
=
new
RsaPkcs8Util
(
Encoding
.
UTF8
,
""
,
privateKey
,
2048
);
var
timestamp
=
bigDataRsa
.
DecryptBigData
(
content
,
RSAEncryptionPadding
.
Pkcs1
);
long
.
TryParse
(
timestamp
,
out
result
);
return
result
;
}
catch
(
Exception
)
{
}
return
result
;
}
private
static
string
ReadLimitContent
(
string
filePath
)
{
var
content
=
""
;
try
{
using
(
FileStream
stream
=
new
FileStream
(
filePath
,
FileMode
.
Open
))
using
(
StreamReader
reader
=
new
StreamReader
(
stream
))
{
content
=
reader
.
ReadToEnd
();
}
}
catch
(
Exception
)
{
}
return
content
;
}
private
static
string
privateKey
=
@"-----BEGIN PRIVATE KEY-----
MIIEvwIBADANBgkqhkiG9w0BAQEFAASCBKkwggSlAgEAAoIBAQC/XTloNsKshhr/
GC34GSQqKxiojkSWBZ+Xe3SxryqrYjx8yyjdrTgBq8lXOO9xtu+jr3XcFwHhFsq5
iK8qwRZQhinASjOFroeszrn0dbuLMT3ad+pCfdkXKcOwmCifHWLqODn0JXmPnTx5
8F1JD954J1Es8ugyJ6S77T0iPezmHvPgxV0Cn4E7Lg2114LwBgy1Kgb5S/b3pz5P
MQKECPRqK69SRIzUU7Nvw1LrqjK9OF5ZWYdGBlCBpRvbd0RIrgJ3NzAUCrE5t3Y+
KI3UM02FhoGzWM0j8oC/P6GGkNL8bY5JMR2TGWfUiB1UUjT+Y2hCCl0tfZUBWPDu
NVeqB9dxAgMBAAECggEAGOU56LLnFKbFsFYm9NXgfJPqu1L23UWSA5UOE2ekd3Nq
RxnvERfN53m/0dcYX4TbHEJhZOahWfUrHoQHtdo02vj5SYjdtxCDmhmy23jNk0gu
sdNT6J6StY67ZKgG8NxT2ADEmVyeue5MxdhdannkCWGkD+LyDkRWDBTLFT9VKIK4
dV22NdL7uvIYH+dP8fUYm6sM65+fAcPwj5bVPhCI90TjJo93e2/aBtzaMjdrRcfY
r8AaRMuY8m/QDvVhIaurki1JxG+Qwz4gT5eWhI8qUwGsxti92/Mz+B3oT8X+AhP0
tEsRNxu+BrDeb6qM3JpYaR4UbJIFLljVWRFRa67L+QKBgQD1f1eoh6YbMXI9c3Ty
3u5YRawVRG47MtuMDu94PqUKjo57evQEaOvtwPYADR1G1qFDRJbSbTsVhXEH5YaA
SuYdNYBNYJzPkD6Du+gwFqiemolKbMb2bTGtdci4FEZIcHS8u+FaARtAJuUWqtTY
KMqyu95JTcLrHYBnlynWwy+QdwKBgQDHjQVZGIOH2WW6OG7wHHicc7SxjRiBTADk
aIJAM1JJlgTHZ4o9v47DBOPAT7MCcbI8Ln+/kbJgdNMFC3SyPpzNHtvRp48dNXxx
liGtLys8GBaBEDzI0jmXb5nZXLk5DfwZEOQ57T4TbYjuBlwjY/FQl+7HWUKgwEt8
AvPjefb5VwKBgQC+YisQv2HJ5Oa7UTZ4wvoD6sQxGgiCUEaCr3J2xd4n+bX1fLyQ
Tu3oS6R7FbCGpxwYlrCAL8WKQxoNDarpAyzBqiP93da+ARb6AldmM6xAk4e09/a0
VKoZ4yXt24tF0jA1zV5N9l2zunYexgyaNcg8JAWWw39N5msV6ty/eE8CsQKBgQCi
IfI2cbRsrDX7F98LOBbHBzvJBtriMt6GtmMdxpUVNM6tNXMcuIdF7LMfjaHkWnx2
aVFiVP6ZYFITxzsJl9XO00PHFF0zXkG+CD1UeP6n1Opz8r1wbV5drE9UTAIyWSp7
Mz470oadQmH/AyvZlVp8IPXhAqUf9x1dpQiDypTgAQKBgQDLeiwRRG6SxnZDddDK
RNKJaMz1q0GM3KPC4MuM8gPkWBRnrGZ67J3bTpgPYVVFxxyIspDG6miMATfZXnDF
OKst4raozj7kX5ghZRZCI2okvFEipVkBSwPdAB20mx5DENXOtpr2h+V/57AgD8Ua
UGTpnMMY2uONH/H/mMPny8D5LA==
-----END PRIVATE KEY-----"
;
// var pbk = @"-----BEGIN PUBLIC KEY-----
//MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAv105aDbCrIYa/xgt+Bkk
//KisYqI5ElgWfl3t0sa8qq2I8fMso3a04AavJVzjvcbbvo6913BcB4RbKuYivKsEW
//UIYpwEozha6HrM659HW7izE92nfqQn3ZFynDsJgonx1i6jg59CV5j508efBdSQ/e
//eCdRLPLoMieku+09Ij3s5h7z4MVdAp+BOy4NtdeC8AYMtSoG+Uv296c+TzEChAj0
//aiuvUkSM1FOzb8NS66oyvTheWVmHRgZQgaUb23dESK4CdzcwFAqxObd2PiiN1DNN
//hYaBs1jNI/KAvz+hhpDS/G2OSTEdkxln1IgdVFI0/mNoQgpdLX2VAVjw7jVXqgfX
//cQIDAQAB
//-----END PUBLIC KEY-----";
}
}
performance/Performance.Api/Middlewares/RequestCultureMiddlewareExtensions.cs
0 → 100644
View file @
6a0b283f
using
Microsoft.AspNetCore.Builder
;
namespace
Performance.Api
{
public
static
class
RequestCultureMiddlewareExtensions
{
/// <summary>
/// 过期限制
/// </summary>
/// <param name="builder"></param>
/// <returns></returns>
public
static
IApplicationBuilder
UseExpirationLimit
(
this
IApplicationBuilder
builder
)
{
return
builder
.
UseMiddleware
<
ExpirationLimitMiddleware
>();
}
}
}
performance/Performance.Api/Performance.Api.csproj
View file @
6a0b283f
...
...
@@ -22,6 +22,16 @@
<EmbeddedResource Remove="Files\**" />
<None Remove="Files\**" />
</ItemGroup>
<ItemGroup>
<Content Include="secret.key">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>
</ItemGroup>
<ItemGroup>
<PackageReference Include="XC.RSAUtil" Version="1.3.6" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\Performance.DtoModels\Performance.DtoModels.csproj" />
...
...
performance/Performance.Api/Program.cs
View file @
6a0b283f
...
...
@@ -11,6 +11,7 @@ public class Program
{
public
static
void
Main
(
string
[]
args
)
{
FunctionLimit
.
Init
();
var
logger
=
NLogBuilder
.
ConfigureNLog
(
"nlog.config"
).
GetCurrentClassLogger
();
try
{
...
...
performance/Performance.Api/Startup.cs
View file @
6a0b283f
...
...
@@ -5,12 +5,14 @@
using
Microsoft.AspNetCore.Authorization
;
using
Microsoft.AspNetCore.Builder
;
using
Microsoft.AspNetCore.Hosting
;
using
Microsoft.AspNetCore.Http
;
using
Microsoft.AspNetCore.Mvc
;
using
Microsoft.AspNetCore.Mvc.Authorization
;
using
Microsoft.Extensions.Configuration
;
using
Microsoft.Extensions.DependencyInjection
;
using
Microsoft.Extensions.Hosting
;
using
Performance.Api.Configurations
;
using
Performance.DtoModels
;
using
Performance.Infrastructure
;
using
Performance.Services
;
using
System.Globalization
;
...
...
@@ -112,6 +114,9 @@ public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
app
.
UseStatusCodePagesWithReExecute
(
"/error/{0}"
);
}
app
.
UseExpirationLimit
();
app
.
UseRouting
();
app
.
UseAuthentication
();
...
...
@@ -145,4 +150,5 @@ private void JsonOptions(MvcNewtonsoftJsonOptions json)
json
.
SerializerSettings
.
ReferenceLoopHandling
=
Newtonsoft
.
Json
.
ReferenceLoopHandling
.
Ignore
;
}
}
}
performance/Performance.Api/secret.key
0 → 100644
View file @
6a0b283f
kR33WgheMa9iB6StfedFJcNte/VPFijyiMqP1eInuxqwaszl84XN0gaNPZAQjf9+NABj4cctSIKfolpUvEk8cGRRy349ud/cPA4mbY/yHQjBKjYczn2McgB8L+nl7t2SjBNUSSWovAsqYataxy0XXmiLSIi8ehTqwp6qWYHEmw/jnveeS5k381gZSZIiL7oqgkF1pOCYsGB72DreN2uT+Efy1wLz0lW4hIKmIoMK/ROVHYZLTcvpc1qNQODCdp0gqtYGcHUlv9uEcxcQMRrIwc4Mvppt/WNW6Dbg5RaXXDYhow4fLHRUabOK45qhYXhEDbR3oFAEXmodydQs+CaA9w==
\ No newline at end of file
performance/Performance.Api/wwwroot/Performance.Api.xml
View file @
6a0b283f
...
...
@@ -2026,6 +2026,18 @@
<param
name=
"query"
></param>
<returns></returns>
</member>
<member
name=
"T:Performance.Api.ExpirationLimitMiddleware"
>
<summary>
过期限制
</summary>
</member>
<member
name=
"M:Performance.Api.RequestCultureMiddlewareExtensions.UseExpirationLimit(Microsoft.AspNetCore.Builder.IApplicationBuilder)"
>
<summary>
过期限制
</summary>
<param
name=
"builder"
></param>
<returns></returns>
</member>
<member
name=
"M:Performance.Api.ClaimService.GetUserId"
>
<summary>
获取当前请求登录ID
...
...
performance/Performance.DtoModels/ResponseType.cs
View file @
6a0b283f
...
...
@@ -15,5 +15,6 @@ public enum ResponseType
Disable
=
7
,
TooManyRequests
=
8
,
Warning
=
9
,
Expiration
=
99
,
}
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment