Showing preview only (9,941K chars total). Download the full file or copy to clipboard to get everything.
Repository: jobmission/oauth2-server
Branch: master
Commit: 77397aa19fe9
Files: 251
Total size: 9.4 MB
Directory structure:
gitextract_9_3w74ca/
├── .editorconfig
├── .gitattributes
├── .github/
│ ├── dependabot.yml
│ └── workflows/
│ └── maven.yml
├── .gitignore
├── LICENSE
├── README.md
├── maven-version-rules.xml
├── pom.xml
└── src/
├── main/
│ ├── java/
│ │ └── com/
│ │ └── revengemission/
│ │ └── sso/
│ │ └── oauth2/
│ │ └── server/
│ │ ├── ApplicationStartedEventListener.java
│ │ ├── Oauth2ServerApplication.java
│ │ ├── ServerExceptionHandler.java
│ │ ├── WebRequestLogAspect.java
│ │ ├── config/
│ │ │ ├── AuthorizationServerConfig.java
│ │ │ ├── CachesEnum.java
│ │ │ ├── CaffeineCacheConfiguration.java
│ │ │ ├── CustomAccessDeniedHandler.java
│ │ │ ├── CustomAuthenticationFailureHandler.java
│ │ │ ├── CustomAuthenticationProvider.java
│ │ │ ├── CustomAuthenticationSuccessHandler.java
│ │ │ ├── CustomCorsConfiguration.java
│ │ │ ├── CustomWebAuthenticationDetails.java
│ │ │ ├── DefaultSecurityConfig.java
│ │ │ ├── DeviceClientAuthenticationConverter.java
│ │ │ ├── DeviceClientAuthenticationProvider.java
│ │ │ ├── DeviceClientAuthenticationToken.java
│ │ │ ├── FederatedIdentityAuthenticationSuccessHandler.java
│ │ │ ├── JdbcClientRegistrationRepository.java
│ │ │ ├── SmsCodeTokenGranter.java
│ │ │ ├── TokenCustomizerConfig.java
│ │ │ └── WeChatMiniProgramTokenGranter.java
│ │ ├── controller/
│ │ │ ├── AccessConfirmationController.java
│ │ │ ├── CaptchaController.java
│ │ │ ├── ManageClientController.java
│ │ │ ├── ManageUserController.java
│ │ │ ├── ProfileController.java
│ │ │ └── SignInAndUpController.java
│ │ ├── domain/
│ │ │ ├── AlreadyExistsException.java
│ │ │ ├── AlreadyExpiredException.java
│ │ │ ├── BaseDomain.java
│ │ │ ├── EntityNotFoundException.java
│ │ │ ├── GenderEnum.java
│ │ │ ├── GlobalConstant.java
│ │ │ ├── JsonObjects.java
│ │ │ ├── LoginHistory.java
│ │ │ ├── NotImplementException.java
│ │ │ ├── OAuth2Exception.java
│ │ │ ├── OauthClient.java
│ │ │ ├── ParameterException.java
│ │ │ ├── ResponseResult.java
│ │ │ ├── Role.java
│ │ │ ├── RoleEnum.java
│ │ │ ├── ScopeDefinition.java
│ │ │ ├── UserAccount.java
│ │ │ ├── UserInfo.java
│ │ │ └── VerificationCodeException.java
│ │ ├── jose/
│ │ │ ├── Jwks.java
│ │ │ └── KeyGeneratorUtils.java
│ │ ├── mapper/
│ │ │ ├── BaseMapper.java
│ │ │ ├── LoginHistoryMapper.java
│ │ │ ├── OauthClientMapper.java
│ │ │ ├── RoleMapper.java
│ │ │ ├── ScopeDefinitionMapper.java
│ │ │ └── UserAccountMapper.java
│ │ ├── persistence/
│ │ │ ├── entity/
│ │ │ │ ├── BaseEntity.java
│ │ │ │ ├── LoginHistoryEntity.java
│ │ │ │ ├── Oauth2AuthorizationConsent.java
│ │ │ │ ├── OauthClientEntity.java
│ │ │ │ ├── RoleEntity.java
│ │ │ │ ├── ScopeDefinitionEntity.java
│ │ │ │ ├── ThirdPartyAccountEntity.java
│ │ │ │ └── UserAccountEntity.java
│ │ │ └── repository/
│ │ │ ├── LoginHistoryRepository.java
│ │ │ ├── OauthClientRepository.java
│ │ │ ├── RoleRepository.java
│ │ │ ├── ScopeDefinitionRepository.java
│ │ │ ├── ThirdPartyAccountRepository.java
│ │ │ └── UserAccountRepository.java
│ │ ├── schedule/
│ │ │ └── Task.java
│ │ ├── service/
│ │ │ ├── CaptchaService.java
│ │ │ ├── CommonServiceInterface.java
│ │ │ ├── LoginHistoryService.java
│ │ │ ├── OauthClientService.java
│ │ │ ├── RoleService.java
│ │ │ ├── ScopeDefinitionService.java
│ │ │ ├── UserAccountService.java
│ │ │ └── impl/
│ │ │ ├── CaptchaServiceImpl.java
│ │ │ ├── ClientDetailsServiceImpl.java
│ │ │ ├── LoginHistoryServiceImpl.java
│ │ │ ├── OauthClientServiceImpl.java
│ │ │ ├── OidcUserInfoService.java
│ │ │ ├── RegisteredClientRepositoryImpl.java
│ │ │ ├── RoleServiceImpl.java
│ │ │ ├── ScopeDefinitionServiceImpl.java
│ │ │ ├── UserAccountServiceImpl.java
│ │ │ └── UserDetailsServiceImpl.java
│ │ └── utils/
│ │ ├── BigIntegerUtils.java
│ │ ├── CheckPasswordStrength.java
│ │ ├── ClientIpUtil.java
│ │ ├── DateUtil.java
│ │ └── JsonUtil.java
│ └── resources/
│ ├── application.properties
│ ├── db/
│ │ └── changelog/
│ │ ├── db.changelog-master.xml
│ │ ├── login_history_entity_create.xml
│ │ ├── oauth2_authorization_consent_create.xml
│ │ ├── oauth2_authorization_create.xml
│ │ ├── oauth_client_entity_create.xml
│ │ ├── oauth_client_entity_init.xml
│ │ ├── role_entity_create.xml
│ │ ├── role_entity_init.xml
│ │ ├── scope_definition_entity_create.xml
│ │ ├── scope_definition_entity_init.xml
│ │ ├── third_pargy_entity_create.xml
│ │ ├── third_party_role_entity_create.xml
│ │ ├── user_account_entity_create.xml
│ │ ├── user_account_entity_init.xml
│ │ ├── user_account_role_entity_create.xml
│ │ └── user_account_role_entity_init.xml
│ ├── messages.properties
│ ├── static/
│ │ └── assets/
│ │ ├── bootstrap/
│ │ │ ├── css/
│ │ │ │ ├── bootstrap-grid.css
│ │ │ │ ├── bootstrap-grid.rtl.css
│ │ │ │ ├── bootstrap-reboot.css
│ │ │ │ ├── bootstrap-reboot.rtl.css
│ │ │ │ ├── bootstrap-utilities.css
│ │ │ │ ├── bootstrap-utilities.rtl.css
│ │ │ │ ├── bootstrap.css
│ │ │ │ └── bootstrap.rtl.css
│ │ │ └── js/
│ │ │ ├── bootstrap.bundle.js
│ │ │ ├── bootstrap.esm.js
│ │ │ └── bootstrap.js
│ │ ├── bootstrap-icons/
│ │ │ ├── bootstrap-icons.css
│ │ │ ├── bootstrap-icons.json
│ │ │ └── bootstrap-icons.scss
│ │ ├── bootstrap-table/
│ │ │ ├── bootstrap-table-locale-all.js
│ │ │ ├── bootstrap-table-vue.esm.js
│ │ │ ├── bootstrap-table-vue.js
│ │ │ ├── bootstrap-table-vue.umd.js
│ │ │ ├── bootstrap-table.css
│ │ │ ├── bootstrap-table.js
│ │ │ ├── extensions/
│ │ │ │ ├── addrbar/
│ │ │ │ │ └── bootstrap-table-addrbar.js
│ │ │ │ ├── auto-refresh/
│ │ │ │ │ └── bootstrap-table-auto-refresh.js
│ │ │ │ ├── cookie/
│ │ │ │ │ └── bootstrap-table-cookie.js
│ │ │ │ ├── copy-rows/
│ │ │ │ │ └── bootstrap-table-copy-rows.js
│ │ │ │ ├── custom-view/
│ │ │ │ │ └── bootstrap-table-custom-view.js
│ │ │ │ ├── defer-url/
│ │ │ │ │ └── bootstrap-table-defer-url.js
│ │ │ │ ├── editable/
│ │ │ │ │ └── bootstrap-table-editable.js
│ │ │ │ ├── export/
│ │ │ │ │ └── bootstrap-table-export.js
│ │ │ │ ├── filter-control/
│ │ │ │ │ ├── bootstrap-table-filter-control.css
│ │ │ │ │ ├── bootstrap-table-filter-control.js
│ │ │ │ │ └── utils.js
│ │ │ │ ├── fixed-columns/
│ │ │ │ │ ├── bootstrap-table-fixed-columns.css
│ │ │ │ │ └── bootstrap-table-fixed-columns.js
│ │ │ │ ├── group-by-v2/
│ │ │ │ │ ├── bootstrap-table-group-by.css
│ │ │ │ │ └── bootstrap-table-group-by.js
│ │ │ │ ├── i18n-enhance/
│ │ │ │ │ └── bootstrap-table-i18n-enhance.js
│ │ │ │ ├── key-events/
│ │ │ │ │ └── bootstrap-table-key-events.js
│ │ │ │ ├── mobile/
│ │ │ │ │ └── bootstrap-table-mobile.js
│ │ │ │ ├── multiple-sort/
│ │ │ │ │ └── bootstrap-table-multiple-sort.js
│ │ │ │ ├── page-jump-to/
│ │ │ │ │ ├── bootstrap-table-page-jump-to.css
│ │ │ │ │ └── bootstrap-table-page-jump-to.js
│ │ │ │ ├── pipeline/
│ │ │ │ │ └── bootstrap-table-pipeline.js
│ │ │ │ ├── print/
│ │ │ │ │ └── bootstrap-table-print.js
│ │ │ │ ├── reorder-columns/
│ │ │ │ │ └── bootstrap-table-reorder-columns.js
│ │ │ │ ├── reorder-rows/
│ │ │ │ │ ├── bootstrap-table-reorder-rows.css
│ │ │ │ │ └── bootstrap-table-reorder-rows.js
│ │ │ │ ├── resizable/
│ │ │ │ │ └── bootstrap-table-resizable.js
│ │ │ │ ├── sticky-header/
│ │ │ │ │ ├── bootstrap-table-sticky-header.css
│ │ │ │ │ └── bootstrap-table-sticky-header.js
│ │ │ │ ├── toolbar/
│ │ │ │ │ └── bootstrap-table-toolbar.js
│ │ │ │ └── treegrid/
│ │ │ │ └── bootstrap-table-treegrid.js
│ │ │ ├── locale/
│ │ │ │ ├── bootstrap-table-af-ZA.js
│ │ │ │ ├── bootstrap-table-ar-SA.js
│ │ │ │ ├── bootstrap-table-bg-BG.js
│ │ │ │ ├── bootstrap-table-ca-ES.js
│ │ │ │ ├── bootstrap-table-cs-CZ.js
│ │ │ │ ├── bootstrap-table-da-DK.js
│ │ │ │ ├── bootstrap-table-de-DE.js
│ │ │ │ ├── bootstrap-table-el-GR.js
│ │ │ │ ├── bootstrap-table-en-US.js
│ │ │ │ ├── bootstrap-table-es-AR.js
│ │ │ │ ├── bootstrap-table-es-CL.js
│ │ │ │ ├── bootstrap-table-es-CR.js
│ │ │ │ ├── bootstrap-table-es-ES.js
│ │ │ │ ├── bootstrap-table-es-MX.js
│ │ │ │ ├── bootstrap-table-es-NI.js
│ │ │ │ ├── bootstrap-table-es-SP.js
│ │ │ │ ├── bootstrap-table-et-EE.js
│ │ │ │ ├── bootstrap-table-eu-EU.js
│ │ │ │ ├── bootstrap-table-fa-IR.js
│ │ │ │ ├── bootstrap-table-fi-FI.js
│ │ │ │ ├── bootstrap-table-fr-BE.js
│ │ │ │ ├── bootstrap-table-fr-CH.js
│ │ │ │ ├── bootstrap-table-fr-FR.js
│ │ │ │ ├── bootstrap-table-fr-LU.js
│ │ │ │ ├── bootstrap-table-he-IL.js
│ │ │ │ ├── bootstrap-table-hi-IN.js
│ │ │ │ ├── bootstrap-table-hr-HR.js
│ │ │ │ ├── bootstrap-table-hu-HU.js
│ │ │ │ ├── bootstrap-table-id-ID.js
│ │ │ │ ├── bootstrap-table-it-IT.js
│ │ │ │ ├── bootstrap-table-ja-JP.js
│ │ │ │ ├── bootstrap-table-ka-GE.js
│ │ │ │ ├── bootstrap-table-ko-KR.js
│ │ │ │ ├── bootstrap-table-lb-LU.js
│ │ │ │ ├── bootstrap-table-lt-LT.js
│ │ │ │ ├── bootstrap-table-ms-MY.js
│ │ │ │ ├── bootstrap-table-nb-NO.js
│ │ │ │ ├── bootstrap-table-nl-BE.js
│ │ │ │ ├── bootstrap-table-nl-NL.js
│ │ │ │ ├── bootstrap-table-pl-PL.js
│ │ │ │ ├── bootstrap-table-pt-BR.js
│ │ │ │ ├── bootstrap-table-pt-PT.js
│ │ │ │ ├── bootstrap-table-ro-RO.js
│ │ │ │ ├── bootstrap-table-ru-RU.js
│ │ │ │ ├── bootstrap-table-sk-SK.js
│ │ │ │ ├── bootstrap-table-sl-SI.js
│ │ │ │ ├── bootstrap-table-sr-Cyrl-RS.js
│ │ │ │ ├── bootstrap-table-sr-Latn-RS.js
│ │ │ │ ├── bootstrap-table-sv-SE.js
│ │ │ │ ├── bootstrap-table-th-TH.js
│ │ │ │ ├── bootstrap-table-tr-TR.js
│ │ │ │ ├── bootstrap-table-uk-UA.js
│ │ │ │ ├── bootstrap-table-ur-PK.js
│ │ │ │ ├── bootstrap-table-uz-Latn-UZ.js
│ │ │ │ ├── bootstrap-table-vi-VN.js
│ │ │ │ ├── bootstrap-table-zh-CN.js
│ │ │ │ └── bootstrap-table-zh-TW.js
│ │ │ └── themes/
│ │ │ ├── bootstrap-table/
│ │ │ │ ├── bootstrap-table.css
│ │ │ │ └── bootstrap-table.js
│ │ │ ├── bulma/
│ │ │ │ ├── bootstrap-table-bulma.css
│ │ │ │ └── bootstrap-table-bulma.js
│ │ │ ├── foundation/
│ │ │ │ ├── bootstrap-table-foundation.css
│ │ │ │ └── bootstrap-table-foundation.js
│ │ │ ├── materialize/
│ │ │ │ ├── bootstrap-table-materialize.css
│ │ │ │ └── bootstrap-table-materialize.js
│ │ │ └── semantic/
│ │ │ ├── bootstrap-table-semantic.css
│ │ │ └── bootstrap-table-semantic.js
│ │ └── tac/
│ │ └── css/
│ │ └── tac.css
│ └── templates/
│ ├── accessConfirmation.html
│ ├── changePwd.html
│ ├── client/
│ │ └── master.html
│ ├── oauthError.html
│ ├── profile.html
│ ├── signIn.html
│ ├── signUp.html
│ └── user/
│ └── master.html
└── test/
└── java/
└── com/
└── revengemission/
└── sso/
└── oauth2/
└── server/
├── ApplicationTests.java
├── CaptchaTest.java
├── OAuth2Test.java
├── PkceUtil.java
└── SimpleTest.java
================================================
FILE CONTENTS
================================================
================================================
FILE: .editorconfig
================================================
# EditorConfig is awesome: https://EditorConfig.org
# top-most EditorConfig file
root = true
# Unix-style newlines with a newline ending every file
[*]
end_of_line = lf
insert_final_newline = true
charset = utf-8
[*.java]
indent_style = space
indent_size = 4
# Matches multiple files with brace expansion notation
# Set default charset
[*.{js,py}]
charset = utf-8
# 4 space indentation
[*.py]
indent_style = space
indent_size = 4
# Tab indentation (no size specified)
[Makefile]
indent_style = tab
# Indentation override for all JS under lib directory
[lib/**.js]
indent_style = space
indent_size = 2
# Matches the exact files either package.json or .travis.yml
[{package.json,.travis.yml}]
indent_style = space
indent_size = 2
================================================
FILE: .gitattributes
================================================
*.js linguist-language=java
*.html linguist-language=java
text=lf
================================================
FILE: .github/dependabot.yml
================================================
# To get started with Dependabot version updates, you'll need to specify which
# package ecosystems to update and where the package manifests are located.
# Please see the documentation for all configuration options:
# https://docs.github.com/code-security/dependabot/dependabot-version-updates/configuration-options-for-the-dependabot.yml-file
version: 2
updates:
- package-ecosystem: "maven" # See documentation for possible values
directory: "/" # Location of package manifests
schedule:
interval: "weekly"
================================================
FILE: .github/workflows/maven.yml
================================================
# This workflow will build a Java project with Maven, and cache/restore any dependencies to improve the workflow execution time
# For more information see: https://docs.github.com/en/actions/automating-builds-and-tests/building-and-testing-java-with-maven
# This workflow uses actions that are not certified by GitHub.
# They are provided by a third-party and are governed by
# separate terms of service, privacy policy, and support
# documentation.
name: Java CI with Maven
on:
push:
branches: [ "master", "main" ]
pull_request:
branches: [ "master", "main" ]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Set up JDK 25
uses: actions/setup-java@v4
with:
java-version: '25'
distribution: 'temurin'
cache: maven
- name: Start PostgreSQL
run: |
sudo systemctl start postgresql.service
pg_isready
sudo -u postgres bash -c "cd /tmp && psql -c \"ALTER USER postgres WITH PASSWORD 'P@ssw0rd';\""
sudo -u postgres bash -c "cd /tmp && psql -c \"create database oauth2_server;\""
- name: Build with Maven
run: mvn -B clean package --file pom.xml -DskipTests=true
================================================
FILE: .gitignore
================================================
######################
# Project Specific
######################
/target/www/**
######################
# Node
######################
/node/**
/node_tmp/**
/node_modules/**
######################
# SASS
######################
.sass-cache/**
######################
# Eclipse
######################
*.pydevproject
.project
.factorypath
.metadata
/bin/**
/tmp/**
/tmp/**/*
*.tmp
*.bak
*.swp
*~.nib
local.properties
.classpath
.settings/**
.loadpath
/src/main/resources/rebel.xml
# External tool builders
.externalToolBuilders/**
# Locally stored "Eclipse launch configurations"
*.launch
# CDT-specific
.cproject
# PDT-specific
.buildpath
######################
# Intellij
######################
.idea/
*.iml
*.iws
*.ipr
*.ids
*.orig
**/target/**
######################
# Maven
######################
/log/**
/target/**
######################
# Gradle
######################
.gradle/**
######################
# Package Files
######################
*.jar
*.war
*.ear
*.db
######################
# Windows
######################
# Windows image file caches
Thumbs.db
# Folder config file
Desktop.ini
######################
# Mac OSX
######################
.DS_Store
.svn
# Thumbnails
._*
# Files that might appear on external disk
.Spotlight-V100
.Trashes
######################
# Directories
######################
/build/**
/bin/
/spring_loaded/**
/deploy/**
######################
# Logs
######################
*.log
######################
# Others
######################
*.class
*.*~
*~
.merge_file*
######################
# Gradle Wrapper
######################
!gradle/wrapper/gradle-wrapper.jar
######################
# Maven Wrapper
######################
!.mvn/wrapper/maven-wrapper.jar
######################
# ESLint
######################
.eslintcache
================================================
FILE: LICENSE
================================================
MIT License
Copyright (c) 2018 mission
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
================================================
FILE: README.md
================================================
## SpringBoot 4.0+ oauth2 server
#### oauth2 openid 端点
````
Get /.well-known/openid-configuration
````
#### 支持的授权模式grant_type</br>
````
authorization_code, refresh_token
````
#### 接口调用
````
1. 获取code,需要 PKCE 方式
Get /oauth2/authorize
client_id=SampleClientId
response_type=code
redirect_uri=http://localhost:10480/login/oauth2/code/sso-login
scope=openid profile
code_challenge=6bQSbd4AdLzLhBvSPjUjthOJOt5AZcV19-pbjpeRM64
code_challenge_method=S256
用户同意授权后服务端响应,浏览器重定向到:http://localhost:10480/login?code=xxxxxxxxxxx,接收code,然后后端调用步骤2获取token
2. 获取token
Post /oauth2/token
表单数据, Content-Type: application/x-www-form-urlencoded
client_id=SampleClientId
client_secret=tgb.258
grant_type=authorization_code
redirect_uri=http://localhost:10480/login/oauth2/code/sso-login
code=UqkOyZ1vLRSjpwcZpUcHJYvvGlsenAvk7CH5LsW3oOSE-rE3znA834YrJYSuJKzs25UnxoLIL47W2GA2BuEyK8GZG2qnDkqsaoaASJWd1IgUQ1x3d1XBL6lO-SQGiqZ7
code_verifier=UWxD3NZtmkuitGkVdZnbkjjHgolTxOXrMpxesbGYUV3vVHYNo6yLyKGm4rzOaTUAT2phuwzXVfh-ozdulmoXrse10IHlWdj5jf7PdQR0YWFcPvHuOTwGsbTuphpMGCna
响应:
{
"access_token": "a.b.c",
"refresh_token": "d.e.f",
"scope": "openid profile",
"id_token": "h.i.j",
"token_type": "Bearer",
"expires_in": 7199
}
````
#### 访问受保护资源,请求时携带token
````
Get /userinfo?access_token=a.b.c
或者http header中加入Authorization,如下
Authorization: Bearer a.b.c
````
#### 刷新token</br>
````
Post /oauth2/token?client_id=SampleClientId&client_secret=tgb.258&grant_type=refresh_token&refresh_token=d.e.f
````
#### 启动方法</br>
````
java -jar oauth2-server-x.y.z.jar
或者指定配置文件覆盖默认配置
java -jar oauth2-server-x.y.z.jar --spring.config.additional-location=/path/to/override.properties
````
#### 管理员角色登录后,可以对用户和client进行管理</br>
#### 效果图



#### 注意!!!当Server和Client在一台机器上时,请配置域名代理,避免cookie相互覆盖,或者修改默认的session id
````
#修改默认的JSESSIONID为my_session_id
server.servlet.session.cookie.name=oauth2_session_id
````
================================================
FILE: maven-version-rules.xml
================================================
<ruleset comparisonMethod="maven"
xmlns="http://mojo.codehaus.org/versions-maven-plugin/rule/2.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://mojo.codehaus.org/versions-maven-plugin/rule/2.0.0 http://mojo.codehaus.org/versions-maven-plugin/xsd/rule-2.0.0.xsd">
<ignoreVersions>
<ignoreVersion type="regex">.*[-_\.](alpha|Alpha|ALPHA|b|beta|Beta|BETA|rc|RC|M|EA)[-_\.]?[0-9]*</ignoreVersion>
</ignoreVersions>
</ruleset>
================================================
FILE: pom.xml
================================================
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.revengemission.sso</groupId>
<artifactId>oauth2-server</artifactId>
<version>0.0.4-SNAPSHOT</version>
<packaging>jar</packaging>
<name>oauth2-server</name>
<description>spring-security-oauth2 authorization server</description>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>4.0.2</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>21</java.version>
<org.mapstruct.version>1.6.3</org.mapstruct.version>
<commons-text.version>1.15.0</commons-text.version>
<tianai-captcha.version>1.5.4</tianai-captcha.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-oauth2-authorization-server</artifactId>
</dependency>
<dependency>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-oauth2-client</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-liquibase</artifactId>
</dependency>
<dependency>
<groupId>com.mysql</groupId>
<artifactId>mysql-connector-j</artifactId>
</dependency>
<dependency>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-aspectj</artifactId>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-text</artifactId>
<version>${commons-text.version}</version>
</dependency>
<dependency>
<groupId>org.mapstruct</groupId>
<artifactId>mapstruct</artifactId>
<version>${org.mapstruct.version}</version>
</dependency>
<dependency>
<groupId>org.mapstruct</groupId>
<artifactId>mapstruct-processor</artifactId>
<version>${org.mapstruct.version}</version>
</dependency>
<!-- cache -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-cache</artifactId>
</dependency>
<dependency>
<groupId>com.github.ben-manes.caffeine</groupId>
<artifactId>caffeine</artifactId>
</dependency>
<dependency>
<groupId>cloud.tianai.captcha</groupId>
<artifactId>tianai-captcha</artifactId>
<version>${tianai-captcha.version}</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
<configuration>
<nonFilteredFileExtensions>
<nonFilteredFileExtension>js</nonFilteredFileExtension>
<nonFilteredFileExtension>css</nonFilteredFileExtension>
<nonFilteredFileExtension>ttf</nonFilteredFileExtension>
<nonFilteredFileExtension>woff</nonFilteredFileExtension>
<nonFilteredFileExtension>jks</nonFilteredFileExtension>
</nonFilteredFileExtensions>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>${java.version}</source>
<target>${java.version}</target>
<compilerArgs>
<arg>-Xlint:deprecation</arg>
<arg>-Xlint:unchecked</arg>
</compilerArgs>
<annotationProcessorPaths>
<path>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>${lombok.version}</version>
</path>
<path>
<groupId>org.mapstruct</groupId>
<artifactId>mapstruct-processor</artifactId>
<version>${org.mapstruct.version}</version>
</path>
</annotationProcessorPaths>
</configuration>
</plugin>
<!-- mvn versions:display-dependency-updates -->
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>versions-maven-plugin</artifactId>
<configuration>
<rulesUri>file:///${project.basedir}/maven-version-rules.xml</rulesUri>
</configuration>
</plugin>
</plugins>
</build>
</project>
================================================
FILE: src/main/java/com/revengemission/sso/oauth2/server/ApplicationStartedEventListener.java
================================================
package com.revengemission.sso.oauth2.server;
import org.springframework.boot.context.event.ApplicationStartedEvent;
import org.springframework.context.ApplicationListener;
import org.springframework.stereotype.Component;
import java.time.LocalDateTime;
/**
* Spring boot 事件监听,可以额外增加处理逻辑
*/
@Component
public class ApplicationStartedEventListener implements ApplicationListener<ApplicationStartedEvent> {
@Override
public void onApplicationEvent(ApplicationStartedEvent applicationStartedEvent) {
System.out.format("Application started @ " + LocalDateTime.now() + " -----------------------------------------------\n");
}
}
================================================
FILE: src/main/java/com/revengemission/sso/oauth2/server/Oauth2ServerApplication.java
================================================
package com.revengemission.sso.oauth2.server;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.scheduling.annotation.EnableScheduling;
/**
* https://projects.spring.io/spring-security-oauth/docs/oauth2.html
* https://spring.io/guides/tutorials/spring-boot-oauth2/
*/
@EnableScheduling
@SpringBootApplication
public class Oauth2ServerApplication {
public static void main(String[] args) {
SpringApplication.run(Oauth2ServerApplication.class, args);
}
}
================================================
FILE: src/main/java/com/revengemission/sso/oauth2/server/ServerExceptionHandler.java
================================================
package com.revengemission.sso.oauth2.server;
import com.revengemission.sso.oauth2.server.utils.JsonUtil;
import jakarta.servlet.http.HttpServletRequest;
import org.slf4j.LoggerFactory;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.security.access.AccessDeniedException;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.servlet.NoHandlerFoundException;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
@ControllerAdvice
public class ServerExceptionHandler {
private final org.slf4j.Logger log = LoggerFactory.getLogger(this.getClass());
@ExceptionHandler({
NoHandlerFoundException.class
})
public ResponseEntity<Object> handleNoHandlerFoundException(Exception ex, HttpServletRequest request) {
HttpStatus httpStatus = HttpStatus.NOT_FOUND;
logRequest(ex, httpStatus, request);
HttpHeaders headers = new HttpHeaders();
Map<String, Object> responseResult = new HashMap<>(16);
responseResult.put("status", httpStatus.value());
responseResult.put("message", ex.getMessage());
responseResult.put("url", request.getRequestURL());
return new ResponseEntity<>(responseResult, headers, httpStatus);
}
@ExceptionHandler({
AccessDeniedException.class
})
@ResponseBody
ResponseEntity<Object> handleDeniedException(Exception ex, HttpServletRequest request) {
HttpStatus httpStatus = HttpStatus.FORBIDDEN;
logRequest(ex, httpStatus, request);
HttpHeaders headers = new HttpHeaders();
Map<String, Object> responseResult = new HashMap<>(16);
responseResult.put("status", httpStatus.value());
responseResult.put("error", httpStatus.getReasonPhrase());
responseResult.put("timestamp", new Date());
responseResult.put("message", ex.getMessage());
responseResult.put("path", request.getRequestURL());
return new ResponseEntity<>(responseResult, headers, httpStatus);
}
/**
* 捕获全局异常,处理所有不可知的异常
*
* @param ex
* @param request
* @return
*/
@ExceptionHandler(Exception.class)
@ResponseBody
ResponseEntity<Object> handleException(Exception ex, HttpServletRequest request) {
HttpStatus httpStatus = HttpStatus.INTERNAL_SERVER_ERROR;
logRequest(ex, httpStatus, request);
HttpHeaders headers = new HttpHeaders();
Map<String, Object> responseResult = new HashMap<>(16);
responseResult.put("status", httpStatus.value());
responseResult.put("error", httpStatus.getReasonPhrase());
responseResult.put("timestamp", new Date());
responseResult.put("message", ex.getMessage());
responseResult.put("path", request.getRequestURL());
return new ResponseEntity<>(responseResult, headers, httpStatus);
}
/**
* 记录下请求内容
*
* @param ex
* @param status
* @param request
*/
private void logRequest(Exception ex, HttpStatus status, HttpServletRequest request) {
Map<String, String[]> parameters = request.getParameterMap();
try {
String uri = request.getRequestURI();
log.error("User Agent =" + request.getHeader("User-Agent") +
";\nstatus =" + status.toString() + ",reason " + status.getReasonPhrase() +
";\nexception =" + ex.getMessage() +
";\nuri =" + uri +
";\ncontent Type =" + request.getHeader("content-type") +
";\nrequest parameters =" + JsonUtil.multiValueMapToJsonString(parameters), ex);
} catch (Exception e) {
log.error("ControllerAdvice log Exception", e);
}
}
}
================================================
FILE: src/main/java/com/revengemission/sso/oauth2/server/WebRequestLogAspect.java
================================================
package com.revengemission.sso.oauth2.server;
import com.revengemission.sso.oauth2.server.utils.ClientIpUtil;
import com.revengemission.sso.oauth2.server.utils.JsonUtil;
import jakarta.servlet.http.HttpServletRequest;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.AfterReturning;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.annotation.Pointcut;
import org.aspectj.lang.reflect.MethodSignature;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;
import java.lang.annotation.Annotation;
import java.lang.reflect.Method;
import java.util.Enumeration;
import java.util.HashMap;
import java.util.Map;
@Aspect
@Component
public class WebRequestLogAspect {
private Logger log = LoggerFactory.getLogger(this.getClass());
@Pointcut("execution(public * com.revengemission.sso.oauth2.server.controller.*.*(..))")
public void wsLog() {
}
/**
* 接收到请求,记录请求内容
*
* @param joinPoint
* @throws Throwable
*/
@Before("wsLog()")
public void doBefore(JoinPoint joinPoint) throws Throwable {
if (log.isInfoEnabled()) {
ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
if (attributes != null) {
HttpServletRequest request = attributes.getRequest();
Map<String, String[]> parameters = request.getParameterMap();
try {
String parametersString = null;
String requestBody = null;
if (parameters != null) {
parametersString = JsonUtil.multiValueMapToJsonString(parameters);
}
MethodSignature signature = (MethodSignature) joinPoint.getSignature();
//获取被拦截的方法
Method method = signature.getMethod();
Object object = getAnnotatedParameterValueRequestBody(method, joinPoint.getArgs());
if (object != null) {
requestBody = JsonUtil.objectToJsonString(object);
}
StringBuffer stringBuffer = new StringBuffer();
stringBuffer.append("\nRequest from = ");
stringBuffer.append(ClientIpUtil.getIpAddress(request));
stringBuffer.append(";\n");
stringBuffer.append("uri = ");
stringBuffer.append(request.getRequestURL().toString());
stringBuffer.append(";\n");
stringBuffer.append("request method = ");
stringBuffer.append(request.getMethod());
stringBuffer.append(";\n");
stringBuffer.append("content type = ");
stringBuffer.append(request.getContentType());
stringBuffer.append(";\n");
stringBuffer.append("request parameters = ");
stringBuffer.append(parametersString);
stringBuffer.append(";\n");
stringBuffer.append("request body = ");
stringBuffer.append(requestBody);
stringBuffer.append(";\n");
log.info(stringBuffer.toString());
String headers = JsonUtil.objectToJsonString(getHeadersInfo(request));
log.info("headers:" + headers);
} catch (Exception e) {
log.info("log http request Exception: ", e);
}
}
}
}
@AfterReturning(returning = "ret", pointcut = "wsLog()")
public void doAfterReturning(Object ret) throws Throwable {
// 处理完请求,返回内容
if (log.isInfoEnabled()) {
try {
log.info("Response from server : \n" + JsonUtil.objectToJsonString(ret));
} catch (Exception e) {
log.info("log http response Exception:\n ", e);
}
}
}
private Object getAnnotatedParameterValueRequestBody(Method method, Object[] args) {
Annotation[][] parameterAnnotations = method.getParameterAnnotations();
///Parameter[] parameters = method.getParameters();
int i = 0;
for (Annotation[] annotations : parameterAnnotations) {
Object arg = args[i];
///String name = parameters[i++].getDeclaringExecutable().getName();
for (Annotation annotation : annotations) {
if (annotation instanceof RequestBody) {
return arg;
}
}
}
return null;
}
//get request headers
private Map<String, String> getHeadersInfo(HttpServletRequest request) {
Map<String, String> map = new HashMap<>();
Enumeration headerNames = request.getHeaderNames();
while (headerNames.hasMoreElements()) {
String key = (String) headerNames.nextElement();
String value = request.getHeader(key);
map.put(key, value);
}
return map;
}
}
================================================
FILE: src/main/java/com/revengemission/sso/oauth2/server/config/AuthorizationServerConfig.java
================================================
package com.revengemission.sso.oauth2.server.config;
import com.nimbusds.jose.jwk.JWKSet;
import com.nimbusds.jose.jwk.RSAKey;
import com.nimbusds.jose.jwk.source.JWKSource;
import com.nimbusds.jose.proc.SecurityContext;
import com.revengemission.sso.oauth2.server.jose.Jwks;
import com.revengemission.sso.oauth2.server.persistence.repository.OauthClientRepository;
import com.revengemission.sso.oauth2.server.service.impl.RegisteredClientRepositoryImpl;
import org.springframework.cache.CacheManager;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.annotation.Order;
import org.springframework.http.MediaType;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.security.config.Customizer;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.config.annotation.web.configuration.OAuth2AuthorizationServerConfiguration;
import org.springframework.security.oauth2.client.registration.ClientRegistrationRepository;
import org.springframework.security.oauth2.jwt.JwtDecoder;
import org.springframework.security.oauth2.server.authorization.JdbcOAuth2AuthorizationConsentService;
import org.springframework.security.oauth2.server.authorization.JdbcOAuth2AuthorizationService;
import org.springframework.security.oauth2.server.authorization.OAuth2AuthorizationConsentService;
import org.springframework.security.oauth2.server.authorization.OAuth2AuthorizationService;
import org.springframework.security.oauth2.server.authorization.client.RegisteredClientRepository;
import org.springframework.security.oauth2.server.authorization.settings.AuthorizationServerSettings;
import org.springframework.security.web.SecurityFilterChain;
import org.springframework.security.web.authentication.LoginUrlAuthenticationEntryPoint;
import org.springframework.security.web.util.matcher.MediaTypeRequestMatcher;
/**
* https://docs.spring.io/spring-security/reference/servlet/oauth2/authorization-server/getting-started.html
*/
@EnableWebSecurity
@Configuration(proxyBeanMethods = false)
public class AuthorizationServerConfig {
private static final String CUSTOM_CONSENT_PAGE_URI = "/oauth2/consent";
@Bean
@Order(1)
public SecurityFilterChain authorizationServerSecurityFilterChain(HttpSecurity http) throws Exception {
http
.securityMatcher("/oauth2/**")
.oauth2AuthorizationServer((authorizationServer) -> {
http.securityMatcher(authorizationServer.getEndpointsMatcher());
authorizationServer
.oidc(Customizer.withDefaults()); // Enable OpenID Connect 1.0
})
.authorizeHttpRequests((authorize) -> {
authorize
.anyRequest().authenticated();
}
)
// Redirect to the login page when not authenticated from the
// authorization endpoint
.exceptionHandling((exceptions) -> exceptions
.defaultAuthenticationEntryPointFor(
new LoginUrlAuthenticationEntryPoint("/signIn"),
new MediaTypeRequestMatcher(MediaType.TEXT_HTML)
)
)
.oauth2ResourceServer(oauth2ResourceServer ->
oauth2ResourceServer.jwt(Customizer.withDefaults()));
return http.build();
}
@Bean
public RegisteredClientRepository registeredClientRepository(OauthClientRepository oauthClientRepository, CacheManager cacheManager) {
return new RegisteredClientRepositoryImpl(oauthClientRepository, cacheManager);
}
@Bean
public ClientRegistrationRepository clientRegistrationRepository(OauthClientRepository oauthClientRepository) {
return new JdbcClientRegistrationRepository(oauthClientRepository);
}
@Bean
public OAuth2AuthorizationService authorizationService(JdbcTemplate jdbcTemplate, RegisteredClientRepository registeredClientRepository) {
return new JdbcOAuth2AuthorizationService(jdbcTemplate, registeredClientRepository);
}
@Bean
public OAuth2AuthorizationConsentService authorizationConsentService(JdbcTemplate jdbcTemplate, RegisteredClientRepository registeredClientRepository) {
return new JdbcOAuth2AuthorizationConsentService(jdbcTemplate, registeredClientRepository);
}
@Bean
public JWKSource<SecurityContext> jwkSource() {
RSAKey rsaKey = Jwks.generateRsa();
JWKSet jwkSet = new JWKSet(rsaKey);
return (jwkSelector, securityContext) -> jwkSelector.select(jwkSet);
}
@Bean
public JwtDecoder jwtDecoder(JWKSource<SecurityContext> jwkSource) {
return OAuth2AuthorizationServerConfiguration.jwtDecoder(jwkSource);
}
@Bean
public AuthorizationServerSettings authorizationServerSettings() {
return AuthorizationServerSettings.builder().build();
}
}
================================================
FILE: src/main/java/com/revengemission/sso/oauth2/server/config/CachesEnum.java
================================================
package com.revengemission.sso.oauth2.server.config;
public enum CachesEnum {
/**
* 使用默认值
*/
DefaultCache,
/**
* 过期。最大容量使用默认值
*/
SmsCaptchaCache(60 * 3),
/**
* 指定过期时间和最大容量
*/
GraphCaptchaCache(60 * 5, 100000),
/**
* 指定过期时间和最大容量
*/
CaptchaTimesCache(60 * 5, 100000),
/**
* 指定过期时间和最大容量
*/
Oauth2ClientCache(60 * 60 * 2, 20),
Oauth2AuthorizationCodeCache(60 * 3, 100000),
Oauth2AuthorizationCodeFailureTimesCache(60 * 3, 100000),
;
CachesEnum() {
}
CachesEnum(int ttl) {
this.ttl = ttl;
}
CachesEnum(int ttl, int maxSize) {
this.ttl = ttl;
this.maxSize = maxSize;
}
private int maxSize = 100000;
private int ttl = 60 * 5;
public int getMaxSize() {
return maxSize;
}
public int getTtl() {
return ttl;
}
}
================================================
FILE: src/main/java/com/revengemission/sso/oauth2/server/config/CaffeineCacheConfiguration.java
================================================
package com.revengemission.sso.oauth2.server.config;
import com.github.benmanes.caffeine.cache.Caffeine;
import org.springframework.cache.CacheManager;
import org.springframework.cache.annotation.EnableCaching;
import org.springframework.cache.caffeine.CaffeineCacheManager;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import java.util.concurrent.TimeUnit;
@Configuration
@EnableCaching
public class CaffeineCacheConfiguration {
@Bean
public CacheManager cacheManager() {
CaffeineCacheManager cacheManager = new CaffeineCacheManager();
for (CachesEnum cachesEnum : CachesEnum.values()) {
if (cachesEnum.getTtl() <= 0) {
cacheManager.registerCustomCache(cachesEnum.name(), Caffeine.newBuilder().maximumSize(cachesEnum.getMaxSize()).build());
} else {
cacheManager.registerCustomCache(cachesEnum.name(), Caffeine.newBuilder().expireAfterWrite(cachesEnum.getTtl(), TimeUnit.SECONDS)
.maximumSize(cachesEnum.getMaxSize()).build());
}
}
cacheManager.setAllowNullValues(false);
return cacheManager;
}
}
================================================
FILE: src/main/java/com/revengemission/sso/oauth2/server/config/CustomAccessDeniedHandler.java
================================================
package com.revengemission.sso.oauth2.server.config;
import com.revengemission.sso.oauth2.server.domain.GlobalConstant;
import com.revengemission.sso.oauth2.server.domain.ResponseResult;
import com.revengemission.sso.oauth2.server.utils.ClientIpUtil;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.http.converter.HttpMessageNotWritableException;
import org.springframework.security.access.AccessDeniedException;
import org.springframework.security.web.access.AccessDeniedHandler;
import org.springframework.stereotype.Component;
import tools.jackson.core.JsonEncoding;
import tools.jackson.core.JsonGenerator;
import tools.jackson.databind.ObjectMapper;
import java.io.IOException;
@Component
public class CustomAccessDeniedHandler implements AccessDeniedHandler {
@Value("${access.denied.url:/403}")
String accessDeniedUrl = "/403";
@Override
public void handle(HttpServletRequest request,
HttpServletResponse response, AccessDeniedException e) throws IOException {
//服务器地址
String toUrl = ClientIpUtil.getFullRequestUrl(request);
boolean isAjax = "XMLHttpRequest".equals(request
.getHeader("X-Requested-With")) || "apiLogin".equals(request
.getHeader("api-login"));
if (isAjax) {
response.setHeader("Content-Type", "application/json;charset=UTF-8");
try {
ResponseResult<Object> responseMessage = new ResponseResult<>();
responseMessage.setStatus(GlobalConstant.ERROR_DENIED);
responseMessage.setMessage(toUrl);
ObjectMapper objectMapper = new ObjectMapper();
JsonGenerator jsonGenerator = objectMapper.createGenerator(response.getOutputStream(),
JsonEncoding.UTF8);
objectMapper.writeValue(jsonGenerator, responseMessage);
} catch (Exception ex) {
throw new HttpMessageNotWritableException("Could not write JSON: " + ex.getMessage(), ex);
}
} else {
/// response.sendRedirect(accessDeniedUrl + "?toUrl=" + toUrl);
response.sendRedirect(accessDeniedUrl);
}
}
}
================================================
FILE: src/main/java/com/revengemission/sso/oauth2/server/config/CustomAuthenticationFailureHandler.java
================================================
package com.revengemission.sso.oauth2.server.config;
import com.revengemission.sso.oauth2.server.domain.GlobalConstant;
import com.revengemission.sso.oauth2.server.domain.LoginHistory;
import com.revengemission.sso.oauth2.server.domain.ResponseResult;
import com.revengemission.sso.oauth2.server.service.LoginHistoryService;
import com.revengemission.sso.oauth2.server.service.UserAccountService;
import com.revengemission.sso.oauth2.server.utils.ClientIpUtil;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.converter.HttpMessageNotWritableException;
import org.springframework.security.core.AuthenticationException;
import org.springframework.security.web.authentication.SimpleUrlAuthenticationFailureHandler;
import org.springframework.stereotype.Component;
import tools.jackson.core.JsonEncoding;
import tools.jackson.core.JsonGenerator;
import tools.jackson.databind.ObjectMapper;
import java.io.IOException;
import java.net.URLEncoder;
import java.nio.charset.StandardCharsets;
@Component
public class CustomAuthenticationFailureHandler extends SimpleUrlAuthenticationFailureHandler {
private Logger log = LoggerFactory.getLogger(this.getClass());
private String failureUrl = "/signIn";
@Autowired
UserAccountService userAccountService;
@Autowired
LoginHistoryService loginHistoryService;
@Override
public void onAuthenticationFailure(HttpServletRequest request,
HttpServletResponse response, AuthenticationException exception)
throws IOException {
String username = request.getParameter("username");
String clientId = request.getParameter("client_id");
log.debug("{} try to login", username);
LoginHistory loginHistory = new LoginHistory();
loginHistory.setUsername(username);
loginHistory.setClientId(clientId);
loginHistory.setIp(ClientIpUtil.getIpAddress(request));
loginHistory.setDevice(request.getHeader("User-Agent"));
loginHistory.setRecordStatus(0);
loginHistory.setRemarks(exception.getMessage());
loginHistoryService.asyncCreate(loginHistory);
userAccountService.loginFailure(username);
boolean isAjax = "XMLHttpRequest".equals(request
.getHeader("X-Requested-With")) || "apiLogin".equals(request
.getHeader("api-login"));
if (isAjax) {
response.setHeader("Content-Type", "application/json;charset=UTF-8");
try {
ResponseResult<Object> responseMessage = new ResponseResult<>();
responseMessage.setStatus(GlobalConstant.ERROR);
responseMessage.setMessage(exception.getMessage());
ObjectMapper objectMapper = new ObjectMapper();
JsonGenerator jsonGenerator = objectMapper.createGenerator(response.getOutputStream(),
JsonEncoding.UTF8);
objectMapper.writeValue(jsonGenerator, responseMessage);
} catch (Exception ex) {
if (log.isErrorEnabled()) {
log.error("Could not write JSON:", ex);
}
throw new HttpMessageNotWritableException("Could not write JSON: " + ex.getMessage(), ex);
}
} else {
String encodedMessage = URLEncoder.encode(exception.getMessage(), StandardCharsets.UTF_8);
response.sendRedirect(failureUrl + "?authentication_error=true&error=" + encodedMessage);
/*super.onAuthenticationFailure(request, response, exception);*/
}
}
}
================================================
FILE: src/main/java/com/revengemission/sso/oauth2/server/config/CustomAuthenticationProvider.java
================================================
package com.revengemission.sso.oauth2.server.config;
import com.revengemission.sso.oauth2.server.domain.GlobalConstant;
import com.revengemission.sso.oauth2.server.domain.VerificationCodeException;
import com.revengemission.sso.oauth2.server.service.CaptchaService;
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.Strings;
import org.springframework.security.authentication.BadCredentialsException;
import org.springframework.security.authentication.InternalAuthenticationServiceException;
import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
import org.springframework.security.authentication.dao.AbstractUserDetailsAuthenticationProvider;
import org.springframework.security.core.AuthenticationException;
import org.springframework.security.core.userdetails.UserDetails;
import org.springframework.security.core.userdetails.UserDetailsService;
import org.springframework.security.core.userdetails.UsernameNotFoundException;
import org.springframework.security.crypto.password.PasswordEncoder;
import java.util.LinkedHashMap;
import java.util.Map;
public class CustomAuthenticationProvider extends AbstractUserDetailsAuthenticationProvider {
private boolean passwordCaptcha;
private UserDetailsService userService;
private PasswordEncoder passwordEncoder;
private CaptchaService captchaService;
public CustomAuthenticationProvider(UserDetailsService userService, PasswordEncoder passwordEncoder, CaptchaService captchaService, boolean passwordCaptcha) {
this.passwordCaptcha = passwordCaptcha;
this.userService = userService;
this.passwordEncoder = passwordEncoder;
this.captchaService = captchaService;
}
@Override
protected void additionalAuthenticationChecks(UserDetails userDetails,
UsernamePasswordAuthenticationToken authentication) throws AuthenticationException {
if (authentication.getCredentials() == null) {
throw new BadCredentialsException(this.messages
.getMessage("AbstractUserDetailsAuthenticationProvider.badCredentials", "Bad credentials"));
} else {
String presentedPassword = authentication.getCredentials().toString();
if (!this.passwordEncoder.matches(presentedPassword, userDetails.getPassword())) {
throw new BadCredentialsException(this.messages
.getMessage("AbstractUserDetailsAuthenticationProvider.badCredentials", "Bad credentials"));
}
}
}
@Override
protected UserDetails retrieveUser(String username, UsernamePasswordAuthenticationToken authentication)
throws AuthenticationException {
// 添加额外处理,如验证码等
Object details = authentication.getDetails();
if (details instanceof CustomWebAuthenticationDetails customWebAuthenticationDetails) {
String captcha = captchaService.getCaptcha(CachesEnum.GraphCaptchaCache, customWebAuthenticationDetails.getGraphId());
if (passwordCaptcha && !Strings.CI.equals(customWebAuthenticationDetails.getInputVerificationCode(), captcha)) {
throw new VerificationCodeException("验证码错误!");
}
captchaService.removeCaptcha(CachesEnum.GraphCaptchaCache, customWebAuthenticationDetails.getGraphId());
} else if (details instanceof LinkedHashMap<?, ?>) {
if (passwordCaptcha) {
@SuppressWarnings("unchecked")
Map<String, String> map = (Map<String, String>) details;
if (map.containsKey("grant_type") && Strings.CI.equals("password", map.get("grant_type"))) {
if (map.containsKey("graphId") && map.containsKey(GlobalConstant.VERIFICATION_CODE)) {
String graphId = map.get("graphId");
String captcha = captchaService.getCaptcha(CachesEnum.GraphCaptchaCache, graphId);
if (!Strings.CI.equals(map.get(GlobalConstant.VERIFICATION_CODE), captcha)) {
throw new VerificationCodeException("验证码错误!");
}
captchaService.removeCaptcha(CachesEnum.GraphCaptchaCache, graphId);
} else {
throw new VerificationCodeException("验证码错误!");
}
}
}
}
try {
return userService.loadUserByUsername(username);
} catch (UsernameNotFoundException | InternalAuthenticationServiceException ex) {
throw ex;
} catch (Exception ex) {
throw new InternalAuthenticationServiceException(ex.getMessage(), ex);
}
}
@Override
public boolean supports(Class<?> arg0) {
return true;
}
}
================================================
FILE: src/main/java/com/revengemission/sso/oauth2/server/config/CustomAuthenticationSuccessHandler.java
================================================
package com.revengemission.sso.oauth2.server.config;
import com.revengemission.sso.oauth2.server.domain.GlobalConstant;
import com.revengemission.sso.oauth2.server.domain.LoginHistory;
import com.revengemission.sso.oauth2.server.domain.ResponseResult;
import com.revengemission.sso.oauth2.server.domain.RoleEnum;
import com.revengemission.sso.oauth2.server.service.LoginHistoryService;
import com.revengemission.sso.oauth2.server.service.UserAccountService;
import com.revengemission.sso.oauth2.server.utils.ClientIpUtil;
import jakarta.servlet.ServletException;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.converter.HttpMessageNotWritableException;
import org.springframework.security.core.Authentication;
import org.springframework.security.core.authority.SimpleGrantedAuthority;
import org.springframework.security.web.authentication.SavedRequestAwareAuthenticationSuccessHandler;
import org.springframework.security.web.savedrequest.HttpSessionRequestCache;
import org.springframework.security.web.savedrequest.RequestCache;
import org.springframework.security.web.savedrequest.SavedRequest;
import org.springframework.stereotype.Component;
import tools.jackson.core.JsonEncoding;
import tools.jackson.core.JsonGenerator;
import tools.jackson.databind.ObjectMapper;
import java.io.IOException;
import java.util.Objects;
@Component
public class CustomAuthenticationSuccessHandler extends SavedRequestAwareAuthenticationSuccessHandler {
@Autowired
UserAccountService userAccountService;
@Autowired
LoginHistoryService loginHistoryService;
RequestCache requestCache = new HttpSessionRequestCache();
@Override
public void onAuthenticationSuccess(HttpServletRequest request,
HttpServletResponse response, Authentication authentication)
throws IOException, ServletException {
String redirectUrl = "";
SavedRequest savedRequest = requestCache.getRequest(request, response);
if (savedRequest != null && StringUtils.isNotEmpty(savedRequest.getRedirectUrl())) {
redirectUrl = savedRequest.getRedirectUrl();
}
String clientId = savedRequest.getParameterValues("client_id") != null && savedRequest.getParameterValues("client_id").length > 0 ?
Objects.requireNonNull(savedRequest.getParameterValues("client_id"))[0] : "";
boolean isAjax = "XMLHttpRequest".equals(request
.getHeader("X-Requested-With")) || "apiLogin".equals(request
.getHeader("api-login"));
LoginHistory loginHistory = new LoginHistory();
loginHistory.setUsername(authentication.getName());
loginHistory.setClientId(clientId);
loginHistory.setIp(ClientIpUtil.getIpAddress(request));
loginHistory.setDevice(request.getHeader("User-Agent"));
loginHistory.setRecordStatus(1);
loginHistory.setRemarks("isAjax:" + isAjax + ",redirectUrl:" + redirectUrl);
loginHistoryService.asyncCreate(loginHistory);
userAccountService.loginSuccess(authentication.getName());
if (isAjax) {
response.setHeader("Content-Type", "application/json;charset=UTF-8");
try {
ResponseResult<Object> responseMessage = new ResponseResult<>();
responseMessage.setStatus(GlobalConstant.SUCCESS);
responseMessage.setAdditional(redirectUrl);
ObjectMapper objectMapper = new ObjectMapper();
JsonGenerator jsonGenerator = objectMapper.createGenerator(response.getOutputStream(),
JsonEncoding.UTF8);
objectMapper.writeValue(jsonGenerator, responseMessage);
} catch (Exception ex) {
throw new HttpMessageNotWritableException("Could not write JSON: " + ex.getMessage(), ex);
}
} else {
//Call the parent method to manage the successful authentication
/// setDefaultTargetUrl("/");
if (StringUtils.isNotEmpty(redirectUrl)) {
super.onAuthenticationSuccess(request, response, authentication);
} else {
if (authentication.getAuthorities().contains(new SimpleGrantedAuthority(RoleEnum.ROLE_USER.toString()))) {
response.sendRedirect("/");
} else {
response.sendRedirect("/management/user");
}
}
}
}
}
================================================
FILE: src/main/java/com/revengemission/sso/oauth2/server/config/CustomCorsConfiguration.java
================================================
package com.revengemission.sso.oauth2.server.config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.cors.CorsConfiguration;
import org.springframework.web.cors.UrlBasedCorsConfigurationSource;
import org.springframework.web.filter.CorsFilter;
/**
* 部分接口需要跨域支持
*/
@Configuration
public class CustomCorsConfiguration {
@Bean
public CorsFilter corsFilter() {
CorsConfiguration corsConfiguration = new CorsConfiguration();
corsConfiguration.setAllowCredentials(true);
corsConfiguration.addAllowedOrigin("*");
corsConfiguration.addAllowedHeader("*");
corsConfiguration.addAllowedMethod("GET");
corsConfiguration.addAllowedMethod("POST");
corsConfiguration.addAllowedMethod("OPTIONS");
/// corsConfiguration.addExposedHeader("head1");
/// corsConfiguration.addExposedHeader("Location");
UrlBasedCorsConfigurationSource urlBasedCorsConfigurationSource = new UrlBasedCorsConfigurationSource();
urlBasedCorsConfigurationSource.registerCorsConfiguration("/oauth2/**", corsConfiguration);
urlBasedCorsConfigurationSource.registerCorsConfiguration("/user/me", corsConfiguration);
urlBasedCorsConfigurationSource.registerCorsConfiguration("/captcha/**", corsConfiguration);
return new CorsFilter(urlBasedCorsConfigurationSource);
}
}
================================================
FILE: src/main/java/com/revengemission/sso/oauth2/server/config/CustomWebAuthenticationDetails.java
================================================
package com.revengemission.sso.oauth2.server.config;
import com.revengemission.sso.oauth2.server.domain.GlobalConstant;
import jakarta.servlet.http.HttpServletRequest;
import org.springframework.security.web.authentication.WebAuthenticationDetails;
public class CustomWebAuthenticationDetails extends WebAuthenticationDetails {
private static final long serialVersionUID = 6975601077710753878L;
private final String inputVerificationCode;
private final String graphId;
public CustomWebAuthenticationDetails(HttpServletRequest request) {
super(request);
inputVerificationCode = request.getParameter(GlobalConstant.VERIFICATION_CODE);
graphId = request.getParameter(GlobalConstant.GRAPH_ID);
}
public String getInputVerificationCode() {
return inputVerificationCode;
}
public String getGraphId() {
return graphId;
}
@Override
public String toString() {
return super.toString() + "; inputVerificationCode: " + this.getInputVerificationCode() + "; graphId: " + this.getGraphId();
}
}
================================================
FILE: src/main/java/com/revengemission/sso/oauth2/server/config/DefaultSecurityConfig.java
================================================
package com.revengemission.sso.oauth2.server.config;
import com.revengemission.sso.oauth2.server.domain.RoleEnum;
import com.revengemission.sso.oauth2.server.service.CaptchaService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.annotation.Order;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.config.annotation.web.configurers.AbstractHttpConfigurer;
import org.springframework.security.core.session.SessionRegistry;
import org.springframework.security.core.session.SessionRegistryImpl;
import org.springframework.security.core.userdetails.UserDetailsService;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.security.crypto.password.PasswordEncoder;
import org.springframework.security.web.SecurityFilterChain;
import org.springframework.security.web.authentication.AuthenticationSuccessHandler;
import org.springframework.security.web.session.HttpSessionEventPublisher;
/**
* @author Joe Grandja
* @since 0.1.0
*/
@EnableWebSecurity
@Configuration(proxyBeanMethods = false)
public class DefaultSecurityConfig {
@Value("${signIn.captcha:false}")
boolean passwordCaptcha;
@Autowired
UserDetailsService userDetailsService;
@Autowired
CaptchaService captchaService;
@Autowired
CustomAuthenticationFailureHandler customAuthenticationFailureHandler;
@Autowired
CustomAuthenticationSuccessHandler customAuthenticationSuccessHandler;
@Autowired
CustomAccessDeniedHandler customAccessDeniedHandler;
@Bean
PasswordEncoder passwordEncoder() {
return new BCryptPasswordEncoder();
}
@Order(2)
@Bean
SecurityFilterChain defaultSecurityFilterChain(HttpSecurity http) throws Exception {
http
.securityMatcher("/management/**", "/assets/**", "/favicon.ico", "/signIn", "/signUp", "/security_check", "/404", "/captcha/**", "/.well-known/openid-configuration")
.authorizeHttpRequests(requestMatcherRegistry ->
requestMatcherRegistry.requestMatchers("/assets/**", "/favicon.ico", "/signIn", "/signUp", "/security_check", "/404", "/captcha/**", "/.well-known/openid-configuration").permitAll()
.requestMatchers("/management/**").hasAnyAuthority(RoleEnum.ROLE_SUPER.name())
.requestMatchers("/oauth2/signUp").permitAll()
.anyRequest().authenticated())
.csrf(AbstractHttpConfigurer::disable)
.logout(logoutCustomizer ->
logoutCustomizer
.logoutUrl("/logout")
.logoutSuccessUrl("/signIn?out"))
.formLogin(formLoginCustomizer ->
formLoginCustomizer
.failureHandler(customAuthenticationFailureHandler)
.successHandler(customAuthenticationSuccessHandler)
.loginPage("/signIn")
.loginProcessingUrl("/security_check"))
.oauth2Login(oauth2Login ->
oauth2Login
.loginPage("/signIn")
.successHandler(authenticationSuccessHandler())
)
.exceptionHandling(exceptionHandlingCustomizer -> exceptionHandlingCustomizer.accessDeniedHandler(customAccessDeniedHandler));
return http.build();
}
private AuthenticationSuccessHandler authenticationSuccessHandler() {
return new FederatedIdentityAuthenticationSuccessHandler();
}
@Bean
SessionRegistry sessionRegistry() {
return new SessionRegistryImpl();
}
@Bean
HttpSessionEventPublisher httpSessionEventPublisher() {
return new HttpSessionEventPublisher();
}
}
================================================
FILE: src/main/java/com/revengemission/sso/oauth2/server/config/DeviceClientAuthenticationConverter.java
================================================
package com.revengemission.sso.oauth2.server.config;
import jakarta.servlet.http.HttpServletRequest;
import org.jspecify.annotations.Nullable;
import org.springframework.http.HttpMethod;
import org.springframework.security.core.Authentication;
import org.springframework.security.oauth2.core.AuthorizationGrantType;
import org.springframework.security.oauth2.core.ClientAuthenticationMethod;
import org.springframework.security.oauth2.core.OAuth2AuthenticationException;
import org.springframework.security.oauth2.core.OAuth2ErrorCodes;
import org.springframework.security.oauth2.core.endpoint.OAuth2ParameterNames;
import org.springframework.security.web.authentication.AuthenticationConverter;
import org.springframework.security.web.servlet.util.matcher.PathPatternRequestMatcher;
import org.springframework.security.web.util.matcher.AndRequestMatcher;
import org.springframework.security.web.util.matcher.RequestMatcher;
import org.springframework.util.StringUtils;
/**
* @author Joe Grandja
* @author Steve Riesenberg
* @since 1.1
*/
public final class DeviceClientAuthenticationConverter implements AuthenticationConverter {
private final RequestMatcher deviceAuthorizationRequestMatcher;
private final RequestMatcher deviceAccessTokenRequestMatcher;
public DeviceClientAuthenticationConverter(String deviceAuthorizationEndpointUri) {
RequestMatcher clientIdParameterMatcher = request ->
request.getParameter(OAuth2ParameterNames.CLIENT_ID) != null;
this.deviceAuthorizationRequestMatcher = new AndRequestMatcher(PathPatternRequestMatcher.pathPattern(HttpMethod.POST, deviceAuthorizationEndpointUri), clientIdParameterMatcher);
this.deviceAccessTokenRequestMatcher = request ->
AuthorizationGrantType.DEVICE_CODE.getValue().equals(request.getParameter(OAuth2ParameterNames.GRANT_TYPE)) &&
request.getParameter(OAuth2ParameterNames.DEVICE_CODE) != null &&
request.getParameter(OAuth2ParameterNames.CLIENT_ID) != null;
}
@Nullable
@Override
public Authentication convert(HttpServletRequest request) {
if (!this.deviceAuthorizationRequestMatcher.matches(request) &&
!this.deviceAccessTokenRequestMatcher.matches(request)) {
return null;
}
// client_id (REQUIRED)
String clientId = request.getParameter(OAuth2ParameterNames.CLIENT_ID);
if (!StringUtils.hasText(clientId) ||
request.getParameterValues(OAuth2ParameterNames.CLIENT_ID).length != 1) {
throw new OAuth2AuthenticationException(OAuth2ErrorCodes.INVALID_REQUEST);
}
return new DeviceClientAuthenticationToken(clientId, ClientAuthenticationMethod.NONE, null, null);
}
}
================================================
FILE: src/main/java/com/revengemission/sso/oauth2/server/config/DeviceClientAuthenticationProvider.java
================================================
package com.revengemission.sso.oauth2.server.config;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.security.authentication.AuthenticationProvider;
import org.springframework.security.core.Authentication;
import org.springframework.security.core.AuthenticationException;
import org.springframework.security.oauth2.core.ClientAuthenticationMethod;
import org.springframework.security.oauth2.core.OAuth2AuthenticationException;
import org.springframework.security.oauth2.core.OAuth2Error;
import org.springframework.security.oauth2.core.OAuth2ErrorCodes;
import org.springframework.security.oauth2.core.endpoint.OAuth2ParameterNames;
import org.springframework.security.oauth2.server.authorization.client.RegisteredClient;
import org.springframework.security.oauth2.server.authorization.client.RegisteredClientRepository;
import org.springframework.security.oauth2.server.authorization.web.OAuth2ClientAuthenticationFilter;
import org.springframework.util.Assert;
/**
* @author Joe Grandja
* @author Steve Riesenberg
* @see DeviceClientAuthenticationToken
* @see DeviceClientAuthenticationConverter
* @see OAuth2ClientAuthenticationFilter
* @since 1.1
*/
public final class DeviceClientAuthenticationProvider implements AuthenticationProvider {
private static final String ERROR_URI = "https://datatracker.ietf.org/doc/html/rfc6749#section-3.2.1";
private static final Logger logger = LoggerFactory.getLogger(DeviceClientAuthenticationProvider.class);
private final RegisteredClientRepository registeredClientRepository;
public DeviceClientAuthenticationProvider(RegisteredClientRepository registeredClientRepository) {
Assert.notNull(registeredClientRepository, "registeredClientRepository cannot be null");
this.registeredClientRepository = registeredClientRepository;
}
@Override
public Authentication authenticate(Authentication authentication) throws AuthenticationException {
DeviceClientAuthenticationToken deviceClientAuthentication =
(DeviceClientAuthenticationToken) authentication;
if (!ClientAuthenticationMethod.NONE.equals(deviceClientAuthentication.getClientAuthenticationMethod())) {
return null;
}
String clientId = deviceClientAuthentication.getPrincipal().toString();
RegisteredClient registeredClient = this.registeredClientRepository.findByClientId(clientId);
if (registeredClient == null) {
throwInvalidClient(OAuth2ParameterNames.CLIENT_ID);
}
if (this.logger.isTraceEnabled()) {
this.logger.trace("Retrieved registered client");
}
if (!registeredClient.getClientAuthenticationMethods().contains(
deviceClientAuthentication.getClientAuthenticationMethod())) {
throwInvalidClient("authentication_method");
}
if (this.logger.isTraceEnabled()) {
this.logger.trace("Validated device client authentication parameters");
}
if (this.logger.isTraceEnabled()) {
this.logger.trace("Authenticated device client");
}
return new DeviceClientAuthenticationToken(registeredClient,
deviceClientAuthentication.getClientAuthenticationMethod(), null);
}
@Override
public boolean supports(Class<?> authentication) {
return DeviceClientAuthenticationToken.class.isAssignableFrom(authentication);
}
private static void throwInvalidClient(String parameterName) {
OAuth2Error error = new OAuth2Error(
OAuth2ErrorCodes.INVALID_CLIENT,
"Device client authentication failed: " + parameterName,
ERROR_URI
);
throw new OAuth2AuthenticationException(error);
}
}
================================================
FILE: src/main/java/com/revengemission/sso/oauth2/server/config/DeviceClientAuthenticationToken.java
================================================
package com.revengemission.sso.oauth2.server.config;
import java.util.Map;
import org.jspecify.annotations.Nullable;
import org.springframework.security.core.Transient;
import org.springframework.security.oauth2.core.ClientAuthenticationMethod;
import org.springframework.security.oauth2.server.authorization.authentication.OAuth2ClientAuthenticationToken;
import org.springframework.security.oauth2.server.authorization.client.RegisteredClient;
/**
* @author Joe Grandja
* @author Steve Riesenberg
* @since 1.1
*/
@Transient
public class DeviceClientAuthenticationToken extends OAuth2ClientAuthenticationToken {
public DeviceClientAuthenticationToken(String clientId, ClientAuthenticationMethod clientAuthenticationMethod,
@Nullable Object credentials, @Nullable Map<String, Object> additionalParameters) {
super(clientId, clientAuthenticationMethod, credentials, additionalParameters);
}
public DeviceClientAuthenticationToken(RegisteredClient registeredClient, ClientAuthenticationMethod clientAuthenticationMethod,
@Nullable Object credentials) {
super(registeredClient, clientAuthenticationMethod, credentials);
}
}
================================================
FILE: src/main/java/com/revengemission/sso/oauth2/server/config/FederatedIdentityAuthenticationSuccessHandler.java
================================================
package com.revengemission.sso.oauth2.server.config;
// tag::imports[]
import jakarta.servlet.ServletException;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import org.springframework.security.core.Authentication;
import org.springframework.security.oauth2.core.oidc.user.OidcUser;
import org.springframework.security.oauth2.core.user.OAuth2User;
import org.springframework.security.web.authentication.AuthenticationSuccessHandler;
import org.springframework.security.web.authentication.SavedRequestAwareAuthenticationSuccessHandler;
import java.io.IOException;
import java.util.function.Consumer;
// end::imports[]
/**
* An {@link AuthenticationSuccessHandler} for capturing the {@link OidcUser} or
* {@link OAuth2User} for Federated Account Linking or JIT Account Provisioning.
*
* @author Steve Riesenberg
* @since 1.1
*/
// tag::class[]
public final class FederatedIdentityAuthenticationSuccessHandler implements AuthenticationSuccessHandler {
private final AuthenticationSuccessHandler delegate = new SavedRequestAwareAuthenticationSuccessHandler();
private Consumer<OAuth2User> oauth2UserHandler = (user) -> {
};
private Consumer<OidcUser> oidcUserHandler = (user) -> this.oauth2UserHandler.accept(user);
@Override
public void onAuthenticationSuccess(HttpServletRequest request, HttpServletResponse response, Authentication authentication) throws IOException, ServletException {
if (authentication.getPrincipal() instanceof OidcUser) {
this.oidcUserHandler.accept((OidcUser) authentication.getPrincipal());
} else if (authentication.getPrincipal() instanceof OAuth2User) {
this.oauth2UserHandler.accept((OAuth2User) authentication.getPrincipal());
}
this.delegate.onAuthenticationSuccess(request, response, authentication);
}
public void setOAuth2UserHandler(Consumer<OAuth2User> oauth2UserHandler) {
this.oauth2UserHandler = oauth2UserHandler;
}
public void setOidcUserHandler(Consumer<OidcUser> oidcUserHandler) {
this.oidcUserHandler = oidcUserHandler;
}
}
================================================
FILE: src/main/java/com/revengemission/sso/oauth2/server/config/JdbcClientRegistrationRepository.java
================================================
package com.revengemission.sso.oauth2.server.config;
import com.revengemission.sso.oauth2.server.persistence.entity.OauthClientEntity;
import com.revengemission.sso.oauth2.server.persistence.repository.OauthClientRepository;
import org.springframework.security.oauth2.client.registration.ClientRegistration;
import org.springframework.security.oauth2.client.registration.ClientRegistrationRepository;
public class JdbcClientRegistrationRepository implements ClientRegistrationRepository {
OauthClientRepository oauthClientRepository;
public JdbcClientRegistrationRepository(OauthClientRepository oauthClientRepository) {
this.oauthClientRepository = oauthClientRepository;
}
ClientRegistration convertOauthClientEntityToClientRegistration(OauthClientEntity oauthClientEntity) {
ClientRegistration clientRegistration = ClientRegistration.
withRegistrationId(oauthClientEntity.getId() + "")
.clientId(oauthClientEntity.getClientId())
.clientSecret(oauthClientEntity.getClientSecret())
.clientName(oauthClientEntity.getApplicationName())
.build();
return clientRegistration;
}
@Override
public ClientRegistration findByRegistrationId(String registrationId) {
OauthClientEntity oauthClientEntity = oauthClientRepository.findByClientId(registrationId);
if (oauthClientEntity != null) {
ClientRegistration clientRegistration = convertOauthClientEntityToClientRegistration(oauthClientEntity);
return clientRegistration;
} else {
return null;
}
}
}
================================================
FILE: src/main/java/com/revengemission/sso/oauth2/server/config/SmsCodeTokenGranter.java
================================================
//package com.revengemission.sso.oauth2.server.config;
//
//import com.revengemission.sso.oauth2.server.service.CaptchaService;
//import org.apache.commons.lang3.StringUtils;
//import org.springframework.security.authentication.AbstractAuthenticationToken;
//import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
//import org.springframework.security.core.userdetails.UserDetails;
//import org.springframework.security.core.userdetails.UserDetailsService;
//import org.springframework.security.oauth2.common.exceptions.InvalidGrantException;
//import org.springframework.security.oauth2.provider.*;
//import org.springframework.security.oauth2.provider.token.AbstractTokenGranter;
//import org.springframework.security.oauth2.provider.token.AuthorizationServerTokenServices;
//
//import java.util.Map;
//
//public class SmsCodeTokenGranter extends AbstractTokenGranter {
//
// private static final String GRANT_TYPE = "sms_code";
//
// private UserDetailsService userDetailsService;
//
// private CaptchaService captchaService;
//
// public SmsCodeTokenGranter(UserDetailsService userDetailsService,
// AuthorizationServerTokenServices authorizationServerTokenServices,
// ClientDetailsService clientDetailsService, OAuth2RequestFactory requestFactory,
// CaptchaService captchaService) {
// super(authorizationServerTokenServices, clientDetailsService, requestFactory, GRANT_TYPE);
// this.userDetailsService = userDetailsService;
// this.captchaService = captchaService;
// }
//
// @Override
// protected OAuth2Authentication getOAuth2Authentication(ClientDetails client, TokenRequest tokenRequest) {
//
// Map<String, String> parameters = tokenRequest.getRequestParameters();
// // 客户端提交的用户名
// String userMobileNo = parameters.get("username");
// // 客户端提交的验证码
// String smsCodeInput = parameters.get("smsCode");
// // 客户端提交的验证码编号
// String smsId = parameters.get("smsId");
//
// // 从库里查用户
// UserDetails user = userDetailsService.loadUserByUsername(userMobileNo);
// if (user == null) {
// throw new InvalidGrantException("用户不存在");
// }
//
// // 验证用户状态(是否禁用等),代码略
// // 验证验证码
// String smsCodeCached = captchaService.getCaptcha(CachesEnum.SmsCaptchaCache, smsId);
//
// if (!StringUtils.equalsIgnoreCase(smsCodeCached, userMobileNo + "_" + smsCodeInput)) {
// throw new InvalidGrantException("验证码不正确");
// } else {
// captchaService.removeCaptcha(CachesEnum.SmsCaptchaCache, smsId);
// }
//
// AbstractAuthenticationToken userAuth = new UsernamePasswordAuthenticationToken(user, null, user.getAuthorities());
// // 关于user.getAuthorities(): 我们的自定义用户实体是实现了
// // org.springframework.security.core.userdetails.UserDetails 接口的, 所以有
// // user.getAuthorities()
// // 当然该参数传null也行
// userAuth.setDetails(parameters);
//
// OAuth2Request auth2Request = getRequestFactory().createOAuth2Request(client, tokenRequest);
// return new OAuth2Authentication(auth2Request, userAuth);
// }
//
//}
================================================
FILE: src/main/java/com/revengemission/sso/oauth2/server/config/TokenCustomizerConfig.java
================================================
package com.revengemission.sso.oauth2.server.config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.core.GrantedAuthority;
import org.springframework.security.core.userdetails.UserDetails;
import org.springframework.security.core.userdetails.UserDetailsService;
import org.springframework.security.oauth2.server.authorization.token.JwtEncodingContext;
import org.springframework.security.oauth2.server.authorization.token.OAuth2TokenCustomizer;
import java.util.Collection;
import java.util.stream.Collectors;
@Configuration
public class TokenCustomizerConfig {
@Bean
public OAuth2TokenCustomizer<JwtEncodingContext> tokenCustomizer(UserDetailsService userDetailsService) {
return (context) -> {
UserDetails userDetails = userDetailsService.loadUserByUsername(
context.getPrincipal().getName());
Collection<? extends GrantedAuthority> authorities = userDetails.getAuthorities();
context.getClaims().claims(claims ->
claims.put("authorities", authorities.stream().map(authority -> authority.getAuthority()).collect(Collectors.toList())));
};
}
}
================================================
FILE: src/main/java/com/revengemission/sso/oauth2/server/config/WeChatMiniProgramTokenGranter.java
================================================
//package com.revengemission.sso.oauth2.server.config;
//
//import com.fasterxml.jackson.core.type.TypeReference;
//import com.revengemission.sso.oauth2.server.domain.RoleEnum;
//import com.revengemission.sso.oauth2.server.domain.UserInfo;
//import com.revengemission.sso.oauth2.server.persistence.entity.RoleEntity;
//import com.revengemission.sso.oauth2.server.persistence.entity.ThirdPartyAccountEntity;
//import com.revengemission.sso.oauth2.server.persistence.repository.RoleRepository;
//import com.revengemission.sso.oauth2.server.persistence.repository.ThirdPartyAccountRepository;
//import com.revengemission.sso.oauth2.server.utils.JsonUtil;
//import org.springframework.security.authentication.AbstractAuthenticationToken;
//import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
//import org.springframework.security.core.GrantedAuthority;
//import org.springframework.security.core.authority.SimpleGrantedAuthority;
//import org.springframework.security.oauth2.common.exceptions.InvalidGrantException;
//import org.springframework.security.oauth2.provider.*;
//import org.springframework.security.oauth2.provider.token.AbstractTokenGranter;
//import org.springframework.security.oauth2.provider.token.AuthorizationServerTokenServices;
//import org.springframework.web.client.RestTemplate;
//
//import java.io.IOException;
//import java.util.*;
//
///**
// * 微信小程序登陆,返回JWT
// */
//public class WeChatMiniProgramTokenGranter extends AbstractTokenGranter {
//
// private static final String GRANT_TYPE = "wechat_mini";
// private String weChatCodeUrl = "https://api.weixin.qq.com/sns/jscode2session?appid={appId}&secret={secret}&js_code={code}&grant_type=authorization_code";
// private String appId;
// private String secret;
//
// private ThirdPartyAccountRepository thirdPartyAccountRepository;
//
// private RoleRepository roleRepository;
//
// private RestTemplate restTemplate = new RestTemplate();
//
// public WeChatMiniProgramTokenGranter(ThirdPartyAccountRepository thirdPartyAccountRepository,
// RoleRepository roleRepository,
// AuthorizationServerTokenServices authorizationServerTokenServices,
// ClientDetailsService clientDetailsService, OAuth2RequestFactory requestFactory,
// String appId,
// String secret) {
// super(authorizationServerTokenServices, clientDetailsService, requestFactory, GRANT_TYPE);
// this.thirdPartyAccountRepository = thirdPartyAccountRepository;
// this.roleRepository = roleRepository;
// this.appId = appId;
// this.secret = secret;
// }
//
// @Override
// protected OAuth2Authentication getOAuth2Authentication(ClientDetails client, TokenRequest tokenRequest) {
//
// Map<String, String> parameters = tokenRequest.getRequestParameters();
// //客户端提交的用户名
// String code = parameters.get("code");
//
// Map<String, Object> params = new HashMap<>(16);
// params.put("appId", appId);
// params.put("secret", secret);
// params.put("code", code);
// String result = restTemplate.getForObject(weChatCodeUrl, String.class, params);
//
// try {
// Map<String, String> openIdMap = JsonUtil.jsonStringToObject(result, new TypeReference<Map<String, String>>() {
// });
// if (openIdMap.containsKey("openid")) {
// String openId = openIdMap.get("openid");
// ThirdPartyAccountEntity thirdPartyAccountEntity = thirdPartyAccountRepository.findByThirdPartyAndThirdPartyAccountId(GRANT_TYPE, openId);
// if (thirdPartyAccountEntity == null) {
// thirdPartyAccountEntity = new ThirdPartyAccountEntity();
// thirdPartyAccountEntity.setThirdParty(GRANT_TYPE);
// thirdPartyAccountEntity.setThirdPartyAccountId(openId);
// thirdPartyAccountEntity.setAccountOpenCode(UUID.randomUUID().toString());
//
// RoleEntity roleEntity = roleRepository.findByRoleName(RoleEnum.ROLE_USER.name());
// thirdPartyAccountEntity.getRoles().add(roleEntity);
// thirdPartyAccountRepository.save(thirdPartyAccountEntity);
// }
//
// UserInfo user = new UserInfo(thirdPartyAccountEntity.getAccountOpenCode(), openId, "", getAuthorities(thirdPartyAccountEntity.getRoles()));
// AbstractAuthenticationToken userAuth = new UsernamePasswordAuthenticationToken(user, null, user.getAuthorities());
// // 关于user.getAuthorities(): 我们的自定义用户实体是实现了
// // org.springframework.security.core.userdetails.UserDetails 接口的, 所以有
// // user.getAuthorities()
// // 当然该参数传null也行
// userAuth.setDetails(parameters);
//
// OAuth2Request auth2Request = getRequestFactory().createOAuth2Request(client, tokenRequest);
// return new OAuth2Authentication(auth2Request, userAuth);
// } else {
// throw new InvalidGrantException("获取openid失败");
// }
// } catch (IOException e) {
// e.printStackTrace();
// throw new InvalidGrantException("获取openid失败");
// }
//
//
// }
//
// private Collection<? extends GrantedAuthority> getAuthorities(List<RoleEntity> roles) {
// List<GrantedAuthority> grantedAuthorities = new ArrayList<>();
// if (roles != null && roles.size() > 0) {
// for (RoleEntity temp : roles) {
// GrantedAuthority grantedAuthority = new SimpleGrantedAuthority(temp.getRoleName());
// grantedAuthorities.add(grantedAuthority);
// }
// }
// return grantedAuthorities;
// }
//
//
//}
================================================
FILE: src/main/java/com/revengemission/sso/oauth2/server/controller/AccessConfirmationController.java
================================================
//package com.revengemission.sso.oauth2.server.controller;
//
//import com.revengemission.sso.oauth2.server.domain.OauthClient;
//import com.revengemission.sso.oauth2.server.domain.ScopeDefinition;
//import com.revengemission.sso.oauth2.server.service.OauthClientService;
//import com.revengemission.sso.oauth2.server.service.ScopeDefinitionService;
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.security.oauth2.common.util.OAuth2Utils;
//import org.springframework.security.oauth2.provider.AuthorizationRequest;
//import org.springframework.stereotype.Controller;
//import org.springframework.ui.ModelMap;
//import org.springframework.web.bind.annotation.ModelAttribute;
//import org.springframework.web.bind.annotation.RequestMapping;
//import org.springframework.web.bind.annotation.RequestParam;
//import org.springframework.web.bind.annotation.SessionAttributes;
//
//import java.net.URI;
//import java.util.LinkedHashMap;
//import java.util.Map;
//
//@Controller
//@RequestMapping("/oauth")
//@SessionAttributes("authorizationRequest")
//public class AccessConfirmationController {
//
// @Autowired
// OauthClientService oauthClientService;
//
// @Autowired
// ScopeDefinitionService scopeDefinitionService;
//
//
// @RequestMapping("/confirm_access")
// public String getAccessConfirmation(@ModelAttribute AuthorizationRequest clientAuth,
// ModelMap model,
// @RequestParam(value = "redirect_uri") String redirectUri) {
// OauthClient client = oauthClientService.findByClientId(clientAuth.getClientId());
// model.put("auth_request", clientAuth);
// model.put("applicationName", client.getApplicationName());
// model.put("from", getHost(redirectUri));
// Map<String, String> scopes = new LinkedHashMap<>();
// for (String scope : clientAuth.getScope()) {
// ScopeDefinition scopeDefinition = scopeDefinitionService.findByScope(scope);
// if (scopeDefinition != null) {
// scopes.put(OAuth2Utils.SCOPE_PREFIX + scope, scopeDefinition.getDefinition());
// } else {
// scopes.put(OAuth2Utils.SCOPE_PREFIX + scope, scope);
// }
// }
// model.put("scopes", scopes);
// return "accessConfirmation";
// }
//
// /*@RequestMapping("/confirm_access")
// public ModelAndView getAccessConfirmation(@ModelAttribute AuthorizationRequest clientAuth) throws Exception {
// ClientDetails client = clientDetailsService.loadClientByClientId(clientAuth.getClientId());
// TreeMap<String, Object> model = new TreeMap<>();
// model.put("auth_request", clientAuth);
// model.put("client", client);
// ModelAndView a= new ModelAndView("accessConfirmation", model);
// return a;
// }*/
//
// @RequestMapping("/error")
// public String handleError(Map<String, Object> model) {
// // We can add more stuff to the model here for JSP rendering. If the client was a machine then
// // the JSON will already have been rendered.
//
// model.put("message", "There was a problem with the OAuth2 protocol");
// return "oauthError";
// }
//
// private String getHost(String url) {
// URI uri = URI.create(url);
// if (uri.getPort() == 80 || uri.getPort() == 443 || uri.getPort() == -1) {
// return uri.getScheme() + "://" + uri.getHost();
// } else {
// return uri.getScheme() + "://" + uri.getHost() + ":" + uri.getPort();
// }
// }
//}
================================================
FILE: src/main/java/com/revengemission/sso/oauth2/server/controller/CaptchaController.java
================================================
package com.revengemission.sso.oauth2.server.controller;
import cloud.tianai.captcha.application.ImageCaptchaApplication;
import cloud.tianai.captcha.application.TACBuilder;
import cloud.tianai.captcha.application.vo.ImageCaptchaVO;
import cloud.tianai.captcha.common.constant.CaptchaTypeConstant;
import cloud.tianai.captcha.common.response.ApiResponse;
import cloud.tianai.captcha.resource.common.model.dto.Resource;
import cloud.tianai.captcha.validator.common.model.dto.ImageCaptchaTrack;
import jakarta.servlet.http.HttpServletRequest;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;
import java.util.Collections;
import java.util.concurrent.ThreadLocalRandom;
@RequestMapping(value = "/captcha")
@Controller
public class CaptchaController implements InitializingBean {
private Logger log = LoggerFactory.getLogger(this.getClass());
private ImageCaptchaApplication imageCaptchaApplication;
@RequestMapping("/gen")
@ResponseBody
public ApiResponse<ImageCaptchaVO> genCaptcha(HttpServletRequest request,
@RequestParam(value = "type", required = false) String type) {
if (StringUtils.isBlank(type)) {
type = CaptchaTypeConstant.SLIDER;
}
if ("RANDOM".equals(type)) {
int i = ThreadLocalRandom.current().nextInt(0, 4);
if (i == 0) {
type = CaptchaTypeConstant.SLIDER;
} else if (i == 1) {
type = CaptchaTypeConstant.CONCAT;
} else if (i == 2) {
type = CaptchaTypeConstant.ROTATE;
} else {
type = CaptchaTypeConstant.WORD_IMAGE_CLICK;
}
}
ApiResponse<ImageCaptchaVO> response = imageCaptchaApplication.generateCaptcha(type);
return response;
}
@PostMapping("/check")
@ResponseBody
public ApiResponse<?> checkCaptcha(@RequestBody Data data,
HttpServletRequest request) {
ApiResponse<?> response = imageCaptchaApplication.matching(data.getId(), data.getData());
if (response.isSuccess()) {
return ApiResponse.ofSuccess(Collections.singletonMap("id", data.getId()));
}
return response;
}
@Override
public void afterPropertiesSet() throws Exception {
imageCaptchaApplication = TACBuilder.builder()
.addDefaultTemplate() // 添加默认模板
// 给滑块验证码 添加背景图片,宽高为600*360, Resource 参数1为 classpath/file/url , 参数2 为具体url
.addResource("SLIDER", new Resource("classpath", "META-INF/cut-image/resource/1.jpg")) // 滑块验证的背景图
.addResource("WORD_IMAGE_CLICK", new Resource("classpath", "META-INF/cut-image/resource/1.jpg")) // 文字点选的背景图
.addResource("ROTATE", new Resource("classpath", "META-INF/cut-image/resource/1.jpg")) // 旋转验证的背景图
.build();
// 2. 添加自定义背景图片
}
@lombok.Data
public static class Data {
private String id;
private ImageCaptchaTrack data;
}
/**
* 二次验证,一般用于机器内部调用,这里为了方便测试
*
* @param id id
* @return boolean
*/
@GetMapping("/check2")
@ResponseBody
public boolean check2Captcha(@RequestParam("id") String id) {
// 如果开启了二次验证
return false;
}
}
================================================
FILE: src/main/java/com/revengemission/sso/oauth2/server/controller/ManageClientController.java
================================================
package com.revengemission.sso.oauth2.server.controller;
import com.revengemission.sso.oauth2.server.domain.GlobalConstant;
import com.revengemission.sso.oauth2.server.domain.JsonObjects;
import com.revengemission.sso.oauth2.server.domain.OauthClient;
import com.revengemission.sso.oauth2.server.domain.ResponseResult;
import com.revengemission.sso.oauth2.server.service.OauthClientService;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.crypto.password.PasswordEncoder;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;
@Controller
@RequestMapping(value = "/management/client")
public class ManageClientController {
@Autowired
PasswordEncoder passwordEncoder;
@Autowired
OauthClientService oauthClientService;
@GetMapping(value = {"/", "", "/master"})
public String master() {
return "client/master";
}
@GetMapping(value = "/list")
@ResponseBody
public JsonObjects<OauthClient> listObjects(@RequestParam(value = "search", required = false) String searchValue,
@RequestParam(value = "offset", defaultValue = "0") int offset,
@RequestParam(value = "limit", defaultValue = "20") int limit,
@RequestParam(value = "sortField", defaultValue = "id") String sortField,
@RequestParam(value = "sortOrder", defaultValue = "desc") String sortOrder) {
int pageNum = offset / limit + 1;
return oauthClientService.list(pageNum, limit, sortField, sortOrder);
}
@GetMapping(value = "/details")
@ResponseBody
public OauthClient setupDetails(@RequestParam(value = "id") Long id,
@RequestParam(value = "additionalData", required = false) String additionalData) {
OauthClient object = oauthClientService.retrieveById(id);
object.setAdditionalData(additionalData);
return object;
}
@PostMapping(value = "/details")
@ResponseBody
public ResponseResult<Object> handlePost(@RequestParam(value = "id", required = false) long id,
@RequestParam(value = "deleteOperation", required = false, defaultValue = "1") int deleteOperation,
@RequestParam(value = "clientId", required = false) String clientId,
@RequestParam(value = "clientSecret", required = false) String clientSecret,
@RequestParam(value = "authorities", required = false) String authorities,
@RequestParam(value = "scope", required = false) String scope,
@RequestParam(value = "clientAuthenticationMethods", required = false) String clientAuthenticationMethods,
@RequestParam(value = "authorizedGrantTypes", required = false) String authorizedGrantTypes,
@RequestParam(value = "webServerRedirectUri", required = false) String webServerRedirectUri,
@RequestParam(value = "remarks", required = false) String remarks) {
ResponseResult<Object> responseResult = new ResponseResult<>();
if (deleteOperation == -1 && id > 0) {
oauthClientService.updateRecordStatus(id, 0);
responseResult.setStatus(GlobalConstant.SUCCESS);
} else if (deleteOperation == 0 && id > 0) {
oauthClientService.updateRecordStatus(id, -1);
responseResult.setStatus(GlobalConstant.SUCCESS);
} else if (id > 0) {
OauthClient object = oauthClientService.retrieveById(id);
if (StringUtils.isNotEmpty(clientSecret)) {
object.setClientSecret(passwordEncoder.encode(StringUtils.trim(clientSecret)));
}
if (StringUtils.isNotEmpty(authorities)) {
object.setAuthorities(authorities);
}
if (StringUtils.isNotEmpty(scope)) {
object.setScope(scope);
}
if (StringUtils.isNotEmpty(authorizedGrantTypes)) {
object.setAuthorizedGrantTypes(authorizedGrantTypes);
}
if (StringUtils.isNotEmpty(clientAuthenticationMethods)) {
object.setClientAuthenticationMethods(clientAuthenticationMethods);
}
if (StringUtils.isNotEmpty(webServerRedirectUri)) {
object.setWebServerRedirectUri(webServerRedirectUri);
}
if (StringUtils.isNotEmpty(remarks)) {
object.setRemarks(remarks);
}
oauthClientService.updateById(object);
responseResult.setStatus(GlobalConstant.SUCCESS);
} else {
if (StringUtils.isAnyEmpty(clientId, clientSecret, scope, authorizedGrantTypes, webServerRedirectUri)) {
responseResult.setStatus(GlobalConstant.ERROR);
} else {
OauthClient object = new OauthClient();
object.setId(null);
object.setClientId(clientId);
object.setClientSecret(passwordEncoder.encode(StringUtils.trim(clientSecret)));
object.setClientAuthenticationMethods(clientAuthenticationMethods);
object.setAuthorities(authorities);
object.setScope(scope);
object.setAuthorizedGrantTypes(authorizedGrantTypes);
object.setWebServerRedirectUri(webServerRedirectUri);
object.setRemarks(remarks);
oauthClientService.create(object);
responseResult.setStatus(GlobalConstant.SUCCESS);
}
}
return responseResult;
}
}
================================================
FILE: src/main/java/com/revengemission/sso/oauth2/server/controller/ManageUserController.java
================================================
package com.revengemission.sso.oauth2.server.controller;
import com.revengemission.sso.oauth2.server.domain.GlobalConstant;
import com.revengemission.sso.oauth2.server.domain.JsonObjects;
import com.revengemission.sso.oauth2.server.domain.ResponseResult;
import com.revengemission.sso.oauth2.server.domain.Role;
import com.revengemission.sso.oauth2.server.domain.UserAccount;
import com.revengemission.sso.oauth2.server.service.UserAccountService;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.crypto.password.PasswordEncoder;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
@Controller
@RequestMapping(value = "/management/user")
public class ManageUserController {
private Logger log = LoggerFactory.getLogger(this.getClass());
@Autowired
PasswordEncoder passwordEncoder;
@Autowired
UserAccountService userAccountService;
@GetMapping(value = {"/", "", "/master"})
public String master() {
return "user/master";
}
@GetMapping(value = "/list")
@ResponseBody
public JsonObjects<UserAccount> listObjects(@RequestParam(value = "search", required = false) String searchValue,
@RequestParam(value = "offset", defaultValue = "0") int offset,
@RequestParam(value = "limit", defaultValue = "20") int limit,
@RequestParam(value = "sortField", defaultValue = "id") String sortField,
@RequestParam(value = "sortOrder", defaultValue = "desc") String sortOrder) {
int pageNum = offset / limit + 1;
return userAccountService.listByUsername(searchValue, pageNum, limit, sortField, sortOrder);
}
@GetMapping(value = "/details")
@ResponseBody
public UserAccount setupDetails(@RequestParam(value = "id") Long id,
@RequestParam(value = "additionalData", required = false) String additionalData) {
UserAccount object = userAccountService.retrieveById(id);
object.setAdditionalData(additionalData);
return object;
}
@PostMapping(value = "/details")
@ResponseBody
public ResponseResult<Object> handlePost(@RequestParam(value = "id", required = false) long id,
@RequestParam(value = "deleteOperation", required = false, defaultValue = "1") int deleteOperation,
@RequestParam(value = "username", required = false) String username,
@RequestParam(value = "nickName", required = false) String nickName,
@RequestParam(value = "address", required = false) String address,
@RequestParam(value = "password", required = false) String password,
@RequestParam(value = "roles", required = false) String roles) {
ResponseResult<Object> responseResult = new ResponseResult<>();
if (deleteOperation == -2 && id > 0) {
userAccountService.updateRecordStatus(id, 0);
responseResult.setStatus(GlobalConstant.SUCCESS);
} else if (deleteOperation == 0 && id > 0) {
userAccountService.updateRecordStatus(id, -2);
responseResult.setStatus(GlobalConstant.SUCCESS);
} else if (id > 0) {
UserAccount object = userAccountService.retrieveById(id);
if (StringUtils.isNotEmpty(password)) {
object.setPassword(passwordEncoder.encode(StringUtils.trim(password)));
}
if (StringUtils.isNotEmpty(address)) {
object.setAddress(address);
}
object.getRoles().clear();
if (StringUtils.isNotEmpty(roles)) {
String[] roleArray = roles.split(",");
for (String s : roleArray) {
Role role = new Role();
role.setRoleName(s);
object.getRoles().add(role);
}
}
object.setUsername(username);
object.setNickName(nickName);
userAccountService.updateById(object);
} else if (id == 0) {
if (StringUtils.isAnyEmpty(username, password)) {
responseResult.setStatus(GlobalConstant.ERROR);
} else {
UserAccount object = new UserAccount();
object.setId(null);
object.setUsername(username);
object.setPassword(passwordEncoder.encode(StringUtils.trim(password)));
object.setAddress(address);
object.setNickName(nickName);
object.getRoles().clear();
if (StringUtils.isNotEmpty(roles)) {
String[] roleArray = roles.split(",");
for (String s : roleArray) {
Role role = new Role();
role.setRoleName(s);
object.getRoles().add(role);
}
}
userAccountService.create(object);
}
} else {
log.info("invalid request!");
responseResult.setStatus(GlobalConstant.ERROR);
}
return responseResult;
}
}
================================================
FILE: src/main/java/com/revengemission/sso/oauth2/server/controller/ProfileController.java
================================================
package com.revengemission.sso.oauth2.server.controller;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.revengemission.sso.oauth2.server.domain.EntityNotFoundException;
import com.revengemission.sso.oauth2.server.domain.UserAccount;
import com.revengemission.sso.oauth2.server.service.UserAccountService;
import com.revengemission.sso.oauth2.server.utils.CheckPasswordStrength;
import org.apache.commons.text.StringEscapeUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.format.annotation.DateTimeFormat;
import org.springframework.security.crypto.password.PasswordEncoder;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;
import java.security.Principal;
import java.time.LocalDate;
import java.util.regex.Pattern;
@Controller
public class ProfileController {
private Logger log = LoggerFactory.getLogger(this.getClass());
private static final Pattern AUTHORIZATION_PATTERN = Pattern.compile("^[B|b]]earer (?<token>[a-zA-Z0-9-._~+/]+)=*$");
@Autowired
UserAccountService userAccountService;
@Autowired
PasswordEncoder passwordEncoder;
@GetMapping(value = {"", "/", "/user/profile"})
public String profile(Principal principal,
Model model) {
try {
UserAccount userAccount = userAccountService.findByUsername(principal.getName());
model.addAttribute("userAccount", userAccount);
} catch (EntityNotFoundException e) {
if (log.isErrorEnabled()) {
log.error("findByUsername exception", e);
}
}
return "profile";
}
@PostMapping("/user/profile")
public String handleProfile(Principal principal,
@RequestParam(value = "nickName", required = false) String nickName,
@RequestParam(value = "avatarUrl", required = false) String avatarUrl,
@RequestParam(value = "email", required = false) String email,
@RequestParam(value = "mobile", required = false) String mobile,
@RequestParam(value = "province", required = false) String province,
@RequestParam(value = "city", required = false) String city,
@RequestParam(value = "address", required = false) String address,
@JsonFormat(pattern = "yyyy-MM-dd") @DateTimeFormat(pattern = "yyyy-MM-dd")
@RequestParam(value = "birthday", required = false) LocalDate birthday,
Model model) {
try {
UserAccount userAccount = userAccountService.findByUsername(principal.getName());
userAccount.setNickName(StringEscapeUtils.escapeHtml4(nickName));
userAccount.setAvatarUrl(StringEscapeUtils.escapeHtml4(avatarUrl));
userAccount.setEmail(StringEscapeUtils.escapeHtml4(email));
userAccount.setMobile(StringEscapeUtils.escapeHtml4(mobile));
userAccount.setProvince(StringEscapeUtils.escapeHtml4(province));
userAccount.setCity(StringEscapeUtils.escapeHtml4(city));
userAccount.setAddress(StringEscapeUtils.escapeHtml4(address));
userAccount.setBirthday(birthday);
userAccount = userAccountService.updateById(userAccount);
model.addAttribute("userAccount", userAccount);
model.addAttribute("updated", true);
} catch (EntityNotFoundException e) {
if (log.isErrorEnabled()) {
log.error("findByUsername exception", e);
}
model.addAttribute("updated", false);
model.addAttribute("error", e.getMessage());
}
return "profile";
}
@GetMapping(value = "/user/changePwd")
public String changePwd(Principal principal) {
return "changePwd";
}
@PostMapping("/user/changePwd")
public String handleChangePwd(Principal principal,
@RequestParam(value = "oldPassword") String oldPassword,
@RequestParam(value = "newPassword") String newPassword,
Model model) {
if (newPassword.length() < 6) {
model.addAttribute("updated", false);
model.addAttribute("error", "密码至少6位");
return "changePwd";
}
if (CheckPasswordStrength.check(newPassword) < 4) {
model.addAttribute("updated", false);
model.addAttribute("error", "密码安全等级较低,应包含字母、数字、符号");
return "changePwd";
}
try {
UserAccount userAccount = userAccountService.findByUsername(principal.getName());
if (!passwordEncoder.matches(oldPassword, userAccount.getPassword())) {
model.addAttribute("updated", false);
model.addAttribute("error", "原密码错误");
} else {
userAccount.setPassword(passwordEncoder.encode(newPassword));
userAccount = userAccountService.updateById(userAccount);
model.addAttribute("updated", true);
}
} catch (EntityNotFoundException e) {
if (log.isErrorEnabled()) {
log.error("findByUsername exception", e);
}
model.addAttribute("updated", false);
model.addAttribute("error", e.getMessage());
}
return "changePwd";
}
}
================================================
FILE: src/main/java/com/revengemission/sso/oauth2/server/controller/SignInAndUpController.java
================================================
package com.revengemission.sso.oauth2.server.controller;
import com.revengemission.sso.oauth2.server.domain.*;
import com.revengemission.sso.oauth2.server.service.RoleService;
import com.revengemission.sso.oauth2.server.service.UserAccountService;
import com.revengemission.sso.oauth2.server.utils.CheckPasswordStrength;
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.text.StringEscapeUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.security.crypto.password.PasswordEncoder;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import java.util.UUID;
@Controller
public class SignInAndUpController {
private Logger log = LoggerFactory.getLogger(this.getClass());
@Value("${signin.captcha:false}")
private boolean passwordCaptcha;
@Autowired
UserAccountService userAccountService;
@Autowired
PasswordEncoder passwordEncoder;
@Autowired
RoleService roleService;
@GetMapping("/signIn")
public String signIn(@RequestParam(value = "error", required = false) String error,
Model model) {
if (StringUtils.isNotEmpty(error)) {
model.addAttribute("error", error);
}
model.addAttribute("passwordCaptcha", passwordCaptcha);
return "signIn";
}
@GetMapping("/signUp")
public String signUp(@RequestParam(value = "error", required = false) String error,
Model model) {
if (StringUtils.isNotEmpty(error)) {
model.addAttribute("error", error);
}
return "signUp";
}
@ResponseBody
@PostMapping("/signUp")
public ResponseResult<Object> handleSignUp(@RequestParam(value = "username") String username,
@RequestParam(value = "password") String password) {
ResponseResult<Object> responseResult = new ResponseResult<>();
if (StringUtils.isAnyBlank(username, password)) {
responseResult.setStatus(GlobalConstant.ERROR);
responseResult.setMessage("请检查输入");
return responseResult;
}
username = StringUtils.trimToEmpty(username).toLowerCase();
password = StringUtils.trimToEmpty(password);
if (username.length() < 6) {
responseResult.setStatus(GlobalConstant.ERROR);
responseResult.setMessage("用户名至少6位");
return responseResult;
}
if (password.length() < 6) {
responseResult.setStatus(GlobalConstant.ERROR);
responseResult.setMessage("密码至少6位");
return responseResult;
}
if (CheckPasswordStrength.check(password) < 4) {
responseResult.setStatus(GlobalConstant.ERROR);
responseResult.setMessage("密码安全等级较低,应包含字母、数字、符号");
return responseResult;
}
UserAccount userAccount = new UserAccount();
Role userRole = roleService.findByRoleName(RoleEnum.ROLE_USER.name());
userAccount.getRoles().add(userRole);
userAccount.setUsername(StringEscapeUtils.escapeHtml4(username));
userAccount.setPassword(passwordEncoder.encode(password));
userAccount.setAccountOpenCode(UUID.randomUUID().toString());
try {
userAccountService.create(userAccount);
} catch (AlreadyExistsException e) {
if (log.isErrorEnabled()) {
log.error("create user exception", e);
}
responseResult.setStatus(GlobalConstant.ERROR);
responseResult.setMessage("用户已经存在");
} catch (Exception e) {
if (log.isErrorEnabled()) {
log.error("create user exception", e);
}
responseResult.setStatus(GlobalConstant.ERROR);
responseResult.setMessage("错误,请重试");
}
return responseResult;
}
}
================================================
FILE: src/main/java/com/revengemission/sso/oauth2/server/domain/AlreadyExistsException.java
================================================
package com.revengemission.sso.oauth2.server.domain;
public class AlreadyExistsException extends RuntimeException {
/**
*
*/
private static final long serialVersionUID = -6339375431784377618L;
public AlreadyExistsException() {
super();
}
public AlreadyExistsException(String message) {
super(message);
}
}
================================================
FILE: src/main/java/com/revengemission/sso/oauth2/server/domain/AlreadyExpiredException.java
================================================
package com.revengemission.sso.oauth2.server.domain;
public class AlreadyExpiredException extends RuntimeException {
/**
*
*/
private static final long serialVersionUID = -8072288419946143939L;
public AlreadyExpiredException() {
super();
}
public AlreadyExpiredException(String message) {
super(message);
}
}
================================================
FILE: src/main/java/com/revengemission/sso/oauth2/server/domain/BaseDomain.java
================================================
package com.revengemission.sso.oauth2.server.domain;
import com.fasterxml.jackson.annotation.JsonInclude;
import lombok.Data;
import java.io.Serializable;
import java.time.LocalDateTime;
@JsonInclude(JsonInclude.Include.NON_NULL)
@Data
public class BaseDomain implements Serializable {
private String id;
/**
* 创建时间
*/
private LocalDateTime dateCreated;
/**
* 修改时间
*/
private LocalDateTime lastModified;
private int recordStatus;
private int sortPriority;
/**
* 更改次数/每次修改+1
*/
private int version;
private String remarks;
private String additionalData;
}
================================================
FILE: src/main/java/com/revengemission/sso/oauth2/server/domain/EntityNotFoundException.java
================================================
package com.revengemission.sso.oauth2.server.domain;
public class EntityNotFoundException extends RuntimeException {
/**
*
*/
private static final long serialVersionUID = -6577853129626594556L;
public EntityNotFoundException() {
super();
}
public EntityNotFoundException(String message) {
super(message);
}
}
================================================
FILE: src/main/java/com/revengemission/sso/oauth2/server/domain/GenderEnum.java
================================================
package com.revengemission.sso.oauth2.server.domain;
public enum GenderEnum {
/**
* 男
*/
MALE("男"),
/**
* 女
*/
FEMALE("女"),
/**
* 未知
*/
UNKNOWN("未知");
private String meaning;
public String getMeaning() {
return meaning;
}
GenderEnum() {
}
GenderEnum(String meaning) {
this.meaning = meaning;
}
}
================================================
FILE: src/main/java/com/revengemission/sso/oauth2/server/domain/GlobalConstant.java
================================================
package com.revengemission.sso.oauth2.server.domain;
public class GlobalConstant {
/**
* 返回成功
*/
public final static int SUCCESS = 1;
/**
* 返回失败
*/
public final static int ERROR = -1;
/**
* 参数类型错误
*/
public final static int ERROR_PARAMETER_TYPE = 400;
/**
* 没有找到
*/
public final static int ERROR_NOT_FOUNT = 404;
/**
* 未登录
*/
public final static int ERROR_NO_LOGIN = 401;
/**
* 权限不足
*/
public final static int ERROR_DENIED = 403;
/**
* 验证码key
*/
public final static String VERIFICATION_CODE = "verificationCode";
/**
* 验证码Id
*/
public final static String GRAPH_ID = "graphId";
}
================================================
FILE: src/main/java/com/revengemission/sso/oauth2/server/domain/JsonObjects.java
================================================
package com.revengemission.sso.oauth2.server.domain;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
public class JsonObjects<T> implements Serializable {
/**
*
*/
private static final long serialVersionUID = 5382742283722856873L;
private List<T> rows;
private long total;
private long pages;
public List<T> getRows() {
if (rows == null) {
rows = new ArrayList<>();
}
return rows;
}
public void setRows(List<T> rows) {
this.rows = rows;
}
public long getTotal() {
return total;
}
public void setTotal(long total) {
this.total = total;
}
public long getPages() {
return pages;
}
public void setPages(long pages) {
this.pages = pages;
}
}
================================================
FILE: src/main/java/com/revengemission/sso/oauth2/server/domain/LoginHistory.java
================================================
package com.revengemission.sso.oauth2.server.domain;
import com.fasterxml.jackson.annotation.JsonInclude;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.ToString;
@JsonInclude(JsonInclude.Include.NON_NULL)
@ToString(callSuper = true)
@EqualsAndHashCode(callSuper = true)
@Data
public class LoginHistory extends BaseDomain {
/**
*
*/
private static final long serialVersionUID = -3503838536778480869L;
private String clientId;
private String username;
private String ip;
private String device;
}
================================================
FILE: src/main/java/com/revengemission/sso/oauth2/server/domain/NotImplementException.java
================================================
package com.revengemission.sso.oauth2.server.domain;
public class NotImplementException extends RuntimeException{
/**
*
*/
private static final long serialVersionUID = -1594183961301143050L;
public NotImplementException() {
super();
}
public NotImplementException(String message) {
super(message);
}
}
================================================
FILE: src/main/java/com/revengemission/sso/oauth2/server/domain/OAuth2Exception.java
================================================
package com.revengemission.sso.oauth2.server.domain;
import org.springframework.http.HttpStatus;
public class OAuth2Exception extends RuntimeException {
private HttpStatus httpStatus = HttpStatus.BAD_REQUEST;
private String errorCode = "invalid_request";
public OAuth2Exception(String msg) {
super(msg);
}
public OAuth2Exception(String msg, Throwable t) {
super(msg, t);
}
public OAuth2Exception(String msg, HttpStatus httpStatus, String errorCode) {
super(msg);
this.httpStatus = httpStatus;
this.errorCode = errorCode;
}
public OAuth2Exception(String msg, Throwable t, HttpStatus httpStatus, String errorCode) {
super(msg, t);
this.httpStatus = httpStatus;
this.errorCode = errorCode;
}
public HttpStatus getHttpStatus() {
return httpStatus;
}
public void setHttpStatus(HttpStatus httpStatus) {
this.httpStatus = httpStatus;
}
public String getErrorCode() {
return errorCode;
}
public void setErrorCode(String errorCode) {
this.errorCode = errorCode;
}
}
================================================
FILE: src/main/java/com/revengemission/sso/oauth2/server/domain/OauthClient.java
================================================
package com.revengemission.sso.oauth2.server.domain;
import com.fasterxml.jackson.annotation.JsonInclude;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.ToString;
import java.time.LocalDateTime;
@JsonInclude(JsonInclude.Include.NON_NULL)
@ToString(callSuper = true)
@EqualsAndHashCode(callSuper = true)
@Data
public class OauthClient extends BaseDomain {
private static final long serialVersionUID = 8626957691648832578L;
private String clientId;
private String applicationName;
private String resourceIds;
private String clientSecret;
private String clientAuthenticationMethods;
private String scope;
private String authorizedGrantTypes;
private String webServerRedirectUri;
private String authorities;
private int accessTokenValidity = 60 * 60 * 2;
private int refreshTokenValidity = 60 * 60 * 24;
private String additionalInformation;
private String autoApprove;
/**
* 客户端过期时间
*/
private LocalDateTime expirationDate;
}
================================================
FILE: src/main/java/com/revengemission/sso/oauth2/server/domain/ParameterException.java
================================================
package com.revengemission.sso.oauth2.server.domain;
public class ParameterException extends RuntimeException {
/**
*
*/
private static final long serialVersionUID = 8554445074328098530L;
public ParameterException() {
super();
}
public ParameterException(String message) {
super(message);
}
}
================================================
FILE: src/main/java/com/revengemission/sso/oauth2/server/domain/ResponseResult.java
================================================
package com.revengemission.sso.oauth2.server.domain;
import com.fasterxml.jackson.annotation.JsonInclude;
import java.io.Serializable;
@JsonInclude(JsonInclude.Include.NON_NULL)
public class ResponseResult<T> implements Serializable {
private static final long serialVersionUID = 613307369635832439L;
private Long id;
/**
* 请求状态是否成功
*/
private int status;
private String error;
/**
* 详细的信息
*/
private String message;
private String path;
/**
* 时间戳
*/
private Long timestamp;
/**
* 返回对象
*/
private T data;
private Long total;
private Integer ack;
private Object additional;
public ResponseResult() {
this.status = GlobalConstant.SUCCESS;
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public int getStatus() {
return status;
}
public void setStatus(int status) {
this.status = status;
}
public String getError() {
return error;
}
public void setError(String error) {
this.error = error;
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
public String getPath() {
return path;
}
public void setPath(String path) {
this.path = path;
}
public Long getTimestamp() {
if (timestamp == null) {
timestamp = System.currentTimeMillis();
}
return timestamp;
}
public void setTimestamp(Long timestamp) {
this.timestamp = timestamp;
}
public Long getTotal() {
return total;
}
public void setTotal(Long total) {
this.total = total;
}
public Integer getAck() {
return ack;
}
public void setAck(Integer ack) {
this.ack = ack;
}
public Object getAdditional() {
return additional;
}
public void setAdditional(Object additional) {
this.additional = additional;
}
public T getData() {
return data;
}
public void setData(T data) {
this.data = data;
}
public String getIdString() {
if (id == null) {
return null;
}
return id + "";
}
public ResponseResult(int status, String message) {
this.status = status;
this.message = message;
}
public ResponseResult(int status, String message, T data) {
this.status = status;
this.message = message;
this.data = data;
}
}
================================================
FILE: src/main/java/com/revengemission/sso/oauth2/server/domain/Role.java
================================================
package com.revengemission.sso.oauth2.server.domain;
import com.fasterxml.jackson.annotation.JsonInclude;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.ToString;
import java.util.Date;
import java.util.List;
@JsonInclude(JsonInclude.Include.NON_NULL)
@ToString(callSuper = true)
@EqualsAndHashCode(callSuper = true)
@Data
public class Role extends BaseDomain {
private String roleName;
}
================================================
FILE: src/main/java/com/revengemission/sso/oauth2/server/domain/RoleEnum.java
================================================
package com.revengemission.sso.oauth2.server.domain;
public enum RoleEnum {
/**
* 普通用户
*/
ROLE_USER("普通用户"),
/**
* 管理员
*/
ROLE_ADMIN("管理员"),
/**
* 超级
*/
ROLE_SUPER("超级");
private String meaning;
public String getMeaning() {
return meaning;
}
RoleEnum() {
}
RoleEnum(String meaning) {
this.meaning = meaning;
}
}
================================================
FILE: src/main/java/com/revengemission/sso/oauth2/server/domain/ScopeDefinition.java
================================================
package com.revengemission.sso.oauth2.server.domain;
public class ScopeDefinition extends BaseDomain {
/**
*
*/
private static final long serialVersionUID = 2862177859444895431L;
private String scope;
/**
* 定义 解释
*/
private String definition;
public String getScope() {
return scope;
}
public void setScope(String scope) {
this.scope = scope;
}
public String getDefinition() {
return definition;
}
public void setDefinition(String definition) {
this.definition = definition;
}
}
================================================
FILE: src/main/java/com/revengemission/sso/oauth2/server/domain/UserAccount.java
================================================
package com.revengemission.sso.oauth2.server.domain;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonInclude;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.ToString;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.List;
@JsonInclude(JsonInclude.Include.NON_NULL)
@ToString(callSuper = true)
@EqualsAndHashCode(callSuper = true)
@Data
public class UserAccount extends BaseDomain {
/**
*
*/
private static final long serialVersionUID = -2355580690719376576L;
private String username;
@JsonIgnore
private String password;
/**
* 多种登陆方式合并账号使用
*/
private String accountOpenCode;
private String nickName;
private String avatarUrl;
private String email;
private String mobile;
private String province;
private String city;
private String address;
private LocalDate birthday;
private String gender;
private LocalDateTime failureTime;
private int failureCount;
private List<Role> roles = new ArrayList<>();
}
================================================
FILE: src/main/java/com/revengemission/sso/oauth2/server/domain/UserInfo.java
================================================
package com.revengemission.sso.oauth2.server.domain;
import org.springframework.security.core.GrantedAuthority;
import org.springframework.security.core.userdetails.User;
import java.util.Collection;
public class UserInfo extends User {
private static final long serialVersionUID = -1682227070901462452L;
private String accountOpenCode;
private String nickname;
public UserInfo(String accountOpenCode, String username, String password, Collection<? extends GrantedAuthority> authorities) {
this(accountOpenCode, username, password, true, true, true, true, authorities);
}
public UserInfo(String accountOpenCode, String username, String password, boolean enabled,
boolean accountNonExpired, boolean credentialsNonExpired,
boolean accountNonLocked,
Collection<? extends GrantedAuthority> authorities)
throws IllegalArgumentException {
super(username, password, enabled, accountNonExpired,
credentialsNonExpired, accountNonLocked, authorities);
this.accountOpenCode = accountOpenCode;
}
public String getAccountOpenCode() {
return accountOpenCode;
}
public void setAccountOpenCode(String accountOpenCode) {
this.accountOpenCode = accountOpenCode;
}
public String getNickname() {
return nickname;
}
public void setNickname(String nickname) {
this.nickname = nickname;
}
}
================================================
FILE: src/main/java/com/revengemission/sso/oauth2/server/domain/VerificationCodeException.java
================================================
package com.revengemission.sso.oauth2.server.domain;
import org.springframework.security.core.AuthenticationException;
public class VerificationCodeException extends AuthenticationException {
/**
*
*/
private static final long serialVersionUID = 4158670139382486655L;
public VerificationCodeException(String msg) {
super(msg);
}
public VerificationCodeException(String msg, Throwable t) {
super(msg, t);
}
}
================================================
FILE: src/main/java/com/revengemission/sso/oauth2/server/jose/Jwks.java
================================================
package com.revengemission.sso.oauth2.server.jose;
import com.nimbusds.jose.jwk.Curve;
import com.nimbusds.jose.jwk.ECKey;
import com.nimbusds.jose.jwk.OctetSequenceKey;
import com.nimbusds.jose.jwk.RSAKey;
import javax.crypto.SecretKey;
import java.security.KeyPair;
import java.security.interfaces.ECPrivateKey;
import java.security.interfaces.ECPublicKey;
import java.security.interfaces.RSAPrivateKey;
import java.security.interfaces.RSAPublicKey;
import java.util.UUID;
public final class Jwks {
private Jwks() {
}
public static RSAKey generateRsa() {
KeyPair keyPair = KeyGeneratorUtils.generateRsaKey();
RSAPublicKey publicKey = (RSAPublicKey) keyPair.getPublic();
RSAPrivateKey privateKey = (RSAPrivateKey) keyPair.getPrivate();
return new RSAKey.Builder(publicKey)
.privateKey(privateKey)
.keyID(UUID.randomUUID().toString())
.build();
}
public static ECKey generateEc() {
KeyPair keyPair = KeyGeneratorUtils.generateEcKey();
ECPublicKey publicKey = (ECPublicKey) keyPair.getPublic();
ECPrivateKey privateKey = (ECPrivateKey) keyPair.getPrivate();
Curve curve = Curve.forECParameterSpec(publicKey.getParams());
return new ECKey.Builder(curve, publicKey)
.privateKey(privateKey)
.keyID(UUID.randomUUID().toString())
.build();
}
public static OctetSequenceKey generateSecret() {
SecretKey secretKey = KeyGeneratorUtils.generateSecretKey();
return new OctetSequenceKey.Builder(secretKey)
.keyID(UUID.randomUUID().toString())
.build();
}
}
================================================
FILE: src/main/java/com/revengemission/sso/oauth2/server/jose/KeyGeneratorUtils.java
================================================
package com.revengemission.sso.oauth2.server.jose;
import javax.crypto.KeyGenerator;
import javax.crypto.SecretKey;
import java.math.BigInteger;
import java.security.KeyPair;
import java.security.KeyPairGenerator;
import java.security.spec.ECFieldFp;
import java.security.spec.ECParameterSpec;
import java.security.spec.ECPoint;
import java.security.spec.EllipticCurve;
final class KeyGeneratorUtils {
private KeyGeneratorUtils() {
}
static SecretKey generateSecretKey() {
SecretKey hmacKey;
try {
hmacKey = KeyGenerator.getInstance("HmacSha256").generateKey();
} catch (Exception ex) {
throw new IllegalStateException(ex);
}
return hmacKey;
}
static KeyPair generateRsaKey() {
KeyPair keyPair;
try {
KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("RSA");
keyPairGenerator.initialize(2048);
keyPair = keyPairGenerator.generateKeyPair();
} catch (Exception ex) {
throw new IllegalStateException(ex);
}
return keyPair;
}
static KeyPair generateEcKey() {
EllipticCurve ellipticCurve = new EllipticCurve(
new ECFieldFp(
new BigInteger("115792089210356248762697446949407573530086143415290314195533631308867097853951")),
new BigInteger("115792089210356248762697446949407573530086143415290314195533631308867097853948"),
new BigInteger("41058363725152142129326129780047268409114441015993725554835256314039467401291"));
ECPoint ecPoint = new ECPoint(
new BigInteger("48439561293906451759052585252797914202762949526041747995844080717082404635286"),
new BigInteger("36134250956749795798585127919587881956611106672985015071877198253568414405109"));
ECParameterSpec ecParameterSpec = new ECParameterSpec(
ellipticCurve,
ecPoint,
new BigInteger("115792089210356248762697446949407573529996955224135760342422259061068512044369"),
1);
KeyPair keyPair;
try {
KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("EC");
keyPairGenerator.initialize(ecParameterSpec);
keyPair = keyPairGenerator.generateKeyPair();
} catch (Exception ex) {
throw new IllegalStateException(ex);
}
return keyPair;
}
}
================================================
FILE: src/main/java/com/revengemission/sso/oauth2/server/mapper/BaseMapper.java
================================================
package com.revengemission.sso.oauth2.server.mapper;
import org.mapstruct.Named;
public interface BaseMapper {
// 全局字符串转 Long 转换方法
@Named("stringToLong")
default Long stringToLong(String str) {
if (str == null || str.trim().isEmpty()) {
return null;
}
try {
return Long.valueOf(str);
} catch (NumberFormatException e) {
return null;
}
}
}
================================================
FILE: src/main/java/com/revengemission/sso/oauth2/server/mapper/LoginHistoryMapper.java
================================================
package com.revengemission.sso.oauth2.server.mapper;
import com.revengemission.sso.oauth2.server.domain.LoginHistory;
import com.revengemission.sso.oauth2.server.persistence.entity.LoginHistoryEntity;
import org.mapstruct.Mapper;
import org.mapstruct.Mapping;
import org.mapstruct.MappingConstants;
import org.mapstruct.ReportingPolicy;
import org.mapstruct.factory.Mappers;
@Mapper(unmappedTargetPolicy = ReportingPolicy.IGNORE, componentModel = MappingConstants.ComponentModel.SPRING)
public interface LoginHistoryMapper {
LoginHistoryMapper INSTANCE = Mappers.getMapper(LoginHistoryMapper.class);
@Mapping(target = "username", source = "username")
LoginHistory entityToDto(LoginHistoryEntity entity);
@Mapping(target = "username", source = "username")
LoginHistoryEntity dtoToEntity(LoginHistory dto);
}
================================================
FILE: src/main/java/com/revengemission/sso/oauth2/server/mapper/OauthClientMapper.java
================================================
package com.revengemission.sso.oauth2.server.mapper;
import com.revengemission.sso.oauth2.server.domain.OauthClient;
import com.revengemission.sso.oauth2.server.persistence.entity.OauthClientEntity;
import org.mapstruct.Mapper;
import org.mapstruct.Mapping;
import org.mapstruct.MappingConstants;
import org.mapstruct.ReportingPolicy;
import org.mapstruct.factory.Mappers;
@Mapper(unmappedTargetPolicy = ReportingPolicy.IGNORE, componentModel = MappingConstants.ComponentModel.SPRING)
public interface OauthClientMapper {
OauthClientMapper INSTANCE = Mappers.getMapper(OauthClientMapper.class);
@Mapping(target = "clientId", source = "clientId")
OauthClient entityToDto(OauthClientEntity entity);
@Mapping(target = "clientId", source = "clientId")
OauthClientEntity dtoToEntity(OauthClient dto);
}
================================================
FILE: src/main/java/com/revengemission/sso/oauth2/server/mapper/RoleMapper.java
================================================
package com.revengemission.sso.oauth2.server.mapper;
import com.revengemission.sso.oauth2.server.domain.Role;
import com.revengemission.sso.oauth2.server.persistence.entity.RoleEntity;
import org.mapstruct.Mapper;
import org.mapstruct.Mapping;
import org.mapstruct.MappingConstants;
import org.mapstruct.ReportingPolicy;
import org.mapstruct.factory.Mappers;
@Mapper(unmappedTargetPolicy = ReportingPolicy.IGNORE, componentModel = MappingConstants.ComponentModel.SPRING)
public interface RoleMapper {
RoleMapper INSTANCE = Mappers.getMapper(RoleMapper.class);
@Mapping(target = "roleName", source = "roleName")
Role entityToDto(RoleEntity entity);
@Mapping(target = "roleName", source = "roleName")
RoleEntity dtoToEntity(Role dto);
}
================================================
FILE: src/main/java/com/revengemission/sso/oauth2/server/mapper/ScopeDefinitionMapper.java
================================================
package com.revengemission.sso.oauth2.server.mapper;
import com.revengemission.sso.oauth2.server.domain.ScopeDefinition;
import com.revengemission.sso.oauth2.server.persistence.entity.ScopeDefinitionEntity;
import org.mapstruct.Mapper;
import org.mapstruct.Mapping;
import org.mapstruct.MappingConstants;
import org.mapstruct.ReportingPolicy;
import org.mapstruct.factory.Mappers;
@Mapper(unmappedTargetPolicy = ReportingPolicy.IGNORE, componentModel = MappingConstants.ComponentModel.SPRING)
public interface ScopeDefinitionMapper {
ScopeDefinitionMapper INSTANCE = Mappers.getMapper(ScopeDefinitionMapper.class);
@Mapping(target = "scope", source = "scope")
ScopeDefinition entityToDto(ScopeDefinitionEntity entity);
@Mapping(target = "scope", source = "scope")
ScopeDefinitionEntity dtoToEntity(ScopeDefinition dto);
}
================================================
FILE: src/main/java/com/revengemission/sso/oauth2/server/mapper/UserAccountMapper.java
================================================
package com.revengemission.sso.oauth2.server.mapper;
import com.revengemission.sso.oauth2.server.domain.UserAccount;
import com.revengemission.sso.oauth2.server.persistence.entity.UserAccountEntity;
import org.mapstruct.Mapper;
import org.mapstruct.Mapping;
import org.mapstruct.MappingConstants;
import org.mapstruct.ReportingPolicy;
import org.mapstruct.factory.Mappers;
@Mapper(unmappedTargetPolicy = ReportingPolicy.IGNORE, componentModel = MappingConstants.ComponentModel.SPRING)
public interface UserAccountMapper extends BaseMapper {
UserAccountMapper INSTANCE = Mappers.getMapper(UserAccountMapper.class);
@Mapping(target = "username", source = "username")
UserAccount entityToDto(UserAccountEntity entity);
@Mapping(target = "username", source = "username")
@Mapping(source = "id", target = "id", qualifiedByName = "stringToLong")
UserAccountEntity dtoToEntity(UserAccount dto);
}
================================================
FILE: src/main/java/com/revengemission/sso/oauth2/server/persistence/entity/BaseEntity.java
================================================
package com.revengemission.sso.oauth2.server.persistence.entity;
import jakarta.persistence.Column;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.GenerationType;
import jakarta.persistence.Id;
import jakarta.persistence.MappedSuperclass;
import jakarta.persistence.PrePersist;
import jakarta.persistence.PreUpdate;
import jakarta.persistence.Version;
import java.io.Serializable;
import java.time.LocalDateTime;
@MappedSuperclass
public abstract class BaseEntity implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(name = "record_status", columnDefinition = "int default 0")
private int recordStatus;
@Version
@Column(name = "version", columnDefinition = "int default 0")
private int version;
private String remarks;
@Column(name = "sort_priority", columnDefinition = "int default 0")
private int sortPriority;
@Column(columnDefinition = "DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP")
private LocalDateTime dateCreated;
@Column(columnDefinition = "DATETIME DEFAULT CURRENT_TIMESTAMP ON update CURRENT_TIMESTAMP")
private LocalDateTime lastModified;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public int getRecordStatus() {
return recordStatus;
}
public void setRecordStatus(int recordStatus) {
this.recordStatus = recordStatus;
}
public int getVersion() {
return version;
}
public void setVersion(int version) {
this.version = version;
}
public String getRemarks() {
return remarks;
}
public void setRemarks(String remarks) {
this.remarks = remarks;
}
public int getSortPriority() {
return sortPriority;
}
public void setSortPriority(int sortPriority) {
this.sortPriority = sortPriority;
}
public LocalDateTime getDateCreated() {
return dateCreated;
}
public void setDateCreated(LocalDateTime dateCreated) {
this.dateCreated = dateCreated;
}
public LocalDateTime getLastModified() {
return lastModified;
}
public void setLastModified(LocalDateTime lastModified) {
this.lastModified = lastModified;
}
@PreUpdate
@PrePersist
public void updateTimeStamps() {
lastModified = LocalDateTime.now();
if (dateCreated == null) {
dateCreated = LocalDateTime.now();
}
}
}
================================================
FILE: src/main/java/com/revengemission/sso/oauth2/server/persistence/entity/LoginHistoryEntity.java
================================================
package com.revengemission.sso.oauth2.server.persistence.entity;
import jakarta.persistence.Column;
import jakarta.persistence.Entity;
import jakarta.persistence.Index;
import jakarta.persistence.Table;
@Entity
@Table(indexes = {@Index(name = "index_username", columnList = "username")})
public class LoginHistoryEntity extends BaseEntity {
/**
*
*/
private static final long serialVersionUID = -7088423724470075317L;
/**
* 用于记录用户在哪个子系统进行的登陆
*/
private String clientId;
@Column(nullable = false, columnDefinition = "VARCHAR(40)")
private String username;
private String ip;
private String device;
public String getClientId() {
return clientId;
}
public void setClientId(String clientId) {
this.clientId = clientId;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getIp() {
return ip;
}
public void setIp(String ip) {
this.ip = ip;
}
public String getDevice() {
return device;
}
public void setDevice(String device) {
this.device = device;
}
}
================================================
FILE: src/main/java/com/revengemission/sso/oauth2/server/persistence/entity/Oauth2AuthorizationConsent.java
================================================
package com.revengemission.sso.oauth2.server.persistence.entity;
import jakarta.persistence.Entity;
import jakarta.persistence.Table;
import jakarta.persistence.UniqueConstraint;
@Entity
@Table(uniqueConstraints = @UniqueConstraint(columnNames = {"registeredClientId", "principalName"}))
public class Oauth2AuthorizationConsent extends BaseEntity {
private static final long serialVersionUID = 1522239249392557103L;
private String registeredClientId;
private String principalName;
private String authorities;
public String getRegisteredClientId() {
return registeredClientId;
}
public void setRegisteredClientId(String registeredClientId) {
this.registeredClientId = registeredClientId;
}
public String getPrincipalName() {
return principalName;
}
public void setPrincipalName(String principalName) {
this.principalName = principalName;
}
public String getAuthorities() {
return authorities;
}
public void setAuthorities(String authorities) {
this.authorities = authorities;
}
}
================================================
FILE: src/main/java/com/revengemission/sso/oauth2/server/persistence/entity/OauthClientEntity.java
================================================
package com.revengemission.sso.oauth2.server.persistence.entity;
import jakarta.persistence.Column;
import jakarta.persistence.Entity;
import jakarta.persistence.Table;
import jakarta.persistence.UniqueConstraint;
import org.springframework.security.oauth2.core.ClientAuthenticationMethod;
import java.time.LocalDateTime;
@Entity
@Table(uniqueConstraints = @UniqueConstraint(columnNames = {"clientId"}))
public class OauthClientEntity extends BaseEntity {
/**
*
*/
private static final long serialVersionUID = -3042356579574873614L;
@Column(nullable = false)
private String clientId;
private String applicationName;
private String resourceIds;
@Column(nullable = false)
private String clientSecret;
private String clientAuthenticationMethods;
private String scope;
@Column(nullable = false)
private String authorizedGrantTypes;
private String webServerRedirectUri;
private String authorities;
private Integer accessTokenValidity;
private Integer refreshTokenValidity;
private String additionalInformation;
private String autoApprove;
/**
* 客户端过期时间,比如应用于多店系统
*/
private LocalDateTime expirationDate;
public String getClientId() {
return clientId;
}
public void setClientId(String clientId) {
this.clientId = clientId;
}
public String getApplicationName() {
return applicationName;
}
public void setApplicationName(String applicationName) {
this.applicationName = applicationName;
}
public String getResourceIds() {
return resourceIds;
}
public void setResourceIds(String resourceIds) {
this.resourceIds = resourceIds;
}
public String getClientSecret() {
return clientSecret;
}
public void setClientSecret(String clientSecret) {
this.clientSecret = clientSecret;
}
public String getClientAuthenticationMethods() {
return clientAuthenticationMethods;
}
public void setClientAuthenticationMethods(String clientAuthenticationMethods) {
this.clientAuthenticationMethods = clientAuthenticationMethods;
}
public String getScope() {
return scope;
}
public void setScope(String scope) {
this.scope = scope;
}
public String getAuthorizedGrantTypes() {
return authorizedGrantTypes;
}
public void setAuthorizedGrantTypes(String authorizedGrantTypes) {
this.authorizedGrantTypes = authorizedGrantTypes;
}
public String getWebServerRedirectUri() {
return webServerRedirectUri;
}
public void setWebServerRedirectUri(String webServerRedirectUri) {
this.webServerRedirectUri = webServerRedirectUri;
}
public String getAuthorities() {
return authorities;
}
public void setAuthorities(String authorities) {
this.authorities = authorities;
}
public Integer getAccessTokenValidity() {
return accessTokenValidity;
}
public void setAccessTokenValidity(Integer accessTokenValidity) {
this.accessTokenValidity = accessTokenValidity;
}
public Integer getRefreshTokenValidity() {
return refreshTokenValidity;
}
public void setRefreshTokenValidity(Integer refreshTokenValidity) {
this.refreshTokenValidity = refreshTokenValidity;
}
public String getAdditionalInformation() {
return additionalInformation;
}
public void setAdditionalInformation(String additionalInformation) {
this.additionalInformation = additionalInformation;
}
public String getAutoApprove() {
return autoApprove;
}
public void setAutoApprove(String autoApprove) {
this.autoApprove = autoApprove;
}
public LocalDateTime getExpirationDate() {
return expirationDate;
}
public void setExpirationDate(LocalDateTime expirationDate) {
this.expirationDate = expirationDate;
}
}
================================================
FILE: src/main/java/com/revengemission/sso/oauth2/server/persistence/entity/RoleEntity.java
================================================
package com.revengemission.sso.oauth2.server.persistence.entity;
import jakarta.persistence.Column;
import jakarta.persistence.Entity;
import jakarta.persistence.Table;
import jakarta.persistence.UniqueConstraint;
@Entity
@Table(uniqueConstraints = @UniqueConstraint(columnNames = {"roleName"}))
public class RoleEntity extends BaseEntity {
@Column(nullable = false, columnDefinition = "VARCHAR(15)")
private String roleName;
public String getRoleName() {
return roleName;
}
public void setRoleName(String roleName) {
this.roleName = roleName;
}
}
================================================
FILE: src/main/java/com/revengemission/sso/oauth2/server/persistence/entity/ScopeDefinitionEntity.java
================================================
package com.revengemission.sso.oauth2.server.persistence.entity;
import jakarta.persistence.Entity;
import jakarta.persistence.Table;
import jakarta.persistence.UniqueConstraint;
@Entity
@Table(uniqueConstraints = @UniqueConstraint(columnNames = {"scope"}))
public class ScopeDefinitionEntity extends BaseEntity {
/**
*
*/
private static final long serialVersionUID = 1522239249392557103L;
private String scope;
/**
* 定义 解释
*/
private String definition;
public String getScope() {
return scope;
}
public void setScope(String scope) {
this.scope = scope;
}
public String getDefinition() {
return definition;
}
public void setDefinition(String definition) {
this.definition = definition;
}
}
================================================
FILE: src/main/java/com/revengemission/sso/oauth2/server/persistence/entity/ThirdPartyAccountEntity.java
================================================
package com.revengemission.sso.oauth2.server.persistence.entity;
import jakarta.persistence.*;
import java.util.ArrayList;
import java.util.List;
@Entity
@Table(uniqueConstraints = @UniqueConstraint(columnNames = {"thirdParty", "thirdPartyAccountId"}))
public class ThirdPartyAccountEntity extends BaseEntity {
private static final long serialVersionUID = -5519234457588411587L;
@Column(nullable = false, columnDefinition = "VARCHAR(20)")
private String thirdParty;
@Column(nullable = false, columnDefinition = "VARCHAR(100)")
private String thirdPartyAccountId;
/**
* 多种登陆方式合并账号使用
*/
private String accountOpenCode;
@ManyToMany(fetch = FetchType.EAGER)
@JoinTable(name = "third_party_role_entity", joinColumns = @JoinColumn(name = "third_party_account_id", referencedColumnName = "id"), foreignKey = @ForeignKey(ConstraintMode.NO_CONSTRAINT), inverseJoinColumns = @JoinColumn(name = "role_id", referencedColumnName = "id"), inverseForeignKey = @ForeignKey(ConstraintMode.NO_CONSTRAINT))
List<RoleEntity> roles = new ArrayList<>();
private String nickName;
private String avatarUrl;
public String getThirdParty() {
return thirdParty;
}
public void setThirdParty(String thirdParty) {
this.thirdParty = thirdParty;
}
public String getThirdPartyAccountId() {
return thirdPartyAccountId;
}
public void setThirdPartyAccountId(String thirdPartyAccountId) {
this.thirdPartyAccountId = thirdPartyAccountId;
}
public String getAccountOpenCode() {
return accountOpenCode;
}
public void setAccountOpenCode(String accountOpenCode) {
this.accountOpenCode = accountOpenCode;
}
public List<RoleEntity> getRoles() {
return roles;
}
public void setRoles(List<RoleEntity> roles) {
this.roles = roles;
}
public String getNickName() {
return nickName;
}
public void setNickName(String nickName) {
this.nickName = nickName;
}
public String getAvatarUrl() {
return avatarUrl;
}
public void setAvatarUrl(String avatarUrl) {
this.avatarUrl = avatarUrl;
}
}
================================================
FILE: src/main/java/com/revengemission/sso/oauth2/server/persistence/entity/UserAccountEntity.java
================================================
package com.revengemission.sso.oauth2.server.persistence.entity;
import jakarta.persistence.*;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.List;
@Entity
@Table(uniqueConstraints = @UniqueConstraint(columnNames = {"username"}))
public class UserAccountEntity extends BaseEntity {
private static final long serialVersionUID = -5519234457588411587L;
@Column(nullable = false, columnDefinition = "VARCHAR(50)")
private String username;
@Column(nullable = false)
private String password;
/**
* 多种登陆方式合并账号使用
*/
private String accountOpenCode;
private String nickName;
private String avatarUrl;
private String email;
private String mobile;
private String province;
private String city;
private String address;
private LocalDate birthday;
private String gender;
private LocalDateTime failureTime;
@Column(name = "failure_count", columnDefinition = "int default 0")
private int failureCount;
@ManyToMany(fetch = FetchType.EAGER)
@JoinTable(name = "user_account_role_entity", joinColumns = @JoinColumn(name = "user_id", referencedColumnName = "id"), foreignKey = @ForeignKey(ConstraintMode.NO_CONSTRAINT), inverseJoinColumns = @JoinColumn(name = "role_id", referencedColumnName = "id"), inverseForeignKey = @ForeignKey(ConstraintMode.NO_CONSTRAINT))
List<RoleEntity> roles = new ArrayList<>();
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getAccountOpenCode() {
return accountOpenCode;
}
public void setAccountOpenCode(String accountOpenCode) {
this.accountOpenCode = accountOpenCode;
}
public String getNickName() {
return nickName;
}
public void setNickName(String nickName) {
this.nickName = nickName;
}
public String getAvatarUrl() {
return avatarUrl;
}
public void setAvatarUrl(String avatarUrl) {
this.avatarUrl = avatarUrl;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getMobile() {
return mobile;
}
public void setMobile(String mobile) {
this.mobile = mobile;
}
public String getProvince() {
return province;
}
public void setProvince(String province) {
this.province = province;
}
public String getCity() {
return city;
}
public void setCity(String city) {
this.city = city;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
public LocalDate getBirthday() {
return birthday;
}
public void setBirthday(LocalDate birthday) {
this.birthday = birthday;
}
public String getGender() {
return gender;
}
public void setGender(String gender) {
this.gender = gender;
}
public LocalDateTime getFailureTime() {
return failureTime;
}
public void setFailureTime(LocalDateTime failureTime) {
this.failureTime = failureTime;
}
public int getFailureCount() {
return failureCount;
}
public void setFailureCount(int failureCount) {
this.failureCount = failureCount;
}
public List<RoleEntity> getRoles() {
return roles;
}
public void setRoles(List<RoleEntity> roles) {
this.roles = roles;
}
}
================================================
FILE: src/main/java/com/revengemission/sso/oauth2/server/persistence/repository/LoginHistoryRepository.java
================================================
package com.revengemission.sso.oauth2.server.persistence.repository;
import com.revengemission.sso.oauth2.server.persistence.entity.LoginHistoryEntity;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.data.jpa.repository.JpaRepository;
public interface LoginHistoryRepository extends JpaRepository<LoginHistoryEntity, Long> {
Page<LoginHistoryEntity> findByUsername(String username, Pageable page);
}
================================================
FILE: src/main/java/com/revengemission/sso/oauth2/server/persistence/repository/OauthClientRepository.java
================================================
package com.revengemission.sso.oauth2.server.persistence.repository;
import com.revengemission.sso.oauth2.server.persistence.entity.OauthClientEntity;
import org.springframework.data.jpa.repository.JpaRepository;
public interface OauthClientRepository extends JpaRepository<OauthClientEntity, Long> {
OauthClientEntity findByClientId(String clientId);
}
================================================
FILE: src/main/java/com/revengemission/sso/oauth2/server/persistence/repository/RoleRepository.java
================================================
package com.revengemission.sso.oauth2.server.persistence.repository;
import com.revengemission.sso.oauth2.server.persistence.entity.RoleEntity;
import org.springframework.data.jpa.repository.JpaRepository;
public interface RoleRepository extends JpaRepository<RoleEntity, Long> {
RoleEntity findByRoleName(String roleName);
}
================================================
FILE: src/main/java/com/revengemission/sso/oauth2/server/persistence/repository/ScopeDefinitionRepository.java
================================================
package com.revengemission.sso.oauth2.server.persistence.repository;
import com.revengemission.sso.oauth2.server.persistence.entity.ScopeDefinitionEntity;
import org.springframework.data.jpa.repository.JpaRepository;
public interface ScopeDefinitionRepository extends JpaRepository<ScopeDefinitionEntity, Long> {
ScopeDefinitionEntity findByScope(String scope);
}
================================================
FILE: src/main/java/com/revengemission/sso/oauth2/server/persistence/repository/ThirdPartyAccountRepository.java
================================================
package com.revengemission.sso.oauth2.server.persistence.repository;
import com.revengemission.sso.oauth2.server.persistence.entity.ThirdPartyAccountEntity;
import org.springframework.data.jpa.repository.JpaRepository;
public interface ThirdPartyAccountRepository extends JpaRepository<ThirdPartyAccountEntity, Long> {
ThirdPartyAccountEntity findByThirdPartyAndThirdPartyAccountId(String thirdParty, String thirdPartyAccountId);
}
================================================
FILE: src/main/java/com/revengemission/sso/oauth2/server/persistence/repository/UserAccountRepository.java
================================================
package com.revengemission.sso.oauth2.server.persistence.repository;
import com.revengemission.sso.oauth2.server.persistence.entity.UserAccountEntity;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.data.jpa.repository.JpaRepository;
public interface UserAccountRepository extends JpaRepository<UserAccountEntity, Long> {
UserAccountEntity findByUsername(String username);
Page<UserAccountEntity> findByUsernameLike(String username, Pageable page);
boolean existsByUsername(String username);
}
================================================
FILE: src/main/java/com/revengemission/sso/oauth2/server/schedule/Task.java
================================================
package com.revengemission.sso.oauth2.server.schedule;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import java.time.LocalDateTime;
@Component
public class Task {
@Scheduled(cron = "0 0 * * * *")
public void task() {
System.out.println("[ 当前时间" + LocalDateTime.now() + " ]");
}
}
================================================
FILE: src/main/java/com/revengemission/sso/oauth2/server/service/CaptchaService.java
================================================
package com.revengemission.sso.oauth2.server.service;
import com.revengemission.sso.oauth2.server.config.CachesEnum;
public interface CaptchaService {
boolean saveCaptcha(CachesEnum cachesEnum, String key, Object value);
String getCaptcha(CachesEnum cachesEnum, String key);
void removeCaptcha(CachesEnum cachesEnum, String key);
boolean checkCaptchaTimes(CachesEnum cachesEnum, String key);
}
================================================
FILE: src/main/java/com/revengemission/sso/oauth2/server/service/CommonServiceInterface.java
================================================
package com.revengemission.sso.oauth2.server.service;
import com.revengemission.sso.oauth2.server.domain.AlreadyExistsException;
import com.revengemission.sso.oauth2.server.domain.EntityNotFoundException;
import com.revengemission.sso.oauth2.server.domain.JsonObjects;
import com.revengemission.sso.oauth2.server.domain.NotImplementException;
public interface CommonServiceInterface<T> {
default JsonObjects<T> list(int pageNum,
int pageSize,
String sortField,
String sortOrder) {
throw new NotImplementException();
}
default T create(T t) throws AlreadyExistsException {
throw new NotImplementException();
}
default T retrieveById(long id) throws EntityNotFoundException {
throw new NotImplementException();
}
default T updateById(T t) throws EntityNotFoundException {
throw new NotImplementException();
}
default void deleteById(long id) {
throw new NotImplementException();
}
default void updateRecordStatus(long id, int recordStatus) {
throw new NotImplementException();
}
}
================================================
FILE: src/main/java/com/revengemission/sso/oauth2/server/service/LoginHistoryService.java
================================================
package com.revengemission.sso.oauth2.server.service;
import com.revengemission.sso.oauth2.server.domain.JsonObjects;
import com.revengemission.sso.oauth2.server.domain.LoginHistory;
public interface LoginHistoryService extends CommonServiceInterface<LoginHistory> {
JsonObjects<LoginHistory> listByUsername(String username, int pageNum,
int pageSize,
String sortField,
String sortOrder);
void asyncCreate(LoginHistory loginHistory);
}
================================================
FILE: src/main/java/com/revengemission/sso/oauth2/server/service/OauthClientService.java
================================================
package com.revengemission.sso.oauth2.server.service;
import com.revengemission.sso.oauth2.server.domain.NotImplementException;
import com.revengemission.sso.oauth2.server.domain.OauthClient;
public interface OauthClientService extends CommonServiceInterface<OauthClient> {
default OauthClient findByClientId(String clientId){
throw new NotImplementException();
}
}
================================================
FILE: src/main/java/com/revengemission/sso/oauth2/server/service/RoleService.java
================================================
package com.revengemission.sso.oauth2.server.service;
import com.revengemission.sso.oauth2.server.domain.NotImplementException;
import com.revengemission.sso.oauth2.server.domain.Role;
public interface RoleService extends CommonServiceInterface<Role> {
default Role findByRoleName(String roleName) throws NotImplementException {
throw new NotImplementException();
}
}
================================================
FILE: src/main/java/com/revengemission/sso/oauth2/server/service/ScopeDefinitionService.java
================================================
package com.revengemission.sso.oauth2.server.service;
import com.revengemission.sso.oauth2.server.domain.NotImplementException;
import com.revengemission.sso.oauth2.server.domain.ScopeDefinition;
public interface ScopeDefinitionService extends CommonServiceInterface<ScopeDefinition> {
default ScopeDefinition findByScope(String scope) throws NotImplementException {
throw new NotImplementException();
}
}
================================================
FILE: src/main/java/com/revengemission/sso/oauth2/server/service/UserAccountService.java
================================================
package com.revengemission.sso.oauth2.server.service;
import com.revengemission.sso.oauth2.server.domain.EntityNotFoundException;
import com.revengemission.sso.oauth2.server.domain.JsonObjects;
import com.revengemission.sso.oauth2.server.domain.UserAccount;
public interface UserAccountService extends CommonServiceInterface<UserAccount> {
JsonObjects<UserAccount> listByUsername(String username,
int pageNum,
int pageSize,
String sortField,
String sortOrder);
UserAccount findByUsername(String username) throws EntityNotFoundException;
boolean existsByUsername(String username);
void loginSuccess(String username) throws EntityNotFoundException;
void loginFailure(String username);
}
================================================
FILE: src/main/java/com/revengemission/sso/oauth2/server/service/impl/CaptchaServiceImpl.java
================================================
package com.revengemission.sso.oauth2.server.service.impl;
import com.revengemission.sso.oauth2.server.config.CachesEnum;
import com.revengemission.sso.oauth2.server.service.CaptchaService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.cache.Cache.ValueWrapper;
import org.springframework.cache.CacheManager;
import org.springframework.stereotype.Service;
/**
* 保存到缓存中
*/
@Service
public class CaptchaServiceImpl implements CaptchaService {
private Logger log = LoggerFactory.getLogger(this.getClass());
@Value("${captcha.max.times:5}")
private int captchaMaxTimes;
@Autowired
CacheManager cacheManager;
@Override
public boolean saveCaptcha(CachesEnum cachesEnum, String key, Object value) {
cacheManager.getCache(cachesEnum.name()).put(key, value);
return true;
}
@Override
public String getCaptcha(CachesEnum cachesEnum, String key) {
if (!checkCaptchaTimes(cachesEnum, key)) {
return null;
}
ValueWrapper valueWrapper = cacheManager.getCache(cachesEnum.name()).get(key);
if (valueWrapper != null) {
return String.valueOf(valueWrapper.get());
} else {
return null;
}
}
@Override
public void removeCaptcha(CachesEnum cachesEnum, String key) {
cacheManager.getCache(cachesEnum.name()).evict(key);
}
@Override
public boolean checkCaptchaTimes(CachesEnum cachesEnum, String key) {
ValueWrapper valueWrapper = cacheManager.getCache(CachesEnum.CaptchaTimesCache.name()).get(key);
if (valueWrapper != null) {
int times = Integer.parseInt(String.valueOf(valueWrapper.get()));
if (times < captchaMaxTimes) {
cacheManager.getCache(CachesEnum.CaptchaTimesCache.name()).put(key, times + 1);
return true;
} else {
log.debug("验证码达到最大尝试次数:" + cachesEnum + "_" + key);
removeCaptcha(cachesEnum, key);
removeCaptcha(CachesEnum.CaptchaTimesCache, key);
return false;
}
} else {
cacheManager.getCache(CachesEnum.CaptchaTimesCache.name()).put(key, 1);
return true;
}
}
}
================================================
FILE: src/main/java/com/revengemission/sso/oauth2/server/service/impl/ClientDetailsServiceImpl.java
================================================
//package com.revengemission.sso.oauth2.server.service.impl;
//
//import com.revengemission.sso.oauth2.server.config.CachesEnum;
//import com.revengemission.sso.oauth2.server.domain.AlreadyExpiredException;
//import com.revengemission.sso.oauth2.server.domain.InvalidClientException;
//import com.revengemission.sso.oauth2.server.persistence.entity.OauthClientEntity;
//import com.revengemission.sso.oauth2.server.persistence.repository.OauthClientRepository;
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.cache.Cache;
//import org.springframework.cache.CacheManager;
//import org.springframework.security.core.authority.SimpleGrantedAuthority;
//import org.springframework.security.oauth2.provider.ClientDetails;
//import org.springframework.security.oauth2.provider.ClientDetailsService;
//import org.springframework.security.oauth2.provider.ClientRegistrationException;
//import org.springframework.security.oauth2.provider.NoSuchClientException;
//import org.springframework.security.oauth2.provider.client.BaseClientDetails;
//import org.springframework.stereotype.Service;
//import org.springframework.util.StringUtils;
//
//import java.time.LocalDateTime;
//import java.util.ArrayList;
//import java.util.List;
//
//@Service
//public class ClientDetailsServiceImpl implements ClientDetailsService {
//
// @Autowired
// OauthClientRepository oauthClientRepository;
//
// @Autowired
// CacheManager cacheManager;
//
// @Override
// public ClientDetails loadClientByClientId(String clientId) throws ClientRegistrationException {
//
// Cache.ValueWrapper valueWrapper = cacheManager.getCache(CachesEnum.Oauth2ClientCache.name()).get(clientId);
//
// if (valueWrapper != null) {
// return (ClientDetails) valueWrapper.get();
// }
//
// OauthClientEntity oauthClientEntity = oauthClientRepository.findByClientId(clientId);
// if (oauthClientEntity != null) {
// if (oauthClientEntity.getRecordStatus() < 0) {
// throw new InvalidClientException(String.format("clientId %s is disabled!", clientId));
// }
// if (oauthClientEntity.getExpirationDate() != null && oauthClientEntity.getExpirationDate().isBefore(LocalDateTime.now())) {
// throw new AlreadyExpiredException(String.format("clientId %s already expired!", clientId));
// }
// BaseClientDetails baseClientDetails = new BaseClientDetails();
// baseClientDetails.setClientId(oauthClientEntity.getClientId());
// if (!StringUtils.isEmpty(oauthClientEntity.getResourceIds())) {
// baseClientDetails.setResourceIds(StringUtils.commaDelimitedListToSet(oauthClientEntity.getResourceIds()));
// }
// baseClientDetails.setClientSecret(oauthClientEntity.getClientSecret());
// if (!StringUtils.isEmpty(oauthClientEntity.getScope())) {
// baseClientDetails.setScope(StringUtils.commaDelimitedListToSet(oauthClientEntity.getScope()));
// }
// if (!StringUtils.isEmpty(oauthClientEntity.getAuthorizedGrantTypes())) {
// baseClientDetails.setAuthorizedGrantTypes(StringUtils.commaDelimitedListToSet(oauthClientEntity.getAuthorizedGrantTypes()));
// } else {
// baseClientDetails.setAuthorizedGrantTypes(StringUtils.commaDelimitedListToSet("authorization_code"));
// }
// if (!StringUtils.isEmpty(oauthClientEntity.getWebServerRedirectUri())) {
// baseClientDetails.setRegisteredRedirectUri(StringUtils.commaDelimitedListToSet(oauthClientEntity.getWebServerRedirectUri()));
// }
// if (!StringUtils.isEmpty(oauthClientEntity.getAuthorities())) {
// List<SimpleGrantedAuthority> authorities = new ArrayList<>();
// StringUtils.commaDelimitedListToSet(oauthClientEntity.getAuthorities()).forEach(s -> authorities.add(new SimpleGrantedAuthority(s)));
// baseClientDetails.setAuthorities(authorities);
// }
// if (oauthClientEntity.getAccessTokenValidity() != null && oauthClientEntity.getAccessTokenValidity() > 0) {
// baseClientDetails.setAccessTokenValiditySeconds(oauthClientEntity.getAccessTokenValidity());
// }
// if (oauthClientEntity.getRefreshTokenValidity() != null && oauthClientEntity.getRefreshTokenValidity() > 0) {
// baseClientDetails.setRefreshTokenValiditySeconds(oauthClientEntity.getRefreshTokenValidity());
// }
///// baseClientDetails.setAdditionalInformation(oauthClientEntity.getAdditionalInformation());
// if (!StringUtils.isEmpty(oauthClientEntity.getAutoApprove())) {
// baseClientDetails.setAutoApproveScopes(StringUtils.commaDelimitedListToSet(oauthClientEntity.getAutoApprove()));
// }
// cacheManager.getCache(CachesEnum.Oauth2ClientCache.name()).put(clientId, baseClientDetails);
// return baseClientDetails;
// } else {
// throw new NoSuchClientException("No client with requested id: " + clientId);
// }
// }
//}
================================================
FILE: src/main/java/com/revengemission/sso/oauth2/server/service/impl/LoginHistoryServiceImpl.java
================================================
package com.revengemission.sso.oauth2.server.service.impl;
import com.revengemission.sso.oauth2.server.domain.AlreadyExistsException;
import com.revengemission.sso.oauth2.server.domain.JsonObjects;
import com.revengemission.sso.oauth2.server.domain.LoginHistory;
import com.revengemission.sso.oauth2.server.mapper.LoginHistoryMapper;
import com.revengemission.sso.oauth2.server.persistence.entity.LoginHistoryEntity;
import com.revengemission.sso.oauth2.server.persistence.repository.LoginHistoryRepository;
import com.revengemission.sso.oauth2.server.service.LoginHistoryService;
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.Strings;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Pageable;
import org.springframework.data.domain.Sort;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@Service
public class LoginHistoryServiceImpl implements LoginHistoryService {
@Autowired
LoginHistoryRepository loginHistoryRepository;
@Autowired
LoginHistoryMapper mapper;
@Override
public JsonObjects<LoginHistory> listByUsername(String username, int pageNum, int pageSize, String sortField, String sortOrder) {
JsonObjects<LoginHistory> jsonObjects = new JsonObjects<>();
Sort sort;
if (Strings.CI.equals(sortOrder, "asc")) {
sort = Sort.by(Sort.Direction.ASC, sortField);
} else {
sort = Sort.by(Sort.Direction.DESC, sortField);
}
Pageable pageable = PageRequest.of(pageNum - 1, pageSize, sort);
Page<LoginHistoryEntity> page = loginHistoryRepository.findByUsername(username, pageable);
page.getContent();
if (!page.getContent().isEmpty()) {
jsonObjects.setTotal(page.getTotalElements());
jsonObjects.setPages(page.getTotalPages());
page.getContent().forEach(u -> jsonObjects.getRows().add(mapper.entityToDto(u)));
}
return jsonObjects;
}
@Override
@Transactional(rollbackFor = Exception.class)
@Async
public void asyncCreate(LoginHistory loginHistory) throws AlreadyExistsException {
LoginHistoryEntity entity = mapper.dtoToEntity(loginHistory);
loginHistoryRepository.save(entity);
}
}
================================================
FILE: src/main/java/com/revengemission/sso/oauth2/server/service/impl/OauthClientServiceImpl.java
================================================
package com.revengemission.sso.oauth2.server.service.impl;
import com.revengemission.sso.oauth2.server.domain.AlreadyExistsException;
import com.revengemission.sso.oauth2.server.domain.EntityNotFoundException;
import com.revengemission.sso.oauth2.server.domain.JsonObjects;
import com.revengemission.sso.oauth2.server.domain.OauthClient;
import com.revengemission.sso.oauth2.server.mapper.OauthClientMapper;
import com.revengemission.sso.oauth2.server.persistence.entity.OauthClientEntity;
import com.revengemission.sso.oauth2.server.persistence.repository.OauthClientRepository;
import com.revengemission.sso.oauth2.server.service.OauthClientService;
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.Strings;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Pageable;
import org.springframework.data.domain.Sort;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.Optional;
@Service
public class OauthClientServiceImpl implements OauthClientService {
@Autowired
OauthClientRepository oauthClientRepository;
@Autowired
OauthClientMapper mapper;
@Override
public OauthClient findByClientId(String clientId) {
OauthClientEntity oauthClientEntity = oauthClientRepository.findByClientId(clientId);
if (oauthClientEntity != null) {
return mapper.entityToDto(oauthClientEntity);
} else {
return null;
}
}
@Override
public JsonObjects<OauthClient> list(int pageNum, int pageSize, String sortField, String sortOrder) {
JsonObjects<OauthClient> jsonObjects = new JsonObjects<>();
Sort sort;
if (Strings.CI.equals(sortOrder, "asc")) {
sort = Sort.by(Sort.Direction.ASC, sortField);
} else {
sort = Sort.by(Sort.Direction.DESC, sortField);
}
Pageable pageable = PageRequest.of(pageNum - 1, pageSize, sort);
Page<OauthClientEntity> page = oauthClientRepository.findAll(pageable);
page.getContent();
if (!page.getContent().isEmpty()) {
jsonObjects.setTotal(page.getTotalElements());
jsonObjects.setPages(page.getTotalPages());
page.getContent().forEach(u -> jsonObjects.getRows().add(mapper.entityToDto(u)));
}
return jsonObjects;
}
@Override
public OauthClient create(OauthClient oauthClient) throws AlreadyExistsException {
OauthClientEntity exist = oauthClientRepository.findByClientId(oauthClient.getClientId());
if (exist != null) {
throw new AlreadyExistsException(oauthClient.getClientId() + " already exists!");
}
OauthClientEntity oauthClientEntity = mapper.dtoToEntity(oauthClient);
oauthClientRepository.save(oauthClientEntity);
return mapper.entityToDto(oauthClientEntity);
}
@Override
public OauthClient retrieveById(long id) throws EntityNotFoundException {
Optional<OauthClientEntity> entityOptional = oauthClientRepository.findById(id);
return mapper.entityToDto(entityOptional.orElseThrow(EntityNotFoundException::new));
}
@Override
public OauthClient updateById(OauthClient oauthClient) throws EntityNotFoundException {
Optional<OauthClientEntity> entityOptional = oauthClientRepository.findById(Long.parseLong(oauthClient.getId()));
OauthClientEntity e = entityOptional.orElseThrow(EntityNotFoundException::new);
if (StringUtils.isNotEmpty(oauthClient.getClientSecret())) {
e.setClientSecret(oauthClient.getClientSecret());
}
e.setAuthorities(oauthClient.getAuthorities());
e.setScope(oauthClient.getScope());
e.setAuthorizedGrantTypes(oauthClient.getAuthorizedGrantTypes());
e.setWebServerRedirectUri(oauthClient.getWebServerRedirectUri());
if (StringUtils.isNotEmpty(oauthClient.getRemarks())) {
e.setRemarks(oauthClient.getRemarks());
}
oauthClientRepository.save(e);
return mapper.entityToDto(e);
}
@Override
@Transactional(rollbackFor = Exception.class)
public void updateRecordStatus(long id, int recordStatus) {
Optional<OauthClientEntity> entityOptional = oauthClientRepository.findById(id);
OauthClientEntity e = entityOptional.orElseThrow(EntityNotFoundException::new);
e.setRecordStatus(recordStatus);
oauthClientRepository.save(e);
}
}
================================================
FILE: src/main/java/com/revengemission/sso/oauth2/server/service/impl/OidcUserInfoService.java
================================================
//package com.revengemission.sso.oauth2.server.service.impl;
//
//import org.springframework.security.oauth2.core.oidc.OidcUserInfo;
//import org.springframework.stereotype.Service;
//
//import java.util.Collections;
//import java.util.HashMap;
//import java.util.Map;
//
///**
// * Example service to perform lookup of user info for customizing an {@code id_token}.
// */
//@Service
//public class OidcUserInfoService {
//
// private final UserInfoRepository userInfoRepository = new UserInfoRepository();
//
// public OidcUserInfo loadUser(String username) {
// return new OidcUserInfo(this.userInfoRepository.findByUsername(username));
// }
//
// static class UserInfoRepository {
//
// private final Map<String, Map<String, Object>> userInfo = new HashMap<>();
//
// public UserInfoRepository() {
// this.userInfo.put("user1", createUser("user1"));
// this.userInfo.put("user2", createUser("user2"));
// }
//
// public Map<String, Object> findByUsername(String username) {
// return this.userInfo.get(username);
// }
//
// private static Map<String, Object> createUser(String username) {
// return OidcUserInfo.builder()
// .subject(username)
// .name("First Last")
// .givenName("First")
// .familyName("Last")
// .middleName("Middle")
// .nickname("User")
// .preferredUsername(username)
// .profile("https://example.com/" + username)
// .picture("https://example.com/" + username + ".jpg")
// .website("https://example.com")
// .email(username + "@example.com")
// .emailVerified(true)
// .gender("female")
// .birthdate("1970-01-01")
// .zoneinfo("Europe/Paris")
// .locale("en-US")
// .phoneNumber("+1 (604) 555-1234;ext=5678")
// .phoneNumberVerified(false)
// .claim("address", Collections.singletonMap("formatted", "Champ de Mars\n5 Av. Anatole France\n75007 Paris\nFrance"))
// .updatedAt("1970-01-01T00:00:00Z")
// .build()
// .getClaims();
// }
// }
//
//}
//
//
================================================
FILE: src/main/java/com/revengemission/sso/oauth2/server/service/impl/RegisteredClientRepositoryImpl.java
================================================
package com.revengemission.sso.oauth2.server.service.impl;
import com.revengemission.sso.oauth2.server.config.CachesEnum;
import com.revengemission.sso.oauth2.server.persistence.entity.OauthClientEntity;
import com.revengemission.sso.oauth2.server.persistence.repository.OauthClientRepository;
import org.springframework.cache.Cache;
import org.springframework.cache.CacheManager;
import org.springframework.security.oauth2.core.AuthorizationGrantType;
import org.springframework.security.oauth2.core.ClientAuthenticationMethod;
import org.springframework.security.oauth2.server.authorization.client.RegisteredClient;
import org.springframework.security.oauth2.server.authorization.client.RegisteredClientRepository;
import org.springframework.security.oauth2.server.authorization.settings.TokenSettings;
import org.springframework.util.StringUtils;
import java.time.Duration;
import java.util.Arrays;
public class RegisteredClientRepositoryImpl implements RegisteredClientRepository {
OauthClientRepository oauthClientRepository;
CacheManager cacheManager;
public RegisteredClientRepositoryImpl(OauthClientRepository oauthClientRepository, CacheManager cacheManager) {
this.oauthClientRepository = oauthClientRepository;
this.cacheManager = cacheManager;
}
@Override
public void save(RegisteredClient registeredClient) {
System.out.println("RegisteredClientRepository.save() called");
}
@Override
public RegisteredClient findById(String id) {
OauthClientEntity oauthClientEntity = oauthClientRepository.findById(Long.parseLong(id)).orElse(null);
if (oauthClientEntity != null) {
return convertOauthClientEntityToRegisteredClient(oauthClientEntity);
} else {
return null;
}
}
@Override
public RegisteredClient findByClientId(String clientId) {
Cache.ValueWrapper valueWrapper = cacheManager.getCache(CachesEnum.Oauth2ClientCache.name()).get(clientId);
if (valueWrapper != null) {
return (RegisteredClient) valueWrapper.get();
}
OauthClientEntity oauthClientEntity = oauthClientRepository.findByClientId(clientId);
if (oauthClientEntity != null) {
RegisteredClient registeredClient = convertOauthClientEntityToRegisteredClient(oauthClientEntity);
cacheManager.getCache(CachesEnum.Oauth2ClientCache.name()).put(clientId, registeredClient);
return registeredClient;
} else {
return null;
}
}
RegisteredClient convertOauthClientEntityToRegisteredClient(OauthClientEntity oauthClientEntity) {
TokenSettings tokenSettings = TokenSettings.builder()
.accessTokenTimeToLive(Duration.ofSeconds(oauthClientEntity.getAccessTokenValidity()))
.refreshTokenTimeToLive(Duration.ofSeconds(oauthClientEntity.getRefreshTokenValidity()))
.reuseRefreshTokens(true)
.authorizationCodeTimeToLive(Duration.ofMinutes(5))
.build();
return RegisteredClient
.withId(String.valueOf(oauthClientEntity.getId()))
.clientId(oauthClientEntity.getClientId())
.clientSecret(oauthClientEntity.getClientSecret())
.clientAuthenticationMethods(set -> set.addAll(StringUtils.commaDelimitedListToSet(oauthClientEntity.getClientAuthenticationMethods()).stream().map(ClientAuthenticationMethod::new).toList()))
.clientName(oauthClientEntity.getApplicationName())
.redirectUris(set -> set.addAll(StringUtils.commaDelimitedListToSet(oauthClientEntity.getResourceIds())))
.authorizationGrantTypes(set -> set.addAll(StringUtils.commaDelimitedListToSet(oauthClientEntity.getAuthorizedGrantTypes()).stream().map(AuthorizationGrantType::new).toList()))
.clientAuthenticationMethods(set -> set.addAll(Arrays.asList(ClientAuthenticationMethod.CLIENT_SECRET_BASIC, ClientAuthenticationMethod.CLIENT_SECRET_POST)))
.scopes(set -> set.addAll(StringUtils.commaDelimitedListToSet(oauthClientEntity.getScope())))
.redirectUris(set -> set.addAll(StringUtils.commaDelimitedListToSet(oauthClientEntity.getWebServerRedirectUri())))
.tokenSettings(tokenSettings)
.build();
}
}
================================================
FILE: src/main/java/com/revengemission/sso/oauth2/server/service/impl/RoleServiceImpl.java
================================================
package com.revengemission.sso.oauth2.server.service.impl;
import com.revengemission.sso.oauth2.server.domain.NotImplementException;
import com.revengemission.sso.oauth2.server.domain.Role;
import com.revengemission.sso.oauth2.server.mapper.RoleMapper;
import com.revengemission.sso.oauth2.server.persistence.entity.RoleEntity;
import com.revengemission.sso.oauth2.server.persistence.repository.RoleRepository;
import com.revengemission.sso.oauth2.server.service.RoleService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@Service
public class RoleServiceImpl implements RoleService {
@Autowired
RoleRepository roleRepository;
@Autowired
RoleMapper mapper;
@Override
public Role findByRoleName(String roleName) throws NotImplementException {
RoleEntity roleEntity = roleRepository.findByRoleName(roleName);
if (roleEntity != null) {
return mapper.entityToDto(roleEntity);
} else {
return null;
}
}
}
================================================
FILE: src/main/java/com/revengemission/sso/oauth2/server/service/impl/ScopeDefinitionServiceImpl.java
================================================
package com.revengemission.sso.oauth2.server.service.impl;
import com.revengemission.sso.oauth2.server.domain.NotImplementException;
import com.revengemission.sso.oauth2.server.domain.ScopeDefinition;
import com.revengemission.sso.oauth2.server.mapper.ScopeDefinitionMapper;
import com.revengemission.sso.oauth2.server.persistence.entity.ScopeDefinitionEntity;
import com.revengemission.sso.oauth2.server.persistence.repository.ScopeDefinitionRepository;
import com.revengemission.sso.oauth2.server.service.ScopeDefinitionService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@Service
public class ScopeDefinitionServiceImpl implements ScopeDefinitionService {
@Autowired
ScopeDefinitionRepository scopeDefinitionRepository;
@Autowired
ScopeDefinitionMapper mapper;
@Override
public ScopeDefinition findByScope(String scope) throws NotImplementException {
ScopeDefinitionEntity scopeDefinitionEntity = scopeDefinitionRepository.findByScope(scope);
if (scopeDefinitionEntity != null) {
return mapper.entityToDto(scopeDefinitionEntity);
} else {
return null;
}
}
}
================================================
FILE: src/main/java/com/revengemission/sso/oauth2/server/service/impl/UserAccountServiceImpl.java
================================================
package com.revengemission.sso.oauth2.server.service.impl;
import com.revengemission.sso.oauth2.server.domain.AlreadyExistsException;
import com.revengemission.sso.oauth2.server.domain.EntityNotFoundException;
import com.revengemission.sso.oauth2.server.domain.JsonObjects;
import com.revengemission.sso.oauth2.server.domain.UserAccount;
import com.revengemission.sso.oauth2.server.mapper.UserAccountMapper;
import com.revengemission.sso.oauth2.server.persistence.entity.RoleEntity;
import com.revengemission.sso.oauth2.server.persistence.entity.UserAccountEntity;
import com.revengemission.sso.oauth2.server.persistence.repository.RoleRepository;
import com.revengemission.sso.oauth2.server.persistence.repository.UserAccountRepository;
import com.revengemission.sso.oauth2.server.service.UserAccountService;
import com.revengemission.sso.oauth2.server.utils.DateUtil;
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.Strings;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Pageable;
import org.springframework.data.domain.Sort;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.List;
import java.util.Optional;
@Service
public class UserAccountServiceImpl implements UserAccountService {
@Autowired
UserAccountRepository userAccountRepository;
@Autowired
RoleRepository roleRepository;
@Autowired
UserAccountMapper mapper;
@Value("${signin.failure.max:5}")
private int failureMax;
@Override
public JsonObjects<UserAccount> listByUsername(String username, int pageNum, int pageSize, String sortField, String sortOrder) {
JsonObjects<UserAccount> jsonObjects = new JsonObjects<>();
Sort sort;
if (Strings.CI.equals(sortOrder, "asc")) {
sort = Sort.by(Sort.Direction.ASC, sortField);
} else {
sort = Sort.by(Sort.Direction.DESC, sortField);
}
Pageable pageable = PageRequest.of(pageNum - 1, pageSize, sort);
Page<UserAccountEntity> page;
if (StringUtils.isBlank(username)) {
page = userAccountRepository.findAll(pageable);
} else {
page = userAccountRepository.findByUsernameLike(username + "%", pageable);
}
page.getContent();
if (!page.getContent().isEmpty()) {
jsonObjects.setTotal(page.getTotalElements());
jsonObjects.setPages(page.getTotalPages());
page.getContent().forEach(u -> jsonObjects.getRows().add(mapper.entityToDto(u)));
}
return jsonObjects;
}
@Override
@Transactional(rollbackFor = Exception.class)
public UserAccount create(UserAccount userAccount) throws AlreadyExistsException {
UserAccountEntity exist = userAccountRepository.findByUsername(userAccount.getUsername());
if (exist != null) {
throw new AlreadyExistsException(userAccount.getUsername() + " already exists!");
}
UserAccountEntity userAccountEntity = mapper.dtoToEntity(userAccount);
userAccountEntity.getRoles().clear();
if (userAccount.getRoles() != null && !userAccount.getRoles().isEmpty()) {
userAccount.getRoles().forEach(e -> {
RoleEntity roleEntity = roleRepository.findByRoleName(e.getRoleName());
if (roleEntity != null) {
userAccountEntity.getRoles().add(roleEntity);
}
});
}
userAccountRepository.save(userAccountEntity);
return mapper.entityToDto(userAccountEntity);
}
@Override
public UserAccount retrieveById(long id) throws EntityNotFoundException {
Optional<UserAccountEntity> entityOptional = userAccountRepository.findById(id);
return mapper.entityToDto(entityOptional.orElseThrow(EntityNotFoundException::new));
}
@Override
@Transactional(rollbackFor = Exception.class)
public UserAccount updateById(UserAccount userAccount) throws EntityNotFoundException {
Optional<UserAccountEntity> entityOptional = userAccountRepository.findById(Long.parseLong(userAccount.getId()));
UserAccountEntity entity = entityOptional.orElseThrow(EntityNotFoundException::new);
if (StringUtils.isNotEmpty(userAccount.getPassword())) {
entity.setPassword(userAccount.getPassword());
}
if (userAccount.getRoles() != null && !userAccount.getRoles().isEmpty())
gitextract_9_3w74ca/
├── .editorconfig
├── .gitattributes
├── .github/
│ ├── dependabot.yml
│ └── workflows/
│ └── maven.yml
├── .gitignore
├── LICENSE
├── README.md
├── maven-version-rules.xml
├── pom.xml
└── src/
├── main/
│ ├── java/
│ │ └── com/
│ │ └── revengemission/
│ │ └── sso/
│ │ └── oauth2/
│ │ └── server/
│ │ ├── ApplicationStartedEventListener.java
│ │ ├── Oauth2ServerApplication.java
│ │ ├── ServerExceptionHandler.java
│ │ ├── WebRequestLogAspect.java
│ │ ├── config/
│ │ │ ├── AuthorizationServerConfig.java
│ │ │ ├── CachesEnum.java
│ │ │ ├── CaffeineCacheConfiguration.java
│ │ │ ├── CustomAccessDeniedHandler.java
│ │ │ ├── CustomAuthenticationFailureHandler.java
│ │ │ ├── CustomAuthenticationProvider.java
│ │ │ ├── CustomAuthenticationSuccessHandler.java
│ │ │ ├── CustomCorsConfiguration.java
│ │ │ ├── CustomWebAuthenticationDetails.java
│ │ │ ├── DefaultSecurityConfig.java
│ │ │ ├── DeviceClientAuthenticationConverter.java
│ │ │ ├── DeviceClientAuthenticationProvider.java
│ │ │ ├── DeviceClientAuthenticationToken.java
│ │ │ ├── FederatedIdentityAuthenticationSuccessHandler.java
│ │ │ ├── JdbcClientRegistrationRepository.java
│ │ │ ├── SmsCodeTokenGranter.java
│ │ │ ├── TokenCustomizerConfig.java
│ │ │ └── WeChatMiniProgramTokenGranter.java
│ │ ├── controller/
│ │ │ ├── AccessConfirmationController.java
│ │ │ ├── CaptchaController.java
│ │ │ ├── ManageClientController.java
│ │ │ ├── ManageUserController.java
│ │ │ ├── ProfileController.java
│ │ │ └── SignInAndUpController.java
│ │ ├── domain/
│ │ │ ├── AlreadyExistsException.java
│ │ │ ├── AlreadyExpiredException.java
│ │ │ ├── BaseDomain.java
│ │ │ ├── EntityNotFoundException.java
│ │ │ ├── GenderEnum.java
│ │ │ ├── GlobalConstant.java
│ │ │ ├── JsonObjects.java
│ │ │ ├── LoginHistory.java
│ │ │ ├── NotImplementException.java
│ │ │ ├── OAuth2Exception.java
│ │ │ ├── OauthClient.java
│ │ │ ├── ParameterException.java
│ │ │ ├── ResponseResult.java
│ │ │ ├── Role.java
│ │ │ ├── RoleEnum.java
│ │ │ ├── ScopeDefinition.java
│ │ │ ├── UserAccount.java
│ │ │ ├── UserInfo.java
│ │ │ └── VerificationCodeException.java
│ │ ├── jose/
│ │ │ ├── Jwks.java
│ │ │ └── KeyGeneratorUtils.java
│ │ ├── mapper/
│ │ │ ├── BaseMapper.java
│ │ │ ├── LoginHistoryMapper.java
│ │ │ ├── OauthClientMapper.java
│ │ │ ├── RoleMapper.java
│ │ │ ├── ScopeDefinitionMapper.java
│ │ │ └── UserAccountMapper.java
│ │ ├── persistence/
│ │ │ ├── entity/
│ │ │ │ ├── BaseEntity.java
│ │ │ │ ├── LoginHistoryEntity.java
│ │ │ │ ├── Oauth2AuthorizationConsent.java
│ │ │ │ ├── OauthClientEntity.java
│ │ │ │ ├── RoleEntity.java
│ │ │ │ ├── ScopeDefinitionEntity.java
│ │ │ │ ├── ThirdPartyAccountEntity.java
│ │ │ │ └── UserAccountEntity.java
│ │ │ └── repository/
│ │ │ ├── LoginHistoryRepository.java
│ │ │ ├── OauthClientRepository.java
│ │ │ ├── RoleRepository.java
│ │ │ ├── ScopeDefinitionRepository.java
│ │ │ ├── ThirdPartyAccountRepository.java
│ │ │ └── UserAccountRepository.java
│ │ ├── schedule/
│ │ │ └── Task.java
│ │ ├── service/
│ │ │ ├── CaptchaService.java
│ │ │ ├── CommonServiceInterface.java
│ │ │ ├── LoginHistoryService.java
│ │ │ ├── OauthClientService.java
│ │ │ ├── RoleService.java
│ │ │ ├── ScopeDefinitionService.java
│ │ │ ├── UserAccountService.java
│ │ │ └── impl/
│ │ │ ├── CaptchaServiceImpl.java
│ │ │ ├── ClientDetailsServiceImpl.java
│ │ │ ├── LoginHistoryServiceImpl.java
│ │ │ ├── OauthClientServiceImpl.java
│ │ │ ├── OidcUserInfoService.java
│ │ │ ├── RegisteredClientRepositoryImpl.java
│ │ │ ├── RoleServiceImpl.java
│ │ │ ├── ScopeDefinitionServiceImpl.java
│ │ │ ├── UserAccountServiceImpl.java
│ │ │ └── UserDetailsServiceImpl.java
│ │ └── utils/
│ │ ├── BigIntegerUtils.java
│ │ ├── CheckPasswordStrength.java
│ │ ├── ClientIpUtil.java
│ │ ├── DateUtil.java
│ │ └── JsonUtil.java
│ └── resources/
│ ├── application.properties
│ ├── db/
│ │ └── changelog/
│ │ ├── db.changelog-master.xml
│ │ ├── login_history_entity_create.xml
│ │ ├── oauth2_authorization_consent_create.xml
│ │ ├── oauth2_authorization_create.xml
│ │ ├── oauth_client_entity_create.xml
│ │ ├── oauth_client_entity_init.xml
│ │ ├── role_entity_create.xml
│ │ ├── role_entity_init.xml
│ │ ├── scope_definition_entity_create.xml
│ │ ├── scope_definition_entity_init.xml
│ │ ├── third_pargy_entity_create.xml
│ │ ├── third_party_role_entity_create.xml
│ │ ├── user_account_entity_create.xml
│ │ ├── user_account_entity_init.xml
│ │ ├── user_account_role_entity_create.xml
│ │ └── user_account_role_entity_init.xml
│ ├── messages.properties
│ ├── static/
│ │ └── assets/
│ │ ├── bootstrap/
│ │ │ ├── css/
│ │ │ │ ├── bootstrap-grid.css
│ │ │ │ ├── bootstrap-grid.rtl.css
│ │ │ │ ├── bootstrap-reboot.css
│ │ │ │ ├── bootstrap-reboot.rtl.css
│ │ │ │ ├── bootstrap-utilities.css
│ │ │ │ ├── bootstrap-utilities.rtl.css
│ │ │ │ ├── bootstrap.css
│ │ │ │ └── bootstrap.rtl.css
│ │ │ └── js/
│ │ │ ├── bootstrap.bundle.js
│ │ │ ├── bootstrap.esm.js
│ │ │ └── bootstrap.js
│ │ ├── bootstrap-icons/
│ │ │ ├── bootstrap-icons.css
│ │ │ ├── bootstrap-icons.json
│ │ │ └── bootstrap-icons.scss
│ │ ├── bootstrap-table/
│ │ │ ├── bootstrap-table-locale-all.js
│ │ │ ├── bootstrap-table-vue.esm.js
│ │ │ ├── bootstrap-table-vue.js
│ │ │ ├── bootstrap-table-vue.umd.js
│ │ │ ├── bootstrap-table.css
│ │ │ ├── bootstrap-table.js
│ │ │ ├── extensions/
│ │ │ │ ├── addrbar/
│ │ │ │ │ └── bootstrap-table-addrbar.js
│ │ │ │ ├── auto-refresh/
│ │ │ │ │ └── bootstrap-table-auto-refresh.js
│ │ │ │ ├── cookie/
│ │ │ │ │ └── bootstrap-table-cookie.js
│ │ │ │ ├── copy-rows/
│ │ │ │ │ └── bootstrap-table-copy-rows.js
│ │ │ │ ├── custom-view/
│ │ │ │ │ └── bootstrap-table-custom-view.js
│ │ │ │ ├── defer-url/
│ │ │ │ │ └── bootstrap-table-defer-url.js
│ │ │ │ ├── editable/
│ │ │ │ │ └── bootstrap-table-editable.js
│ │ │ │ ├── export/
│ │ │ │ │ └── bootstrap-table-export.js
│ │ │ │ ├── filter-control/
│ │ │ │ │ ├── bootstrap-table-filter-control.css
│ │ │ │ │ ├── bootstrap-table-filter-control.js
│ │ │ │ │ └── utils.js
│ │ │ │ ├── fixed-columns/
│ │ │ │ │ ├── bootstrap-table-fixed-columns.css
│ │ │ │ │ └── bootstrap-table-fixed-columns.js
│ │ │ │ ├── group-by-v2/
│ │ │ │ │ ├── bootstrap-table-group-by.css
│ │ │ │ │ └── bootstrap-table-group-by.js
│ │ │ │ ├── i18n-enhance/
│ │ │ │ │ └── bootstrap-table-i18n-enhance.js
│ │ │ │ ├── key-events/
│ │ │ │ │ └── bootstrap-table-key-events.js
│ │ │ │ ├── mobile/
│ │ │ │ │ └── bootstrap-table-mobile.js
│ │ │ │ ├── multiple-sort/
│ │ │ │ │ └── bootstrap-table-multiple-sort.js
│ │ │ │ ├── page-jump-to/
│ │ │ │ │ ├── bootstrap-table-page-jump-to.css
│ │ │ │ │ └── bootstrap-table-page-jump-to.js
│ │ │ │ ├── pipeline/
│ │ │ │ │ └── bootstrap-table-pipeline.js
│ │ │ │ ├── print/
│ │ │ │ │ └── bootstrap-table-print.js
│ │ │ │ ├── reorder-columns/
│ │ │ │ │ └── bootstrap-table-reorder-columns.js
│ │ │ │ ├── reorder-rows/
│ │ │ │ │ ├── bootstrap-table-reorder-rows.css
│ │ │ │ │ └── bootstrap-table-reorder-rows.js
│ │ │ │ ├── resizable/
│ │ │ │ │ └── bootstrap-table-resizable.js
│ │ │ │ ├── sticky-header/
│ │ │ │ │ ├── bootstrap-table-sticky-header.css
│ │ │ │ │ └── bootstrap-table-sticky-header.js
│ │ │ │ ├── toolbar/
│ │ │ │ │ └── bootstrap-table-toolbar.js
│ │ │ │ └── treegrid/
│ │ │ │ └── bootstrap-table-treegrid.js
│ │ │ ├── locale/
│ │ │ │ ├── bootstrap-table-af-ZA.js
│ │ │ │ ├── bootstrap-table-ar-SA.js
│ │ │ │ ├── bootstrap-table-bg-BG.js
│ │ │ │ ├── bootstrap-table-ca-ES.js
│ │ │ │ ├── bootstrap-table-cs-CZ.js
│ │ │ │ ├── bootstrap-table-da-DK.js
│ │ │ │ ├── bootstrap-table-de-DE.js
│ │ │ │ ├── bootstrap-table-el-GR.js
│ │ │ │ ├── bootstrap-table-en-US.js
│ │ │ │ ├── bootstrap-table-es-AR.js
│ │ │ │ ├── bootstrap-table-es-CL.js
│ │ │ │ ├── bootstrap-table-es-CR.js
│ │ │ │ ├── bootstrap-table-es-ES.js
│ │ │ │ ├── bootstrap-table-es-MX.js
│ │ │ │ ├── bootstrap-table-es-NI.js
│ │ │ │ ├── bootstrap-table-es-SP.js
│ │ │ │ ├── bootstrap-table-et-EE.js
│ │ │ │ ├── bootstrap-table-eu-EU.js
│ │ │ │ ├── bootstrap-table-fa-IR.js
│ │ │ │ ├── bootstrap-table-fi-FI.js
│ │ │ │ ├── bootstrap-table-fr-BE.js
│ │ │ │ ├── bootstrap-table-fr-CH.js
│ │ │ │ ├── bootstrap-table-fr-FR.js
│ │ │ │ ├── bootstrap-table-fr-LU.js
│ │ │ │ ├── bootstrap-table-he-IL.js
│ │ │ │ ├── bootstrap-table-hi-IN.js
│ │ │ │ ├── bootstrap-table-hr-HR.js
│ │ │ │ ├── bootstrap-table-hu-HU.js
│ │ │ │ ├── bootstrap-table-id-ID.js
│ │ │ │ ├── bootstrap-table-it-IT.js
│ │ │ │ ├── bootstrap-table-ja-JP.js
│ │ │ │ ├── bootstrap-table-ka-GE.js
│ │ │ │ ├── bootstrap-table-ko-KR.js
│ │ │ │ ├── bootstrap-table-lb-LU.js
│ │ │ │ ├── bootstrap-table-lt-LT.js
│ │ │ │ ├── bootstrap-table-ms-MY.js
│ │ │ │ ├── bootstrap-table-nb-NO.js
│ │ │ │ ├── bootstrap-table-nl-BE.js
│ │ │ │ ├── bootstrap-table-nl-NL.js
│ │ │ │ ├── bootstrap-table-pl-PL.js
│ │ │ │ ├── bootstrap-table-pt-BR.js
│ │ │ │ ├── bootstrap-table-pt-PT.js
│ │ │ │ ├── bootstrap-table-ro-RO.js
│ │ │ │ ├── bootstrap-table-ru-RU.js
│ │ │ │ ├── bootstrap-table-sk-SK.js
│ │ │ │ ├── bootstrap-table-sl-SI.js
│ │ │ │ ├── bootstrap-table-sr-Cyrl-RS.js
│ │ │ │ ├── bootstrap-table-sr-Latn-RS.js
│ │ │ │ ├── bootstrap-table-sv-SE.js
│ │ │ │ ├── bootstrap-table-th-TH.js
│ │ │ │ ├── bootstrap-table-tr-TR.js
│ │ │ │ ├── bootstrap-table-uk-UA.js
│ │ │ │ ├── bootstrap-table-ur-PK.js
│ │ │ │ ├── bootstrap-table-uz-Latn-UZ.js
│ │ │ │ ├── bootstrap-table-vi-VN.js
│ │ │ │ ├── bootstrap-table-zh-CN.js
│ │ │ │ └── bootstrap-table-zh-TW.js
│ │ │ └── themes/
│ │ │ ├── bootstrap-table/
│ │ │ │ ├── bootstrap-table.css
│ │ │ │ └── bootstrap-table.js
│ │ │ ├── bulma/
│ │ │ │ ├── bootstrap-table-bulma.css
│ │ │ │ └── bootstrap-table-bulma.js
│ │ │ ├── foundation/
│ │ │ │ ├── bootstrap-table-foundation.css
│ │ │ │ └── bootstrap-table-foundation.js
│ │ │ ├── materialize/
│ │ │ │ ├── bootstrap-table-materialize.css
│ │ │ │ └── bootstrap-table-materialize.js
│ │ │ └── semantic/
│ │ │ ├── bootstrap-table-semantic.css
│ │ │ └── bootstrap-table-semantic.js
│ │ └── tac/
│ │ └── css/
│ │ └── tac.css
│ └── templates/
│ ├── accessConfirmation.html
│ ├── changePwd.html
│ ├── client/
│ │ └── master.html
│ ├── oauthError.html
│ ├── profile.html
│ ├── signIn.html
│ ├── signUp.html
│ └── user/
│ └── master.html
└── test/
└── java/
└── com/
└── revengemission/
└── sso/
└── oauth2/
└── server/
├── ApplicationTests.java
├── CaptchaTest.java
├── OAuth2Test.java
├── PkceUtil.java
└── SimpleTest.java
Showing preview only (827K chars total). Download the full file or copy to clipboard to get everything.
SYMBOL INDEX (10015 symbols across 187 files)
FILE: src/main/java/com/revengemission/sso/oauth2/server/ApplicationStartedEventListener.java
class ApplicationStartedEventListener (line 12) | @Component
method onApplicationEvent (line 14) | @Override
FILE: src/main/java/com/revengemission/sso/oauth2/server/Oauth2ServerApplication.java
class Oauth2ServerApplication (line 11) | @EnableScheduling
method main (line 15) | public static void main(String[] args) {
FILE: src/main/java/com/revengemission/sso/oauth2/server/ServerExceptionHandler.java
class ServerExceptionHandler (line 19) | @ControllerAdvice
method handleNoHandlerFoundException (line 25) | @ExceptionHandler({
method handleDeniedException (line 39) | @ExceptionHandler({
method handleException (line 65) | @ExceptionHandler(Exception.class)
method logRequest (line 88) | private void logRequest(Exception ex, HttpStatus status, HttpServletRe...
FILE: src/main/java/com/revengemission/sso/oauth2/server/WebRequestLogAspect.java
class WebRequestLogAspect (line 25) | @Aspect
method wsLog (line 31) | @Pointcut("execution(public * com.revengemission.sso.oauth2.server.con...
method doBefore (line 41) | @Before("wsLog()")
method doAfterReturning (line 91) | @AfterReturning(returning = "ret", pointcut = "wsLog()")
method getAnnotatedParameterValueRequestBody (line 103) | private Object getAnnotatedParameterValueRequestBody(Method method, Ob...
method getHeadersInfo (line 121) | private Map<String, String> getHeadersInfo(HttpServletRequest request) {
FILE: src/main/java/com/revengemission/sso/oauth2/server/config/AuthorizationServerConfig.java
class AuthorizationServerConfig (line 35) | @EnableWebSecurity
method authorizationServerSecurityFilterChain (line 41) | @Bean
method registeredClientRepository (line 72) | @Bean
method clientRegistrationRepository (line 77) | @Bean
method authorizationService (line 82) | @Bean
method authorizationConsentService (line 87) | @Bean
method jwkSource (line 92) | @Bean
method jwtDecoder (line 99) | @Bean
method authorizationServerSettings (line 104) | @Bean
FILE: src/main/java/com/revengemission/sso/oauth2/server/config/CachesEnum.java
type CachesEnum (line 3) | public enum CachesEnum {
method CachesEnum (line 28) | CachesEnum() {
method CachesEnum (line 31) | CachesEnum(int ttl) {
method CachesEnum (line 35) | CachesEnum(int ttl, int maxSize) {
method getMaxSize (line 43) | public int getMaxSize() {
method getTtl (line 47) | public int getTtl() {
FILE: src/main/java/com/revengemission/sso/oauth2/server/config/CaffeineCacheConfiguration.java
class CaffeineCacheConfiguration (line 12) | @Configuration
method cacheManager (line 16) | @Bean
FILE: src/main/java/com/revengemission/sso/oauth2/server/config/CustomAccessDeniedHandler.java
class CustomAccessDeniedHandler (line 19) | @Component
method handle (line 25) | @Override
FILE: src/main/java/com/revengemission/sso/oauth2/server/config/CustomAuthenticationFailureHandler.java
class CustomAuthenticationFailureHandler (line 26) | @Component
method onAuthenticationFailure (line 37) | @Override
FILE: src/main/java/com/revengemission/sso/oauth2/server/config/CustomAuthenticationProvider.java
class CustomAuthenticationProvider (line 22) | public class CustomAuthenticationProvider extends AbstractUserDetailsAut...
method CustomAuthenticationProvider (line 32) | public CustomAuthenticationProvider(UserDetailsService userService, Pa...
method additionalAuthenticationChecks (line 39) | @Override
method retrieveUser (line 54) | @Override
method supports (line 98) | @Override
FILE: src/main/java/com/revengemission/sso/oauth2/server/config/CustomAuthenticationSuccessHandler.java
class CustomAuthenticationSuccessHandler (line 30) | @Component
method onAuthenticationSuccess (line 40) | @Override
FILE: src/main/java/com/revengemission/sso/oauth2/server/config/CustomCorsConfiguration.java
class CustomCorsConfiguration (line 12) | @Configuration
method corsFilter (line 15) | @Bean
FILE: src/main/java/com/revengemission/sso/oauth2/server/config/CustomWebAuthenticationDetails.java
class CustomWebAuthenticationDetails (line 8) | public class CustomWebAuthenticationDetails extends WebAuthenticationDet...
method CustomWebAuthenticationDetails (line 13) | public CustomWebAuthenticationDetails(HttpServletRequest request) {
method getInputVerificationCode (line 19) | public String getInputVerificationCode() {
method getGraphId (line 23) | public String getGraphId() {
method toString (line 27) | @Override
FILE: src/main/java/com/revengemission/sso/oauth2/server/config/DefaultSecurityConfig.java
class DefaultSecurityConfig (line 26) | @EnableWebSecurity
method passwordEncoder (line 48) | @Bean
method defaultSecurityFilterChain (line 53) | @Order(2)
method authenticationSuccessHandler (line 84) | private AuthenticationSuccessHandler authenticationSuccessHandler() {
method sessionRegistry (line 88) | @Bean
method httpSessionEventPublisher (line 93) | @Bean
FILE: src/main/java/com/revengemission/sso/oauth2/server/config/DeviceClientAuthenticationConverter.java
class DeviceClientAuthenticationConverter (line 23) | public final class DeviceClientAuthenticationConverter implements Authen...
method DeviceClientAuthenticationConverter (line 27) | public DeviceClientAuthenticationConverter(String deviceAuthorizationE...
method convert (line 39) | @Nullable
FILE: src/main/java/com/revengemission/sso/oauth2/server/config/DeviceClientAuthenticationProvider.java
class DeviceClientAuthenticationProvider (line 27) | public final class DeviceClientAuthenticationProvider implements Authent...
method DeviceClientAuthenticationProvider (line 33) | public DeviceClientAuthenticationProvider(RegisteredClientRepository r...
method authenticate (line 38) | @Override
method supports (line 74) | @Override
method throwInvalidClient (line 79) | private static void throwInvalidClient(String parameterName) {
FILE: src/main/java/com/revengemission/sso/oauth2/server/config/DeviceClientAuthenticationToken.java
class DeviceClientAuthenticationToken (line 16) | @Transient
method DeviceClientAuthenticationToken (line 19) | public DeviceClientAuthenticationToken(String clientId, ClientAuthenti...
method DeviceClientAuthenticationToken (line 24) | public DeviceClientAuthenticationToken(RegisteredClient registeredClie...
FILE: src/main/java/com/revengemission/sso/oauth2/server/config/FederatedIdentityAuthenticationSuccessHandler.java
class FederatedIdentityAuthenticationSuccessHandler (line 26) | public final class FederatedIdentityAuthenticationSuccessHandler impleme...
method onAuthenticationSuccess (line 35) | @Override
method setOAuth2UserHandler (line 46) | public void setOAuth2UserHandler(Consumer<OAuth2User> oauth2UserHandle...
method setOidcUserHandler (line 50) | public void setOidcUserHandler(Consumer<OidcUser> oidcUserHandler) {
FILE: src/main/java/com/revengemission/sso/oauth2/server/config/JdbcClientRegistrationRepository.java
class JdbcClientRegistrationRepository (line 8) | public class JdbcClientRegistrationRepository implements ClientRegistrat...
method JdbcClientRegistrationRepository (line 12) | public JdbcClientRegistrationRepository(OauthClientRepository oauthCli...
method convertOauthClientEntityToClientRegistration (line 16) | ClientRegistration convertOauthClientEntityToClientRegistration(OauthC...
method findByRegistrationId (line 26) | @Override
FILE: src/main/java/com/revengemission/sso/oauth2/server/config/TokenCustomizerConfig.java
class TokenCustomizerConfig (line 14) | @Configuration
method tokenCustomizer (line 17) | @Bean
FILE: src/main/java/com/revengemission/sso/oauth2/server/controller/CaptchaController.java
class CaptchaController (line 21) | @RequestMapping(value = "/captcha")
method genCaptcha (line 29) | @RequestMapping("/gen")
method checkCaptcha (line 53) | @PostMapping("/check")
method afterPropertiesSet (line 64) | @Override
class Data (line 76) | @lombok.Data
method check2Captcha (line 88) | @GetMapping("/check2")
FILE: src/main/java/com/revengemission/sso/oauth2/server/controller/ManageClientController.java
class ManageClientController (line 14) | @Controller
method master (line 24) | @GetMapping(value = {"/", "", "/master"})
method listObjects (line 30) | @GetMapping(value = "/list")
method setupDetails (line 41) | @GetMapping(value = "/details")
method handlePost (line 50) | @PostMapping(value = "/details")
FILE: src/main/java/com/revengemission/sso/oauth2/server/controller/ManageUserController.java
class ManageUserController (line 21) | @Controller
method master (line 33) | @GetMapping(value = {"/", "", "/master"})
method listObjects (line 39) | @GetMapping(value = "/list")
method setupDetails (line 50) | @GetMapping(value = "/details")
method handlePost (line 59) | @PostMapping(value = "/details")
FILE: src/main/java/com/revengemission/sso/oauth2/server/controller/ProfileController.java
class ProfileController (line 24) | @Controller
method profile (line 37) | @GetMapping(value = {"", "/", "/user/profile"})
method handleProfile (line 52) | @PostMapping("/user/profile")
method changePwd (line 88) | @GetMapping(value = "/user/changePwd")
method handleChangePwd (line 93) | @PostMapping("/user/changePwd")
FILE: src/main/java/com/revengemission/sso/oauth2/server/controller/SignInAndUpController.java
class SignInAndUpController (line 23) | @Controller
method signIn (line 39) | @GetMapping("/signIn")
method signUp (line 49) | @GetMapping("/signUp")
method handleSignUp (line 58) | @ResponseBody
FILE: src/main/java/com/revengemission/sso/oauth2/server/domain/AlreadyExistsException.java
class AlreadyExistsException (line 3) | public class AlreadyExistsException extends RuntimeException {
method AlreadyExistsException (line 9) | public AlreadyExistsException() {
method AlreadyExistsException (line 13) | public AlreadyExistsException(String message) {
FILE: src/main/java/com/revengemission/sso/oauth2/server/domain/AlreadyExpiredException.java
class AlreadyExpiredException (line 3) | public class AlreadyExpiredException extends RuntimeException {
method AlreadyExpiredException (line 9) | public AlreadyExpiredException() {
method AlreadyExpiredException (line 13) | public AlreadyExpiredException(String message) {
FILE: src/main/java/com/revengemission/sso/oauth2/server/domain/BaseDomain.java
class BaseDomain (line 10) | @JsonInclude(JsonInclude.Include.NON_NULL)
FILE: src/main/java/com/revengemission/sso/oauth2/server/domain/EntityNotFoundException.java
class EntityNotFoundException (line 3) | public class EntityNotFoundException extends RuntimeException {
method EntityNotFoundException (line 9) | public EntityNotFoundException() {
method EntityNotFoundException (line 13) | public EntityNotFoundException(String message) {
FILE: src/main/java/com/revengemission/sso/oauth2/server/domain/GenderEnum.java
type GenderEnum (line 3) | public enum GenderEnum {
method getMeaning (line 20) | public String getMeaning() {
method GenderEnum (line 24) | GenderEnum() {
method GenderEnum (line 27) | GenderEnum(String meaning) {
FILE: src/main/java/com/revengemission/sso/oauth2/server/domain/GlobalConstant.java
class GlobalConstant (line 3) | public class GlobalConstant {
FILE: src/main/java/com/revengemission/sso/oauth2/server/domain/JsonObjects.java
class JsonObjects (line 7) | public class JsonObjects<T> implements Serializable {
method getRows (line 16) | public List<T> getRows() {
method setRows (line 23) | public void setRows(List<T> rows) {
method getTotal (line 27) | public long getTotal() {
method setTotal (line 31) | public void setTotal(long total) {
method getPages (line 35) | public long getPages() {
method setPages (line 39) | public void setPages(long pages) {
FILE: src/main/java/com/revengemission/sso/oauth2/server/domain/LoginHistory.java
class LoginHistory (line 9) | @JsonInclude(JsonInclude.Include.NON_NULL)
FILE: src/main/java/com/revengemission/sso/oauth2/server/domain/NotImplementException.java
class NotImplementException (line 3) | public class NotImplementException extends RuntimeException{
method NotImplementException (line 9) | public NotImplementException() {
method NotImplementException (line 13) | public NotImplementException(String message) {
FILE: src/main/java/com/revengemission/sso/oauth2/server/domain/OAuth2Exception.java
class OAuth2Exception (line 5) | public class OAuth2Exception extends RuntimeException {
method OAuth2Exception (line 9) | public OAuth2Exception(String msg) {
method OAuth2Exception (line 13) | public OAuth2Exception(String msg, Throwable t) {
method OAuth2Exception (line 17) | public OAuth2Exception(String msg, HttpStatus httpStatus, String error...
method OAuth2Exception (line 23) | public OAuth2Exception(String msg, Throwable t, HttpStatus httpStatus,...
method getHttpStatus (line 29) | public HttpStatus getHttpStatus() {
method setHttpStatus (line 33) | public void setHttpStatus(HttpStatus httpStatus) {
method getErrorCode (line 37) | public String getErrorCode() {
method setErrorCode (line 41) | public void setErrorCode(String errorCode) {
FILE: src/main/java/com/revengemission/sso/oauth2/server/domain/OauthClient.java
class OauthClient (line 10) | @JsonInclude(JsonInclude.Include.NON_NULL)
FILE: src/main/java/com/revengemission/sso/oauth2/server/domain/ParameterException.java
class ParameterException (line 3) | public class ParameterException extends RuntimeException {
method ParameterException (line 9) | public ParameterException() {
method ParameterException (line 13) | public ParameterException(String message) {
FILE: src/main/java/com/revengemission/sso/oauth2/server/domain/ResponseResult.java
class ResponseResult (line 9) | @JsonInclude(JsonInclude.Include.NON_NULL)
method ResponseResult (line 36) | public ResponseResult() {
method getId (line 40) | public Long getId() {
method setId (line 44) | public void setId(Long id) {
method getStatus (line 48) | public int getStatus() {
method setStatus (line 52) | public void setStatus(int status) {
method getError (line 56) | public String getError() {
method setError (line 60) | public void setError(String error) {
method getMessage (line 64) | public String getMessage() {
method setMessage (line 68) | public void setMessage(String message) {
method getPath (line 72) | public String getPath() {
method setPath (line 76) | public void setPath(String path) {
method getTimestamp (line 80) | public Long getTimestamp() {
method setTimestamp (line 87) | public void setTimestamp(Long timestamp) {
method getTotal (line 91) | public Long getTotal() {
method setTotal (line 95) | public void setTotal(Long total) {
method getAck (line 99) | public Integer getAck() {
method setAck (line 103) | public void setAck(Integer ack) {
method getAdditional (line 107) | public Object getAdditional() {
method setAdditional (line 111) | public void setAdditional(Object additional) {
method getData (line 115) | public T getData() {
method setData (line 119) | public void setData(T data) {
method getIdString (line 123) | public String getIdString() {
method ResponseResult (line 130) | public ResponseResult(int status, String message) {
method ResponseResult (line 135) | public ResponseResult(int status, String message, T data) {
FILE: src/main/java/com/revengemission/sso/oauth2/server/domain/Role.java
class Role (line 11) | @JsonInclude(JsonInclude.Include.NON_NULL)
FILE: src/main/java/com/revengemission/sso/oauth2/server/domain/RoleEnum.java
type RoleEnum (line 3) | public enum RoleEnum {
method getMeaning (line 20) | public String getMeaning() {
method RoleEnum (line 24) | RoleEnum() {
method RoleEnum (line 27) | RoleEnum(String meaning) {
FILE: src/main/java/com/revengemission/sso/oauth2/server/domain/ScopeDefinition.java
class ScopeDefinition (line 3) | public class ScopeDefinition extends BaseDomain {
method getScope (line 14) | public String getScope() {
method setScope (line 18) | public void setScope(String scope) {
method getDefinition (line 22) | public String getDefinition() {
method setDefinition (line 26) | public void setDefinition(String definition) {
FILE: src/main/java/com/revengemission/sso/oauth2/server/domain/UserAccount.java
class UserAccount (line 14) | @JsonInclude(JsonInclude.Include.NON_NULL)
FILE: src/main/java/com/revengemission/sso/oauth2/server/domain/UserInfo.java
class UserInfo (line 8) | public class UserInfo extends User {
method UserInfo (line 13) | public UserInfo(String accountOpenCode, String username, String passwo...
method UserInfo (line 17) | public UserInfo(String accountOpenCode, String username, String passwo...
method getAccountOpenCode (line 27) | public String getAccountOpenCode() {
method setAccountOpenCode (line 31) | public void setAccountOpenCode(String accountOpenCode) {
method getNickname (line 35) | public String getNickname() {
method setNickname (line 39) | public void setNickname(String nickname) {
FILE: src/main/java/com/revengemission/sso/oauth2/server/domain/VerificationCodeException.java
class VerificationCodeException (line 5) | public class VerificationCodeException extends AuthenticationException {
method VerificationCodeException (line 11) | public VerificationCodeException(String msg) {
method VerificationCodeException (line 15) | public VerificationCodeException(String msg, Throwable t) {
FILE: src/main/java/com/revengemission/sso/oauth2/server/jose/Jwks.java
class Jwks (line 16) | public final class Jwks {
method Jwks (line 18) | private Jwks() {
method generateRsa (line 21) | public static RSAKey generateRsa() {
method generateEc (line 31) | public static ECKey generateEc() {
method generateSecret (line 42) | public static OctetSequenceKey generateSecret() {
FILE: src/main/java/com/revengemission/sso/oauth2/server/jose/KeyGeneratorUtils.java
class KeyGeneratorUtils (line 13) | final class KeyGeneratorUtils {
method KeyGeneratorUtils (line 15) | private KeyGeneratorUtils() {
method generateSecretKey (line 18) | static SecretKey generateSecretKey() {
method generateRsaKey (line 28) | static KeyPair generateRsaKey() {
method generateEcKey (line 40) | static KeyPair generateEcKey() {
FILE: src/main/java/com/revengemission/sso/oauth2/server/mapper/BaseMapper.java
type BaseMapper (line 5) | public interface BaseMapper {
method stringToLong (line 7) | @Named("stringToLong")
FILE: src/main/java/com/revengemission/sso/oauth2/server/mapper/LoginHistoryMapper.java
type LoginHistoryMapper (line 11) | @Mapper(unmappedTargetPolicy = ReportingPolicy.IGNORE, componentModel = ...
method entityToDto (line 15) | @Mapping(target = "username", source = "username")
method dtoToEntity (line 18) | @Mapping(target = "username", source = "username")
FILE: src/main/java/com/revengemission/sso/oauth2/server/mapper/OauthClientMapper.java
type OauthClientMapper (line 11) | @Mapper(unmappedTargetPolicy = ReportingPolicy.IGNORE, componentModel = ...
method entityToDto (line 15) | @Mapping(target = "clientId", source = "clientId")
method dtoToEntity (line 18) | @Mapping(target = "clientId", source = "clientId")
FILE: src/main/java/com/revengemission/sso/oauth2/server/mapper/RoleMapper.java
type RoleMapper (line 11) | @Mapper(unmappedTargetPolicy = ReportingPolicy.IGNORE, componentModel = ...
method entityToDto (line 15) | @Mapping(target = "roleName", source = "roleName")
method dtoToEntity (line 18) | @Mapping(target = "roleName", source = "roleName")
FILE: src/main/java/com/revengemission/sso/oauth2/server/mapper/ScopeDefinitionMapper.java
type ScopeDefinitionMapper (line 11) | @Mapper(unmappedTargetPolicy = ReportingPolicy.IGNORE, componentModel = ...
method entityToDto (line 15) | @Mapping(target = "scope", source = "scope")
method dtoToEntity (line 18) | @Mapping(target = "scope", source = "scope")
FILE: src/main/java/com/revengemission/sso/oauth2/server/mapper/UserAccountMapper.java
type UserAccountMapper (line 11) | @Mapper(unmappedTargetPolicy = ReportingPolicy.IGNORE, componentModel = ...
method entityToDto (line 15) | @Mapping(target = "username", source = "username")
method dtoToEntity (line 18) | @Mapping(target = "username", source = "username")
FILE: src/main/java/com/revengemission/sso/oauth2/server/persistence/entity/BaseEntity.java
class BaseEntity (line 15) | @MappedSuperclass
method getId (line 40) | public Long getId() {
method setId (line 44) | public void setId(Long id) {
method getRecordStatus (line 48) | public int getRecordStatus() {
method setRecordStatus (line 52) | public void setRecordStatus(int recordStatus) {
method getVersion (line 56) | public int getVersion() {
method setVersion (line 60) | public void setVersion(int version) {
method getRemarks (line 64) | public String getRemarks() {
method setRemarks (line 68) | public void setRemarks(String remarks) {
method getSortPriority (line 72) | public int getSortPriority() {
method setSortPriority (line 76) | public void setSortPriority(int sortPriority) {
method getDateCreated (line 80) | public LocalDateTime getDateCreated() {
method setDateCreated (line 84) | public void setDateCreated(LocalDateTime dateCreated) {
method getLastModified (line 88) | public LocalDateTime getLastModified() {
method setLastModified (line 92) | public void setLastModified(LocalDateTime lastModified) {
method updateTimeStamps (line 96) | @PreUpdate
FILE: src/main/java/com/revengemission/sso/oauth2/server/persistence/entity/LoginHistoryEntity.java
class LoginHistoryEntity (line 9) | @Entity
method getClientId (line 26) | public String getClientId() {
method setClientId (line 30) | public void setClientId(String clientId) {
method getUsername (line 34) | public String getUsername() {
method setUsername (line 38) | public void setUsername(String username) {
method getIp (line 42) | public String getIp() {
method setIp (line 46) | public void setIp(String ip) {
method getDevice (line 50) | public String getDevice() {
method setDevice (line 54) | public void setDevice(String device) {
FILE: src/main/java/com/revengemission/sso/oauth2/server/persistence/entity/Oauth2AuthorizationConsent.java
class Oauth2AuthorizationConsent (line 7) | @Entity
method getRegisteredClientId (line 15) | public String getRegisteredClientId() {
method setRegisteredClientId (line 19) | public void setRegisteredClientId(String registeredClientId) {
method getPrincipalName (line 23) | public String getPrincipalName() {
method setPrincipalName (line 27) | public void setPrincipalName(String principalName) {
method getAuthorities (line 31) | public String getAuthorities() {
method setAuthorities (line 35) | public void setAuthorities(String authorities) {
FILE: src/main/java/com/revengemission/sso/oauth2/server/persistence/entity/OauthClientEntity.java
class OauthClientEntity (line 11) | @Entity
method getClientId (line 40) | public String getClientId() {
method setClientId (line 44) | public void setClientId(String clientId) {
method getApplicationName (line 48) | public String getApplicationName() {
method setApplicationName (line 52) | public void setApplicationName(String applicationName) {
method getResourceIds (line 56) | public String getResourceIds() {
method setResourceIds (line 60) | public void setResourceIds(String resourceIds) {
method getClientSecret (line 64) | public String getClientSecret() {
method setClientSecret (line 68) | public void setClientSecret(String clientSecret) {
method getClientAuthenticationMethods (line 72) | public String getClientAuthenticationMethods() {
method setClientAuthenticationMethods (line 76) | public void setClientAuthenticationMethods(String clientAuthentication...
method getScope (line 80) | public String getScope() {
method setScope (line 84) | public void setScope(String scope) {
method getAuthorizedGrantTypes (line 88) | public String getAuthorizedGrantTypes() {
method setAuthorizedGrantTypes (line 92) | public void setAuthorizedGrantTypes(String authorizedGrantTypes) {
method getWebServerRedirectUri (line 96) | public String getWebServerRedirectUri() {
method setWebServerRedirectUri (line 100) | public void setWebServerRedirectUri(String webServerRedirectUri) {
method getAuthorities (line 104) | public String getAuthorities() {
method setAuthorities (line 108) | public void setAuthorities(String authorities) {
method getAccessTokenValidity (line 112) | public Integer getAccessTokenValidity() {
method setAccessTokenValidity (line 116) | public void setAccessTokenValidity(Integer accessTokenValidity) {
method getRefreshTokenValidity (line 120) | public Integer getRefreshTokenValidity() {
method setRefreshTokenValidity (line 124) | public void setRefreshTokenValidity(Integer refreshTokenValidity) {
method getAdditionalInformation (line 128) | public String getAdditionalInformation() {
method setAdditionalInformation (line 132) | public void setAdditionalInformation(String additionalInformation) {
method getAutoApprove (line 136) | public String getAutoApprove() {
method setAutoApprove (line 140) | public void setAutoApprove(String autoApprove) {
method getExpirationDate (line 144) | public LocalDateTime getExpirationDate() {
method setExpirationDate (line 148) | public void setExpirationDate(LocalDateTime expirationDate) {
FILE: src/main/java/com/revengemission/sso/oauth2/server/persistence/entity/RoleEntity.java
class RoleEntity (line 9) | @Entity
method getRoleName (line 17) | public String getRoleName() {
method setRoleName (line 21) | public void setRoleName(String roleName) {
FILE: src/main/java/com/revengemission/sso/oauth2/server/persistence/entity/ScopeDefinitionEntity.java
class ScopeDefinitionEntity (line 7) | @Entity
method getScope (line 20) | public String getScope() {
method setScope (line 24) | public void setScope(String scope) {
method getDefinition (line 28) | public String getDefinition() {
method setDefinition (line 32) | public void setDefinition(String definition) {
FILE: src/main/java/com/revengemission/sso/oauth2/server/persistence/entity/ThirdPartyAccountEntity.java
class ThirdPartyAccountEntity (line 9) | @Entity
method getThirdParty (line 28) | public String getThirdParty() {
method setThirdParty (line 32) | public void setThirdParty(String thirdParty) {
method getThirdPartyAccountId (line 36) | public String getThirdPartyAccountId() {
method setThirdPartyAccountId (line 40) | public void setThirdPartyAccountId(String thirdPartyAccountId) {
method getAccountOpenCode (line 44) | public String getAccountOpenCode() {
method setAccountOpenCode (line 48) | public void setAccountOpenCode(String accountOpenCode) {
method getRoles (line 52) | public List<RoleEntity> getRoles() {
method setRoles (line 56) | public void setRoles(List<RoleEntity> roles) {
method getNickName (line 60) | public String getNickName() {
method setNickName (line 64) | public void setNickName(String nickName) {
method getAvatarUrl (line 68) | public String getAvatarUrl() {
method setAvatarUrl (line 72) | public void setAvatarUrl(String avatarUrl) {
FILE: src/main/java/com/revengemission/sso/oauth2/server/persistence/entity/UserAccountEntity.java
class UserAccountEntity (line 11) | @Entity
method getUsername (line 41) | public String getUsername() {
method setUsername (line 45) | public void setUsername(String username) {
method getPassword (line 49) | public String getPassword() {
method setPassword (line 53) | public void setPassword(String password) {
method getAccountOpenCode (line 57) | public String getAccountOpenCode() {
method setAccountOpenCode (line 61) | public void setAccountOpenCode(String accountOpenCode) {
method getNickName (line 65) | public String getNickName() {
method setNickName (line 69) | public void setNickName(String nickName) {
method getAvatarUrl (line 73) | public String getAvatarUrl() {
method setAvatarUrl (line 77) | public void setAvatarUrl(String avatarUrl) {
method getEmail (line 81) | public String getEmail() {
method setEmail (line 85) | public void setEmail(String email) {
method getMobile (line 89) | public String getMobile() {
method setMobile (line 93) | public void setMobile(String mobile) {
method getProvince (line 97) | public String getProvince() {
method setProvince (line 101) | public void setProvince(String province) {
method getCity (line 105) | public String getCity() {
method setCity (line 109) | public void setCity(String city) {
method getAddress (line 113) | public String getAddress() {
method setAddress (line 117) | public void setAddress(String address) {
method getBirthday (line 121) | public LocalDate getBirthday() {
method setBirthday (line 125) | public void setBirthday(LocalDate birthday) {
method getGender (line 129) | public String getGender() {
method setGender (line 133) | public void setGender(String gender) {
method getFailureTime (line 137) | public LocalDateTime getFailureTime() {
method setFailureTime (line 141) | public void setFailureTime(LocalDateTime failureTime) {
method getFailureCount (line 145) | public int getFailureCount() {
method setFailureCount (line 149) | public void setFailureCount(int failureCount) {
method getRoles (line 153) | public List<RoleEntity> getRoles() {
method setRoles (line 157) | public void setRoles(List<RoleEntity> roles) {
FILE: src/main/java/com/revengemission/sso/oauth2/server/persistence/repository/LoginHistoryRepository.java
type LoginHistoryRepository (line 8) | public interface LoginHistoryRepository extends JpaRepository<LoginHisto...
method findByUsername (line 9) | Page<LoginHistoryEntity> findByUsername(String username, Pageable page);
FILE: src/main/java/com/revengemission/sso/oauth2/server/persistence/repository/OauthClientRepository.java
type OauthClientRepository (line 6) | public interface OauthClientRepository extends JpaRepository<OauthClient...
method findByClientId (line 7) | OauthClientEntity findByClientId(String clientId);
FILE: src/main/java/com/revengemission/sso/oauth2/server/persistence/repository/RoleRepository.java
type RoleRepository (line 6) | public interface RoleRepository extends JpaRepository<RoleEntity, Long> {
method findByRoleName (line 7) | RoleEntity findByRoleName(String roleName);
FILE: src/main/java/com/revengemission/sso/oauth2/server/persistence/repository/ScopeDefinitionRepository.java
type ScopeDefinitionRepository (line 6) | public interface ScopeDefinitionRepository extends JpaRepository<ScopeDe...
method findByScope (line 7) | ScopeDefinitionEntity findByScope(String scope);
FILE: src/main/java/com/revengemission/sso/oauth2/server/persistence/repository/ThirdPartyAccountRepository.java
type ThirdPartyAccountRepository (line 6) | public interface ThirdPartyAccountRepository extends JpaRepository<Third...
method findByThirdPartyAndThirdPartyAccountId (line 7) | ThirdPartyAccountEntity findByThirdPartyAndThirdPartyAccountId(String ...
FILE: src/main/java/com/revengemission/sso/oauth2/server/persistence/repository/UserAccountRepository.java
type UserAccountRepository (line 8) | public interface UserAccountRepository extends JpaRepository<UserAccount...
method findByUsername (line 9) | UserAccountEntity findByUsername(String username);
method findByUsernameLike (line 11) | Page<UserAccountEntity> findByUsernameLike(String username, Pageable p...
method existsByUsername (line 13) | boolean existsByUsername(String username);
FILE: src/main/java/com/revengemission/sso/oauth2/server/schedule/Task.java
class Task (line 8) | @Component
method task (line 11) | @Scheduled(cron = "0 0 * * * *")
FILE: src/main/java/com/revengemission/sso/oauth2/server/service/CaptchaService.java
type CaptchaService (line 5) | public interface CaptchaService {
method saveCaptcha (line 6) | boolean saveCaptcha(CachesEnum cachesEnum, String key, Object value);
method getCaptcha (line 8) | String getCaptcha(CachesEnum cachesEnum, String key);
method removeCaptcha (line 10) | void removeCaptcha(CachesEnum cachesEnum, String key);
method checkCaptchaTimes (line 12) | boolean checkCaptchaTimes(CachesEnum cachesEnum, String key);
FILE: src/main/java/com/revengemission/sso/oauth2/server/service/CommonServiceInterface.java
type CommonServiceInterface (line 9) | public interface CommonServiceInterface<T> {
method list (line 12) | default JsonObjects<T> list(int pageNum,
method create (line 19) | default T create(T t) throws AlreadyExistsException {
method retrieveById (line 23) | default T retrieveById(long id) throws EntityNotFoundException {
method updateById (line 27) | default T updateById(T t) throws EntityNotFoundException {
method deleteById (line 31) | default void deleteById(long id) {
method updateRecordStatus (line 35) | default void updateRecordStatus(long id, int recordStatus) {
FILE: src/main/java/com/revengemission/sso/oauth2/server/service/LoginHistoryService.java
type LoginHistoryService (line 6) | public interface LoginHistoryService extends CommonServiceInterface<Logi...
method listByUsername (line 7) | JsonObjects<LoginHistory> listByUsername(String username, int pageNum,
method asyncCreate (line 12) | void asyncCreate(LoginHistory loginHistory);
FILE: src/main/java/com/revengemission/sso/oauth2/server/service/OauthClientService.java
type OauthClientService (line 6) | public interface OauthClientService extends CommonServiceInterface<Oauth...
method findByClientId (line 7) | default OauthClient findByClientId(String clientId){
FILE: src/main/java/com/revengemission/sso/oauth2/server/service/RoleService.java
type RoleService (line 6) | public interface RoleService extends CommonServiceInterface<Role> {
method findByRoleName (line 7) | default Role findByRoleName(String roleName) throws NotImplementExcept...
FILE: src/main/java/com/revengemission/sso/oauth2/server/service/ScopeDefinitionService.java
type ScopeDefinitionService (line 6) | public interface ScopeDefinitionService extends CommonServiceInterface<S...
method findByScope (line 7) | default ScopeDefinition findByScope(String scope) throws NotImplementE...
FILE: src/main/java/com/revengemission/sso/oauth2/server/service/UserAccountService.java
type UserAccountService (line 7) | public interface UserAccountService extends CommonServiceInterface<UserA...
method listByUsername (line 8) | JsonObjects<UserAccount> listByUsername(String username,
method findByUsername (line 14) | UserAccount findByUsername(String username) throws EntityNotFoundExcep...
method existsByUsername (line 16) | boolean existsByUsername(String username);
method loginSuccess (line 18) | void loginSuccess(String username) throws EntityNotFoundException;
method loginFailure (line 20) | void loginFailure(String username);
FILE: src/main/java/com/revengemission/sso/oauth2/server/service/impl/CaptchaServiceImpl.java
class CaptchaServiceImpl (line 16) | @Service
method saveCaptcha (line 27) | @Override
method getCaptcha (line 33) | @Override
method removeCaptcha (line 46) | @Override
method checkCaptchaTimes (line 52) | @Override
FILE: src/main/java/com/revengemission/sso/oauth2/server/service/impl/LoginHistoryServiceImpl.java
class LoginHistoryServiceImpl (line 21) | @Service
method listByUsername (line 29) | @Override
method asyncCreate (line 49) | @Override
FILE: src/main/java/com/revengemission/sso/oauth2/server/service/impl/OauthClientServiceImpl.java
class OauthClientServiceImpl (line 23) | @Service
method findByClientId (line 32) | @Override
method list (line 42) | @Override
method create (line 62) | @Override
method retrieveById (line 73) | @Override
method updateById (line 79) | @Override
method updateRecordStatus (line 99) | @Override
FILE: src/main/java/com/revengemission/sso/oauth2/server/service/impl/RegisteredClientRepositoryImpl.java
class RegisteredClientRepositoryImpl (line 18) | public class RegisteredClientRepositoryImpl implements RegisteredClientR...
method RegisteredClientRepositoryImpl (line 24) | public RegisteredClientRepositoryImpl(OauthClientRepository oauthClien...
method save (line 29) | @Override
method findById (line 34) | @Override
method findByClientId (line 45) | @Override
method convertOauthClientEntityToRegisteredClient (line 63) | RegisteredClient convertOauthClientEntityToRegisteredClient(OauthClien...
FILE: src/main/java/com/revengemission/sso/oauth2/server/service/impl/RoleServiceImpl.java
class RoleServiceImpl (line 12) | @Service
method findByRoleName (line 21) | @Override
FILE: src/main/java/com/revengemission/sso/oauth2/server/service/impl/ScopeDefinitionServiceImpl.java
class ScopeDefinitionServiceImpl (line 12) | @Service
method findByScope (line 21) | @Override
FILE: src/main/java/com/revengemission/sso/oauth2/server/service/impl/UserAccountServiceImpl.java
class UserAccountServiceImpl (line 31) | @Service
method listByUsername (line 46) | @Override
method create (line 72) | @Override
method retrieveById (line 93) | @Override
method updateById (line 99) | @Override
method updateRecordStatus (line 158) | @Override
method findByUsername (line 167) | @Override
method existsByUsername (line 177) | @Override
method loginSuccess (line 182) | @Override
method loginFailure (line 196) | @Override
FILE: src/main/java/com/revengemission/sso/oauth2/server/service/impl/UserDetailsServiceImpl.java
class UserDetailsServiceImpl (line 18) | @Service
method loadUserByUsername (line 23) | @Override
FILE: src/main/java/com/revengemission/sso/oauth2/server/utils/BigIntegerUtils.java
class BigIntegerUtils (line 5) | public class BigIntegerUtils {
method toBytesUnsigned (line 6) | public static byte[] toBytesUnsigned(BigInteger bigInt) {
method BigIntegerUtils (line 27) | private BigIntegerUtils() {
FILE: src/main/java/com/revengemission/sso/oauth2/server/utils/CheckPasswordStrength.java
class CheckPasswordStrength (line 16) | public class CheckPasswordStrength {
type LEVEL (line 18) | public enum LEVEL {
method checkCharacterType (line 63) | private static int checkCharacterType(char c) {
method countLetter (line 83) | private static int countLetter(String passwd, int type) {
method check (line 101) | public static int check(String passwd) {
method getPasswordLevel (line 239) | public static LEVEL getPasswordLevel(String passwd) {
FILE: src/main/java/com/revengemission/sso/oauth2/server/utils/ClientIpUtil.java
class ClientIpUtil (line 6) | public class ClientIpUtil {
method getIpAddress (line 7) | public static String getIpAddress(HttpServletRequest request) {
method getServerHost (line 46) | public static String getServerHost(HttpServletRequest request) {
method getFullRequestUrl (line 57) | public static String getFullRequestUrl(HttpServletRequest request) {
FILE: src/main/java/com/revengemission/sso/oauth2/server/utils/DateUtil.java
class DateUtil (line 8) | public class DateUtil {
method beforeToday (line 9) | public static boolean beforeToday(Date date) {
method beforeToday (line 21) | public static boolean beforeToday(LocalDateTime date) {
FILE: src/main/java/com/revengemission/sso/oauth2/server/utils/JsonUtil.java
class JsonUtil (line 35) | public class JsonUtil {
method objectToJsonString (line 63) | public static String objectToJsonString(Object object) {
method multiValueMapToJsonString (line 68) | public static String multiValueMapToJsonString(Map<String, String[]> o...
method jsonStringToObject (line 81) | public static <T> T jsonStringToObject(String jsonString, Class<T> t) {
method jsonStringToObject (line 96) | public static <T> T jsonStringToObject(String str, TypeReference<T> ty...
method jsonStringToObject (line 109) | public static <T> T jsonStringToObject(String str, Class<?> collection...
method jsonNodeToMap (line 114) | public static Map<String, Object> jsonNodeToMap(JsonNode jsonNode) {
method jsonNodeToMapMap (line 120) | public static Map<String, Map<String, Object>> jsonNodeToMapMap(JsonNo...
method jsonStringToMap (line 126) | public static Map<String, Object> jsonStringToMap(String jsonString) {
method jsonStringToStringMap (line 131) | public static Map<String, String> jsonStringToStringMap(String jsonStr...
method jsonStringToMapMap (line 136) | public static Map<String, Map<String, Object>> jsonStringToMapMap(Stri...
method jsonStringToJsonNode (line 141) | public static JsonNode jsonStringToJsonNode(String jsonString) {
method objectToJsonNode (line 145) | public static JsonNode objectToJsonNode(Object object) {
method createObjectNode (line 149) | public static ObjectNode createObjectNode() {
method createArrayNode (line 153) | public static ArrayNode createArrayNode() {
FILE: src/main/resources/static/assets/bootstrap-table/bootstrap-table-locale-all.js
function requireGlobalThis (line 14) | function requireGlobalThis () {
function requireFails (line 40) | function requireFails () {
function requireDescriptors (line 56) | function requireDescriptors () {
function requireFunctionBindNative (line 72) | function requireFunctionBindNative () {
function requireFunctionCall (line 89) | function requireFunctionCall () {
function requireObjectPropertyIsEnumerable (line 106) | function requireObjectPropertyIsEnumerable () {
function requireCreatePropertyDescriptor (line 128) | function requireCreatePropertyDescriptor () {
function requireFunctionUncurryThis (line 145) | function requireFunctionUncurryThis () {
function requireClassofRaw (line 166) | function requireClassofRaw () {
function requireIndexedObject (line 183) | function requireIndexedObject () {
function requireIsNullOrUndefined (line 207) | function requireIsNullOrUndefined () {
function requireRequireObjectCoercible (line 221) | function requireRequireObjectCoercible () {
function requireToIndexedObject (line 240) | function requireToIndexedObject () {
function requireIsCallable (line 256) | function requireIsCallable () {
function requireIsObject (line 276) | function requireIsObject () {
function requireGetBuiltIn (line 290) | function requireGetBuiltIn () {
function requireObjectIsPrototypeOf (line 309) | function requireObjectIsPrototypeOf () {
function requireEnvironmentUserAgent (line 321) | function requireEnvironmentUserAgent () {
function requireEnvironmentV8Version (line 336) | function requireEnvironmentV8Version () {
function requireSymbolConstructorDetection (line 372) | function requireSymbolConstructorDetection () {
function requireUseSymbolAsUid (line 399) | function requireUseSymbolAsUid () {
function requireIsSymbol (line 414) | function requireIsSymbol () {
function requireTryToString (line 436) | function requireTryToString () {
function requireACallable (line 454) | function requireACallable () {
function requireGetMethod (line 473) | function requireGetMethod () {
function requireOrdinaryToPrimitive (line 491) | function requireOrdinaryToPrimitive () {
function requireIsPure (line 517) | function requireIsPure () {
function requireDefineGlobalProperty (line 527) | function requireDefineGlobalProperty () {
function requireSharedStore (line 547) | function requireSharedStore () {
function requireShared (line 570) | function requireShared () {
function requireToObject (line 584) | function requireToObject () {
function requireHasOwnProperty (line 602) | function requireHasOwnProperty () {
function requireUid (line 622) | function requireUid () {
function requireWellKnownSymbol (line 640) | function requireWellKnownSymbol () {
function requireToPrimitive (line 667) | function requireToPrimitive () {
function requireToPropertyKey (line 701) | function requireToPropertyKey () {
function requireDocumentCreateElement (line 719) | function requireDocumentCreateElement () {
function requireIe8DomDefine (line 738) | function requireIe8DomDefine () {
function requireObjectGetOwnPropertyDescriptor (line 757) | function requireObjectGetOwnPropertyDescriptor () {
function requireV8PrototypeDefineBug (line 790) | function requireV8PrototypeDefineBug () {
function requireAnObject (line 811) | function requireAnObject () {
function requireObjectDefineProperty (line 829) | function requireObjectDefineProperty () {
function requireCreateNonEnumerableProperty (line 881) | function requireCreateNonEnumerableProperty () {
function requireFunctionName (line 902) | function requireFunctionName () {
function requireInspectSource (line 928) | function requireInspectSource () {
function requireWeakMapBasicDetection (line 951) | function requireWeakMapBasicDetection () {
function requireSharedKey (line 966) | function requireSharedKey () {
function requireHiddenKeys (line 983) | function requireHiddenKeys () {
function requireInternalState (line 993) | function requireInternalState () {
function requireMakeBuiltIn (line 1071) | function requireMakeBuiltIn () {
function requireDefineBuiltIn (line 1134) | function requireDefineBuiltIn () {
function requireMathTrunc (line 1172) | function requireMathTrunc () {
function requireToIntegerOrInfinity (line 1191) | function requireToIntegerOrInfinity () {
function requireToAbsoluteIndex (line 1209) | function requireToAbsoluteIndex () {
function requireToLength (line 1230) | function requireToLength () {
function requireLengthOfArrayLike (line 1249) | function requireLengthOfArrayLike () {
function requireArrayIncludes (line 1265) | function requireArrayIncludes () {
function requireObjectKeysInternal (line 1307) | function requireObjectKeysInternal () {
function requireEnumBugKeys (line 1336) | function requireEnumBugKeys () {
function requireObjectGetOwnPropertyNames (line 1354) | function requireObjectGetOwnPropertyNames () {
function requireObjectGetOwnPropertySymbols (line 1375) | function requireObjectGetOwnPropertySymbols () {
function requireOwnKeys (line 1386) | function requireOwnKeys () {
function requireCopyConstructorProperties (line 1409) | function requireCopyConstructorProperties () {
function requireIsForced (line 1434) | function requireIsForced () {
function require_export (line 1465) | function require_export () {
function requireIsArray (line 1528) | function requireIsArray () {
function requireDoesNotExceedSafeInteger (line 1545) | function requireDoesNotExceedSafeInteger () {
function requireCreateProperty (line 1561) | function requireCreateProperty () {
function requireToStringTagSupport (line 1578) | function requireToStringTagSupport () {
function requireClassof (line 1595) | function requireClassof () {
function requireIsConstructor (line 1633) | function requireIsConstructor () {
function requireArraySpeciesConstructor (line 1693) | function requireArraySpeciesConstructor () {
function requireArraySpeciesCreate (line 1724) | function requireArraySpeciesCreate () {
function requireArrayMethodHasSpeciesSupport (line 1740) | function requireArrayMethodHasSpeciesSupport () {
function requireEs_array_concat (line 1767) | function requireEs_array_concat () {
function requireObjectKeys (line 1837) | function requireObjectKeys () {
function requireObjectAssign (line 1855) | function requireObjectAssign () {
function requireEs_object_assign (line 1920) | function requireEs_object_assign () {
FILE: src/main/resources/static/assets/bootstrap-table/bootstrap-table-vue.esm.js
method default (line 23) | default () {
method default (line 29) | default () {
method mounted (line 34) | mounted () {
method _initTable (line 47) | _initTable () {
method handler (line 72) | handler () {
method handler (line 78) | handler () {
method handler (line 84) | handler () {
function normalizeComponent (line 92) | function normalizeComponent(template, style, script, scopeId, isFunction...
FILE: src/main/resources/static/assets/bootstrap-table/bootstrap-table-vue.js
function G (line 7) | function G(e) {
function xe (line 21) | function xe(e) {
function Q (line 30) | function Q(e) {
function oe (line 47) | function oe(e) {
function K (line 50) | function K(e) {
function j (line 53) | function j(e) {
function L (line 56) | function L(e) {
function C (line 59) | function C(e) {
function Z (line 63) | function Z(e) {
function Te (line 68) | function Te(e) {
function Re (line 71) | function Re() {
function R (line 75) | function R(e, ...t) {
function Ve (line 105) | function Ve() {
function Ie (line 121) | function Ie(e) {
function $e (line 128) | function $e({ vnode: e, recurseCount: t }) {
function Fe (line 136) | function Fe(e) {
function re (line 142) | function re(e, t, n) {
function X (line 178) | function X(e, t, n, o) {
function ie (line 185) | function ie(e, t, n, o = !0) {
function De (line 210) | function De(e, t, n, o = !0, s = !1) {
function Me (line 229) | function Me(e) {
function Ue (line 237) | function Ue(e) {
function le (line 244) | function le() {
function ze (line 247) | function ze(e) {
function He (line 250) | function He(e) {
function ce (line 267) | function ce(e) {
function ae (line 291) | function ae(e, t) {
function je (line 310) | function je(e, t) {
function P (line 316) | function P(e) {
function Be (line 319) | function Be(e, t) {
function Je (line 325) | function Je(e, t) {
function te (line 343) | function te(e, t) {
function q (line 348) | function q(e) {
function ue (line 361) | function ue(e, t) {
function Xe (line 372) | function Xe(e = !1) {
function ve (line 375) | function ve() {
function et (line 378) | function et(e) {
function tt (line 381) | function tt(e, t, n, o, s, r) {
function nt (line 394) | function nt(e) {
function he (line 404) | function he(e, t = null, n = null, o = 0, s = null, r = e === pe ? 0 : 1...
function me (line 445) | function me(e, t = null, n = null, o = 0, s = null, r = !1) {
function st (line 477) | function st(e) {
function U (line 480) | function U(e, t, n = !1, o = !1) {
function _e (line 530) | function _e(e) {
function it (line 534) | function it(e = " ", t = 0) {
function v (line 537) | function v(e, t) {
function lt (line 554) | function lt(...e) {
function ge (line 586) | function ge(e, t = !0) {
function ye (line 589) | function ye(e, t, n = !1) {
function be (line 607) | function be(e) {
function ut (line 610) | function ut() {
function pt (line 731) | function pt() {
method default (line 749) | default() {
method default (line 754) | default() {
method data (line 759) | data() {
method mounted (line 764) | mounted() {
method beforeUnmount (line 770) | beforeUnmount() {
method _initTable (line 774) | _initTable() {
method handler (line 793) | handler() {
method handler (line 799) | handler() {
method optionsChangedIdx (line 804) | optionsChangedIdx() {
method handler (line 808) | handler() {
function mt (line 815) | function mt(e, t, n, o, s, r) {
FILE: src/main/resources/static/assets/bootstrap-table/bootstrap-table-vue.umd.js
function J (line 1) | function J(e){if(m(e)){const t={};for(let n=0;n<e.length;n++){const o=e[...
function ke (line 1) | function ke(e){const t={};return e.replace(Te,"").split(Se).forEach(n=>{...
function q (line 1) | function q(e){let t="";if(N(e))t=e;else if(m(e))for(let n=0;n<e.length;n...
function ne (line 1) | function ne(e){return W(e)?ne(e.__v_raw):!!(e&&e.__v_isReactive)}
function W (line 1) | function W(e){return!!(e&&e.__v_isReadonly)}
function K (line 1) | function K(e){return!!(e&&e.__v_isShallow)}
function L (line 1) | function L(e){return e?!!e.__v_raw:!1}
function O (line 1) | function O(e){const t=e&&e.__v_raw;return t?O(t):e}
function Y (line 1) | function Y(e){return e?e.__v_isRef===!0:!1}
function xe (line 1) | function xe(e){T.push(e)}
function Re (line 1) | function Re(){T.pop()}
function V (line 1) | function V(e,...t){if(G)return;G=!0;const n=T.length?T[T.length-1].compo...
function Ve (line 3) | function Ve(){let e=T[T.length-1];if(!e)return[];const t=[];for(;e;){con...
function Ie (line 3) | function Ie(e){const t=[];return e.forEach((n,o)=>{t.push(...o===0?[]:[`
function $e (line 4) | function $e({vnode:e,recurseCount:t}){const n=t>0?`... (${t} recursive c...
function Fe (line 4) | function Fe(e){const t=[],n=Object.keys(e);return n.slice(0,3).forEach(o...
function oe (line 4) | function oe(e,t,n){return N(t)?(t=JSON.stringify(t),n?t:[`${e}=${t}`]):t...
function Q (line 4) | function Q(e,t,n,o){try{return o?e(...o):e()}catch(s){se(s,t,n)}}
function se (line 4) | function se(e,t,n,o=!0){const s=t?t.vnode:null,{errorHandler:r,throwUnha...
function De (line 4) | function De(e,t,n,o=!0,s=!1){if(f.NODE_ENV!=="production"){const r=re[t]...
function Me (line 4) | function Me(e){let t=y+1,n=d.length;for(;t<n;){const o=t+n>>>1,s=d[o],r=...
function Ue (line 4) | function Ue(e){if(!(e.flags&1)){const t=I(e),n=d[d.length-1];!n||!(e.fla...
function ie (line 4) | function ie(){Z||(Z=Ae.then(le))}
function je (line 4) | function je(e){m(e)?x.push(...e):E&&e.id===-1?E.splice(R+1,0,e):e.flags&...
function ze (line 4) | function ze(e){if(x.length){const t=[...new Set(x)].sort((n,o)=>I(n)-I(o...
function le (line 4) | function le(e){f.NODE_ENV!=="production"&&(e=e||new Map);const t=f.NODE_...
function ce (line 4) | function ce(e,t){const n=e.get(t)||0;if(n>Pe){const o=t.i,s=o&&ge(o.type...
function Be (line 4) | function Be(e,t){return A.has(e)?!1:(A.set(e,{initialDef:P(t),instances:...
function P (line 4) | function P(e){return be(e)?e.__vccOpts:e}
function He (line 4) | function He(e,t){const n=A.get(e);n&&(n.initialDef.render=t,[...n.instan...
function Je (line 4) | function Je(e,t){const n=A.get(e);if(!n)return;t=P(t),ae(n.initialDef,t)...
function ae (line 4) | function ae(e,t){F(e,t);for(const n in e)n!=="__file"&&!(n in t)&&delete...
function v (line 4) | function v(e){return(t,n)=>{try{return e(t,n)}catch(o){console.error(o),...
function ue (line 4) | function ue(e,t){e.shapeFlag&6&&e.component?(e.transition=t,ue(e.compone...
function Xe (line 4) | function Xe(e=!1){U.push(h=e?null:[])}
function ve (line 4) | function ve(){U.pop(),h=U[U.length-1]||null}
function et (line 4) | function et(e){return e.dynamicChildren=h||Ne,ve(),h&&h.push(e),e}
function tt (line 4) | function tt(e,t,n,o,s,r){return et(he(e,t,n,o,s,r,!0))}
function nt (line 4) | function nt(e){return e?e.__v_isVNode===!0:!1}
function he (line 4) | function he(e,t=null,n=null,o=0,s=null,r=e===de?0:1,l=!1,c=!1){const a={...
function me (line 4) | function me(e,t=null,n=null,o=0,s=null,r=!1){if((!e||e===Ke)&&(f.NODE_EN...
function st (line 5) | function st(e){return e?L(e)||fe(e)?F({},e):e:null}
function z (line 5) | function z(e,t,n=!1,o=!1){const{props:s,ref:r,patchFlag:l,children:c,tra...
function _e (line 5) | function _e(e){const t=z(e);return m(e.children)&&(t.children=e.children...
function it (line 5) | function it(e=" ",t=0){return rt(Qe,null,e,t)}
function ee (line 5) | function ee(e,t){let n=0;const{shapeFlag:o}=e;if(t==null)t=null;else if(...
function lt (line 5) | function lt(...e){const t={};for(let n=0;n<e.length;n++){const o=e[n];fo...
function ge (line 5) | function ge(e,t=!0){return C(e)?e.displayName||e.name:e.name||t&&e.__name}
function ye (line 5) | function ye(e,t,n=!1){let o=ge(t);if(!o&&t.__file){const s=t.__file.matc...
function be (line 5) | function be(e){return C(e)&&"__vccOpts"in e}
function ut (line 5) | function ut(){if(f.NODE_ENV==="production"||typeof window>"u")return;con...
function dt (line 5) | function dt(){ut()}
method default (line 5) | default(){}
method default (line 5) | default(){return{}}
method data (line 5) | data(){return{optionsChangedIdx:0}}
method mounted (line 5) | mounted(){this.$table=B(this.$el),this.$table.on("all.bs.table",(e,t,n)=...
method beforeUnmount (line 5) | beforeUnmount(){this.$table.bootstrapTable("destroy")}
method _initTable (line 5) | _initTable(){const e={...H(this.options),columns:H(this.columns),data:H(...
method handler (line 5) | handler(){this.optionsChangedIdx++}
method handler (line 5) | handler(){this.optionsChangedIdx++}
method optionsChangedIdx (line 5) | optionsChangedIdx(){this._initTable()}
method handler (line 5) | handler(){this.load(H(this.data))}
function mt (line 5) | function mt(e,t,n,o,s,r){return Xe(),tt("table")}
FILE: src/main/resources/static/assets/bootstrap-table/bootstrap-table.js
function _arrayLikeToArray (line 7) | function _arrayLikeToArray(r, a) {
function _arrayWithHoles (line 12) | function _arrayWithHoles(r) {
function _arrayWithoutHoles (line 15) | function _arrayWithoutHoles(r) {
function _classCallCheck (line 18) | function _classCallCheck(a, n) {
function _defineProperties (line 21) | function _defineProperties(e, r) {
function _createClass (line 27) | function _createClass(e, r, t) {
function _createForOfIteratorHelper (line 32) | function _createForOfIteratorHelper(r, e) {
function _defineProperty (line 80) | function _defineProperty(e, r, t) {
function _iterableToArray (line 88) | function _iterableToArray(r) {
function _iterableToArrayLimit (line 91) | function _iterableToArrayLimit(r, l) {
function _nonIterableRest (line 115) | function _nonIterableRest() {
function _nonIterableSpread (line 118) | function _nonIterableSpread() {
function ownKeys$1 (line 121) | function ownKeys$1(e, r) {
function _objectSpread2 (line 131) | function _objectSpread2(e) {
function _slicedToArray (line 142) | function _slicedToArray(r, e) {
function _toConsumableArray (line 145) | function _toConsumableArray(r) {
function _toPrimitive (line 148) | function _toPrimitive(t, r) {
function _toPropertyKey (line 158) | function _toPropertyKey(t) {
function _typeof (line 162) | function _typeof(o) {
function _unsupportedIterableToArray (line 171) | function _unsupportedIterableToArray(r, a) {
function requireGlobalThis (line 186) | function requireGlobalThis () {
function requireFails (line 212) | function requireFails () {
function requireDescriptors (line 228) | function requireDescriptors () {
function requireFunctionBindNative (line 244) | function requireFunctionBindNative () {
function requireFunctionCall (line 261) | function requireFunctionCall () {
function requireObjectPropertyIsEnumerable (line 278) | function requireObjectPropertyIsEnumerable () {
function requireCreatePropertyDescriptor (line 300) | function requireCreatePropertyDescriptor () {
function requireFunctionUncurryThis (line 317) | function requireFunctionUncurryThis () {
function requireClassofRaw (line 338) | function requireClassofRaw () {
function requireIndexedObject (line 355) | function requireIndexedObject () {
function requireIsNullOrUndefined (line 379) | function requireIsNullOrUndefined () {
function requireRequireObjectCoercible (line 393) | function requireRequireObjectCoercible () {
function requireToIndexedObject (line 412) | function requireToIndexedObject () {
function requireIsCallable (line 428) | function requireIsCallable () {
function requireIsObject (line 448) | function requireIsObject () {
function requireGetBuiltIn (line 462) | function requireGetBuiltIn () {
function requireObjectIsPrototypeOf (line 481) | function requireObjectIsPrototypeOf () {
function requireEnvironmentUserAgent (line 493) | function requireEnvironmentUserAgent () {
function requireEnvironmentV8Version (line 508) | function requireEnvironmentV8Version () {
function requireSymbolConstructorDetection (line 544) | function requireSymbolConstructorDetection () {
function requireUseSymbolAsUid (line 571) | function requireUseSymbolAsUid () {
function requireIsSymbol (line 586) | function requireIsSymbol () {
function requireTryToString (line 608) | function requireTryToString () {
function requireACallable (line 626) | function requireACallable () {
function requireGetMethod (line 645) | function requireGetMethod () {
function requireOrdinaryToPrimitive (line 663) | function requireOrdinaryToPrimitive () {
function requireIsPure (line 689) | function requireIsPure () {
function requireDefineGlobalProperty (line 699) | function requireDefineGlobalProperty () {
function requireSharedStore (line 719) | function requireSharedStore () {
function requireShared (line 742) | function requireShared () {
function requireToObject (line 756) | function requireToObject () {
function requireHasOwnProperty (line 774) | function requireHasOwnProperty () {
function requireUid (line 794) | function requireUid () {
function requireWellKnownSymbol (line 812) | function requireWellKnownSymbol () {
function requireToPrimitive (line 839) | function requireToPrimitive () {
function requireToPropertyKey (line 873) | function requireToPropertyKey () {
function requireDocumentCreateElement (line 891) | function requireDocumentCreateElement () {
function requireIe8DomDefine (line 910) | function requireIe8DomDefine () {
function requireObjectGetOwnPropertyDescriptor (line 929) | function requireObjectGetOwnPropertyDescriptor () {
function requireV8PrototypeDefineBug (line 962) | function requireV8PrototypeDefineBug () {
function requireAnObject (line 983) | function requireAnObject () {
function requireObjectDefineProperty (line 1001) | function requireObjectDefineProperty () {
function requireCreateNonEnumerableProperty (line 1053) | function requireCreateNonEnumerableProperty () {
function requireFunctionName (line 1074) | function requireFunctionName () {
function requireInspectSource (line 1100) | function requireInspectSource () {
function requireWeakMapBasicDetection (line 1123) | function requireWeakMapBasicDetection () {
function requireSharedKey (line 1138) | function requireSharedKey () {
function requireHiddenKeys (line 1155) | function requireHiddenKeys () {
function requireInternalState (line 1165) | function requireInternalState () {
function requireMakeBuiltIn (line 1243) | function requireMakeBuiltIn () {
function requireDefineBuiltIn (line 1306) | function requireDefineBuiltIn () {
function requireMathTrunc (line 1344) | function requireMathTrunc () {
function requireToIntegerOrInfinity (line 1363) | function requireToIntegerOrInfinity () {
function requireToAbsoluteIndex (line 1381) | function requireToAbsoluteIndex () {
function requireToLength (line 1402) | function requireToLength () {
function requireLengthOfArrayLike (line 1421) | function requireLengthOfArrayLike () {
function requireArrayIncludes (line 1437) | function requireArrayIncludes () {
function requireObjectKeysInternal (line 1479) | function requireObjectKeysInternal () {
function requireEnumBugKeys (line 1508) | function requireEnumBugKeys () {
function requireObjectGetOwnPropertyNames (line 1526) | function requireObjectGetOwnPropertyNames () {
function requireObjectGetOwnPropertySymbols (line 1547) | function requireObjectGetOwnPropertySymbols () {
function requireOwnKeys (line 1558) | function requireOwnKeys () {
function requireCopyConstructorProperties (line 1581) | function requireCopyConstructorProperties () {
function requireIsForced (line 1606) | function requireIsForced () {
function require_export (line 1637) | function require_export () {
function requireIsArray (line 1700) | function requireIsArray () {
function requireDoesNotExceedSafeInteger (line 1717) | function requireDoesNotExceedSafeInteger () {
function requireCreateProperty (line 1733) | function requireCreateProperty () {
function requireToStringTagSupport (line 1750) | function requireToStringTagSupport () {
function requireClassof (line 1767) | function requireClassof () {
function requireIsConstructor (line 1805) | function requireIsConstructor () {
function requireArraySpeciesConstructor (line 1865) | function requireArraySpeciesConstructor () {
function requireArraySpeciesCreate (line 1896) | function requireArraySpeciesCreate () {
function requireArrayMethodHasSpeciesSupport (line 1912) | function requireArrayMethodHasSpeciesSupport () {
function requireEs_array_concat (line 1939) | function requireEs_array_concat () {
function requireObjectKeys (line 2011) | function requireObjectKeys () {
function requireObjectDefineProperties (line 2028) | function requireObjectDefineProperties () {
function requireHtml (line 2057) | function requireHtml () {
function requireObjectCreate (line 2069) | function requireObjectCreate () {
function requireAddToUnscopables (line 2162) | function requireAddToUnscopables () {
function requireEs_array_includes (line 2190) | function requireEs_array_includes () {
function requireObjectAssign (line 2224) | function requireObjectAssign () {
function requireEs_object_assign (line 2289) | function requireEs_object_assign () {
function requireEs_object_keys (line 2310) | function requireEs_object_keys () {
function requireToString (line 2337) | function requireToString () {
function requireRegexpFlags (line 2354) | function requireRegexpFlags () {
function requireRegexpStickyHelpers (line 2380) | function requireRegexpStickyHelpers () {
function requireRegexpUnsupportedDotAll (line 2419) | function requireRegexpUnsupportedDotAll () {
function requireRegexpUnsupportedNcg (line 2438) | function requireRegexpUnsupportedNcg () {
function requireRegexpExec (line 2458) | function requireRegexpExec () {
function requireEs_regexp_exec (line 2582) | function requireEs_regexp_exec () {
function requireIsRegexp (line 2603) | function requireIsRegexp () {
function requireNotARegexp (line 2624) | function requireNotARegexp () {
function requireCorrectIsRegexpLogic (line 2642) | function requireCorrectIsRegexpLogic () {
function requireEs_string_includes (line 2665) | function requireEs_string_includes () {
function requireFunctionUncurryThisClause (line 2698) | function requireFunctionUncurryThisClause () {
function requireFunctionBindContext (line 2716) | function requireFunctionBindContext () {
function requireArrayIteration (line 2738) | function requireArrayIteration () {
function requireEs_array_find (line 2819) | function requireEs_array_find () {
function requireCorrectPrototypeGetter (line 2853) | function requireCorrectPrototypeGetter () {
function requireObjectGetPrototypeOf (line 2870) | function requireObjectGetPrototypeOf () {
function requireObjectToArray (line 2900) | function requireObjectToArray () {
function requireEs_object_entries (line 2956) | function requireEs_object_entries () {
function requireObjectToString (line 2979) | function requireObjectToString () {
function requireEs_object_toString (line 2995) | function requireEs_object_toString () {
function requireFixRegexpWellKnownSymbolLogic (line 3017) | function requireFixRegexpWellKnownSymbolLogic () {
function requireAConstructor (line 3101) | function requireAConstructor () {
function requireSpeciesConstructor (line 3120) | function requireSpeciesConstructor () {
function requireStringMultibyte (line 3143) | function requireStringMultibyte () {
function requireAdvanceStringIndex (line 3188) | function requireAdvanceStringIndex () {
function requireRegexpExecAbstract (line 3204) | function requireRegexpExecAbstract () {
function requireEs_string_split (line 3232) | function requireEs_string_split () {
function requireWhitespaces (line 3355) | function requireWhitespaces () {
function requireStringTrim (line 3367) | function requireStringTrim () {
function requireStringTrimForced (line 3406) | function requireStringTrimForced () {
function requireEs_string_trim (line 3429) | function requireEs_string_trim () {
function requireDomIterables (line 3453) | function requireDomIterables () {
function requireDomTokenListPrototype (line 3497) | function requireDomTokenListPrototype () {
function requireArrayMethodIsStrict (line 3513) | function requireArrayMethodIsStrict () {
function requireArrayForEach (line 3531) | function requireArrayForEach () {
function requireWeb_domCollections_forEach (line 3550) | function requireWeb_domCollections_forEach () {
function requireEs_array_filter (line 3584) | function requireEs_array_filter () {
function requireEs_array_indexOf (line 3610) | function requireEs_array_indexOf () {
function requireIterators (line 3643) | function requireIterators () {
function requireIteratorsCore (line 3653) | function requireIteratorsCore () {
function requireSetToStringTag (line 3710) | function requireSetToStringTag () {
function requireIteratorCreateConstructor (line 3731) | function requireIteratorCreateConstructor () {
function requireFunctionUncurryThisAccessor (line 3755) | function requireFunctionUncurryThisAccessor () {
function requireIsPossiblePrototype (line 3773) | function requireIsPossiblePrototype () {
function requireAPossiblePrototype (line 3787) | function requireAPossiblePrototype () {
function requireObjectSetPrototypeOf (line 3805) | function requireObjectSetPrototypeOf () {
function requireIteratorDefine (line 3842) | function requireIteratorDefine () {
function requireCreateIterResultObject (line 3952) | function requireCreateIterResultObject () {
function requireEs_array_iterator (line 3966) | function requireEs_array_iterator () {
function requireEs_array_map (line 4039) | function requireEs_array_map () {
function requireArraySlice (line 4066) | function requireArraySlice () {
function requireEs_array_slice (line 4077) | function requireEs_array_slice () {
function requireEs_object_getPrototypeOf (line 4137) | function requireEs_object_getPrototypeOf () {
function requireInheritIfRequired (line 4165) | function requireInheritIfRequired () {
function requireRegexpFlagsDetection (line 4192) | function requireRegexpFlagsDetection () {
function requireRegexpGetFlags (line 4247) | function requireRegexpGetFlags () {
function requireProxyAccessor (line 4271) | function requireProxyAccessor () {
function requireDefineBuiltInAccessor (line 4289) | function requireDefineBuiltInAccessor () {
function requireSetSpecies (line 4306) | function requireSetSpecies () {
function requireEs_regexp_constructor (line 4331) | function requireEs_regexp_constructor () {
function requireEs_regexp_toString (line 4539) | function requireEs_regexp_toString () {
function requireEs_string_endsWith (line 4576) | function requireEs_string_endsWith () {
function requireEs_string_iterator (line 4621) | function requireEs_string_iterator () {
function requireEs_string_match (line 4663) | function requireEs_string_match () {
function requireFunctionApply (line 4729) | function requireFunctionApply () {
function requireGetSubstitution (line 4748) | function requireGetSubstitution () {
function requireEs_string_replace (line 4801) | function requireEs_string_replace () {
function requireSameValue (line 4957) | function requireSameValue () {
function requireEs_string_search (line 4972) | function requireEs_string_search () {
function requireEs_string_startsWith (line 5021) | function requireEs_string_startsWith () {
function requireWeb_domCollections_iterator (line 5064) | function requireWeb_domCollections_iterator () {
function requireEs_string_fromCodePoint (line 5114) | function requireEs_string_fromCodePoint () {
function requireSafeGetBuiltIn (line 5154) | function requireSafeGetBuiltIn () {
function requireUrlConstructorDetection (line 5175) | function requireUrlConstructorDetection () {
function requireDefineBuiltIns (line 5225) | function requireDefineBuiltIns () {
function requireAnInstance (line 5240) | function requireAnInstance () {
function requireGetIteratorMethod (line 5257) | function requireGetIteratorMethod () {
function requireGetIterator (line 5279) | function requireGetIterator () {
function requireValidateArgumentsLength (line 5301) | function requireValidateArgumentsLength () {
function requireArraySort (line 5316) | function requireArraySort () {
function requireWeb_urlSearchParams_constructor (line 5366) | function requireWeb_urlSearchParams_constructor () {
function requireWeb_urlSearchParams (line 5884) | function requireWeb_urlSearchParams () {
function requireEs_array_findIndex (line 7649) | function requireEs_array_findIndex () {
function requireArraySetLength (line 7683) | function requireArraySetLength () {
function requireDeletePropertyOrThrow (line 7718) | function requireDeletePropertyOrThrow () {
function requireEs_array_splice (line 7733) | function requireEs_array_splice () {
function VirtualScroll (line 7810) | function VirtualScroll(options) {
function requireEnvironmentFfVersion (line 8705) | function requireEnvironmentFfVersion () {
function requireEnvironmentIsIeOrEdge (line 8719) | function requireEnvironmentIsIeOrEdge () {
function requireEnvironmentWebkitVersion (line 8731) | function requireEnvironmentWebkitVersion () {
function requireEs_array_sort (line 8744) | function requireEs_array_sort () {
function requirePath (line 8862) | function requirePath () {
function requireThisNumberValue (line 8874) | function requireThisNumberValue () {
function requireEs_number_constructor (line 8887) | function requireEs_number_constructor () {
function BootstrapTable (line 10824) | function BootstrapTable(el, options) {
FILE: src/main/resources/static/assets/bootstrap-table/extensions/addrbar/bootstrap-table-addrbar.js
function _arrayLikeToArray (line 7) | function _arrayLikeToArray(r, a) {
function _arrayWithHoles (line 12) | function _arrayWithHoles(r) {
function _assertThisInitialized (line 15) | function _assertThisInitialized(e) {
function _callSuper (line 19) | function _callSuper(t, o, e) {
function _classCallCheck (line 22) | function _classCallCheck(a, n) {
function _defineProperties (line 25) | function _defineProperties(e, r) {
function _createClass (line 31) | function _createClass(e, r, t) {
function _get (line 36) | function _get() {
function _getPrototypeOf (line 45) | function _getPrototypeOf(t) {
function _inherits (line 50) | function _inherits(t, e) {
function _isNativeReflectConstruct (line 62) | function _isNativeReflectConstruct() {
function _iterableToArrayLimit (line 70) | function _iterableToArrayLimit(r, l) {
function _nonIterableRest (line 94) | function _nonIterableRest() {
function _possibleConstructorReturn (line 97) | function _possibleConstructorReturn(t, e) {
function _setPrototypeOf (line 102) | function _setPrototypeOf(t, e) {
function _slicedToArray (line 107) | function _slicedToArray(r, e) {
function _superPropBase (line 110) | function _superPropBase(t, o) {
function _superPropGet (line 114) | function _superPropGet(t, o, e, r) {
function _toPrimitive (line 120) | function _toPrimitive(t, r) {
function _toPropertyKey (line 130) | function _toPropertyKey(t) {
function _unsupportedIterableToArray (line 134) | function _unsupportedIterableToArray(r, a) {
function requireGlobalThis (line 149) | function requireGlobalThis () {
function requireFails (line 175) | function requireFails () {
function requireDescriptors (line 191) | function requireDescriptors () {
function requireFunctionBindNative (line 207) | function requireFunctionBindNative () {
function requireFunctionCall (line 224) | function requireFunctionCall () {
function requireObjectPropertyIsEnumerable (line 241) | function requireObjectPropertyIsEnumerable () {
function requireCreatePropertyDescriptor (line 263) | function requireCreatePropertyDescriptor () {
function requireFunctionUncurryThis (line 280) | function requireFunctionUncurryThis () {
function requireClassofRaw (line 301) | function requireClassofRaw () {
function requireIndexedObject (line 318) | function requireIndexedObject () {
function requireIsNullOrUndefined (line 342) | function requireIsNullOrUndefined () {
function requireRequireObjectCoercible (line 356) | function requireRequireObjectCoercible () {
function requireToIndexedObject (line 375) | function requireToIndexedObject () {
function requireIsCallable (line 391) | function requireIsCallable () {
function requireIsObject (line 411) | function requireIsObject () {
function requireGetBuiltIn (line 425) | function requireGetBuiltIn () {
function requireObjectIsPrototypeOf (line 444) | function requireObjectIsPrototypeOf () {
function requireEnvironmentUserAgent (line 456) | function requireEnvironmentUserAgent () {
function requireEnvironmentV8Version (line 471) | function requireEnvironmentV8Version () {
function requireSymbolConstructorDetection (line 507) | function requireSymbolConstructorDetection () {
function requireUseSymbolAsUid (line 534) | function requireUseSymbolAsUid () {
function requireIsSymbol (line 549) | function requireIsSymbol () {
function requireTryToString (line 571) | function requireTryToString () {
function requireACallable (line 589) | function requireACallable () {
function requireGetMethod (line 608) | function requireGetMethod () {
function requireOrdinaryToPrimitive (line 626) | function requireOrdinaryToPrimitive () {
function requireIsPure (line 652) | function requireIsPure () {
function requireDefineGlobalProperty (line 662) | function requireDefineGlobalProperty () {
function requireSharedStore (line 682) | function requireSharedStore () {
function requireShared (line 705) | function requireShared () {
function requireToObject (line 719) | function requireToObject () {
function requireHasOwnProperty (line 737) | function requireHasOwnProperty () {
function requireUid (line 757) | function requireUid () {
function requireWellKnownSymbol (line 775) | function requireWellKnownSymbol () {
function requireToPrimitive (line 802) | function requireToPrimitive () {
function requireToPropertyKey (line 836) | function requireToPropertyKey () {
function requireDocumentCreateElement (line 854) | function requireDocumentCreateElement () {
function requireIe8DomDefine (line 873) | function requireIe8DomDefine () {
function requireObjectGetOwnPropertyDescriptor (line 892) | function requireObjectGetOwnPropertyDescriptor () {
function requireV8PrototypeDefineBug (line 925) | function requireV8PrototypeDefineBug () {
function requireAnObject (line 946) | function requireAnObject () {
function requireObjectDefineProperty (line 964) | function requireObjectDefineProperty () {
function requireCreateNonEnumerableProperty (line 1016) | function requireCreateNonEnumerableProperty () {
function requireFunctionName (line 1037) | function requireFunctionName () {
function requireInspectSource (line 1063) | function requireInspectSource () {
function requireWeakMapBasicDetection (line 1086) | function requireWeakMapBasicDetection () {
function requireSharedKey (line 1101) | function requireSharedKey () {
function requireHiddenKeys (line 1118) | function requireHiddenKeys () {
function requireInternalState (line 1128) | function requireInternalState () {
function requireMakeBuiltIn (line 1206) | function requireMakeBuiltIn () {
function requireDefineBuiltIn (line 1269) | function requireDefineBuiltIn () {
function requireMathTrunc (line 1307) | function requireMathTrunc () {
function requireToIntegerOrInfinity (line 1326) | function requireToIntegerOrInfinity () {
function requireToAbsoluteIndex (line 1344) | function requireToAbsoluteIndex () {
function requireToLength (line 1365) | function requireToLength () {
function requireLengthOfArrayLike (line 1384) | function requireLengthOfArrayLike () {
function requireArrayIncludes (line 1400) | function requireArrayIncludes () {
function requireObjectKeysInternal (line 1442) | function requireObjectKeysInternal () {
function requireEnumBugKeys (line 1471) | function requireEnumBugKeys () {
function requireObjectGetOwnPropertyNames (line 1489) | function requireObjectGetOwnPropertyNames () {
function requireObjectGetOwnPropertySymbols (line 1510) | function requireObjectGetOwnPropertySymbols () {
function requireOwnKeys (line 1521) | function requireOwnKeys () {
function requireCopyConstructorProperties (line 1544) | function requireCopyConstructorProperties () {
function requireIsForced (line 1569) | function requireIsForced () {
function require_export (line 1600) | function require_export () {
function requireIsArray (line 1663) | function requireIsArray () {
function requireDoesNotExceedSafeInteger (line 1680) | function requireDoesNotExceedSafeInteger () {
function requireCreateProperty (line 1696) | function requireCreateProperty () {
function requireToStringTagSupport (line 1713) | function requireToStringTagSupport () {
function requireClassof (line 1730) | function requireClassof () {
function requireIsConstructor (line 1768) | function requireIsConstructor () {
function requireArraySpeciesConstructor (line 1828) | function requireArraySpeciesConstructor () {
function requireArraySpeciesCreate (line 1859) | function requireArraySpeciesCreate () {
function requireArrayMethodHasSpeciesSupport (line 1875) | function requireArrayMethodHasSpeciesSupport () {
function requireEs_array_concat (line 1902) | function requireEs_array_concat () {
function requireObjectKeys (line 1972) | function requireObjectKeys () {
function requireObjectDefineProperties (line 1989) | function requireObjectDefineProperties () {
function requireHtml (line 2018) | function requireHtml () {
function requireObjectCreate (line 2030) | function requireObjectCreate () {
function requireAddToUnscopables (line 2123) | function requireAddToUnscopables () {
function requireIterators (line 2152) | function requireIterators () {
function requireCorrectPrototypeGetter (line 2162) | function requireCorrectPrototypeGetter () {
function requireObjectGetPrototypeOf (line 2179) | function requireObjectGetPrototypeOf () {
function requireIteratorsCore (line 2209) | function requireIteratorsCore () {
function requireSetToStringTag (line 2266) | function requireSetToStringTag () {
function requireIteratorCreateConstructor (line 2287) | function requireIteratorCreateConstructor () {
function requireFunctionUncurryThisAccessor (line 2311) | function requireFunctionUncurryThisAccessor () {
function requireIsPossiblePrototype (line 2329) | function requireIsPossiblePrototype () {
function requireAPossiblePrototype (line 2343) | function requireAPossiblePrototype () {
function requireObjectSetPrototypeOf (line 2361) | function requireObjectSetPrototypeOf () {
function requireIteratorDefine (line 2398) | function requireIteratorDefine () {
function requireCreateIterResultObject (line 2508) | function requireCreateIterResultObject () {
function requireEs_array_iterator (line 2522) | function requireEs_array_iterator () {
function requireObjectAssign (line 2596) | function requireObjectAssign () {
function requireEs_object_assign (line 2661) | function requireEs_object_assign () {
function requireObjectToArray (line 2683) | function requireObjectToArray () {
function requireEs_object_entries (line 2739) | function requireEs_object_entries () {
function requireObjectToString (line 2762) | function requireObjectToString () {
function requireEs_object_toString (line 2778) | function requireEs_object_toString () {
function requireToString (line 2800) | function requireToString () {
function requireRegexpFlags (line 2817) | function requireRegexpFlags () {
function requireRegexpStickyHelpers (line 2843) | function requireRegexpStickyHelpers () {
function requireRegexpUnsupportedDotAll (line 2882) | function requireRegexpUnsupportedDotAll () {
function requireRegexpUnsupportedNcg (line 2901) | function requireRegexpUnsupportedNcg () {
function requireRegexpExec (line 2921) | function requireRegexpExec () {
function requireEs_regexp_exec (line 3045) | function requireEs_regexp_exec () {
function requireRegexpFlagsDetection (line 3066) | function requireRegexpFlagsDetection () {
function requireRegexpGetFlags (line 3121) | function requireRegexpGetFlags () {
function requireEs_regexp_toString (line 3144) | function requireEs_regexp_toString () {
function requireStringMultibyte (line 3182) | function requireStringMultibyte () {
function requireEs_string_iterator (line 3226) | function requireEs_string_iterator () {
function requireFixRegexpWellKnownSymbolLogic (line 3269) | function requireFixRegexpWellKnownSymbolLogic () {
function requireSameValue (line 3353) | function requireSameValue () {
function requireRegexpExecAbstract (line 3369) | function requireRegexpExecAbstract () {
function requireEs_string_search (line 3397) | function requireEs_string_search () {
function requireDomIterables (line 3447) | function requireDomIterables () {
function requireDomTokenListPrototype (line 3491) | function requireDomTokenListPrototype () {
function requireWeb_domCollections_iterator (line 3506) | function requireWeb_domCollections_iterator () {
function requireEs_string_fromCodePoint (line 3556) | function requireEs_string_fromCodePoint () {
function requireSafeGetBuiltIn (line 3596) | function requireSafeGetBuiltIn () {
function requireUrlConstructorDetection (line 3617) | function requireUrlConstructorDetection () {
function requireDefineBuiltInAccessor (line 3667) | function requireDefineBuiltInAccessor () {
function requireDefineBuiltIns (line 3684) | function requireDefineBuiltIns () {
function requireAnInstance (line 3699) | function requireAnInstance () {
function requireFunctionUncurryThisClause (line 3716) | function requireFunctionUncurryThisClause () {
function requireFunctionBindContext (line 3734) | function requireFunctionBindContext () {
function requireGetIteratorMethod (line 3756) | function requireGetIteratorMethod () {
function requireGetIterator (line 3778) | function requireGetIterator () {
function requireValidateArgumentsLength (line 3800) | function requireValidateArgumentsLength () {
function requireArraySlice (line 3815) | function requireArraySlice () {
function requireArraySort (line 3827) | function requireArraySort () {
function requireWeb_urlSearchParams_constructor (line 3877) | function requireWeb_urlSearchParams_constructor () {
function requireWeb_urlSearchParams (line 4395) | function requireWeb_urlSearchParams () {
function _class (line 4420) | function _class() {
FILE: src/main/resources/static/assets/bootstrap-table/extensions/auto-refresh/bootstrap-table-auto-refresh.js
function _assertThisInitialized (line 7) | function _assertThisInitialized(e) {
function _callSuper (line 11) | function _callSuper(t, o, e) {
function _classCallCheck (line 14) | function _classCallCheck(a, n) {
function _defineProperties (line 17) | function _defineProperties(e, r) {
function _createClass (line 23) | function _createClass(e, r, t) {
function _get (line 28) | function _get() {
function _getPrototypeOf (line 37) | function _getPrototypeOf(t) {
function _inherits (line 42) | function _inherits(t, e) {
function _isNativeReflectConstruct (line 54) | function _isNativeReflectConstruct() {
function _possibleConstructorReturn (line 62) | function _possibleConstructorReturn(t, e) {
function _setPrototypeOf (line 67) | function _setPrototypeOf(t, e) {
function _superPropBase (line 72) | function _superPropBase(t, o) {
function _superPropGet (line 76) | function _superPropGet(t, o, e, r) {
function _toPrimitive (line 82) | function _toPrimitive(t, r) {
function _toPropertyKey (line 92) | function _toPropertyKey(t) {
function requireGlobalThis (line 104) | function requireGlobalThis () {
function requireFails (line 130) | function requireFails () {
function requireDescriptors (line 146) | function requireDescriptors () {
function requireFunctionBindNative (line 162) | function requireFunctionBindNative () {
function requireFunctionCall (line 179) | function requireFunctionCall () {
function requireObjectPropertyIsEnumerable (line 196) | function requireObjectPropertyIsEnumerable () {
function requireCreatePropertyDescriptor (line 218) | function requireCreatePropertyDescriptor () {
function requireFunctionUncurryThis (line 235) | function requireFunctionUncurryThis () {
function requireClassofRaw (line 256) | function requireClassofRaw () {
function requireIndexedObject (line 273) | function requireIndexedObject () {
function requireIsNullOrUndefined (line 297) | function requireIsNullOrUndefined () {
function requireRequireObjectCoercible (line 311) | function requireRequireObjectCoercible () {
function requireToIndexedObject (line 330) | function requireToIndexedObject () {
function requireIsCallable (line 346) | function requireIsCallable () {
function requireIsObject (line 366) | function requireIsObject () {
function requireGetBuiltIn (line 380) | function requireGetBuiltIn () {
function requireObjectIsPrototypeOf (line 399) | function requireObjectIsPrototypeOf () {
function requireEnvironmentUserAgent (line 411) | function requireEnvironmentUserAgent () {
function requireEnvironmentV8Version (line 426) | function requireEnvironmentV8Version () {
function requireSymbolConstructorDetection (line 462) | function requireSymbolConstructorDetection () {
function requireUseSymbolAsUid (line 489) | function requireUseSymbolAsUid () {
function requireIsSymbol (line 504) | function requireIsSymbol () {
function requireTryToString (line 526) | function requireTryToString () {
function requireACallable (line 544) | function requireACallable () {
function requireGetMethod (line 563) | function requireGetMethod () {
function requireOrdinaryToPrimitive (line 581) | function requireOrdinaryToPrimitive () {
function requireIsPure (line 607) | function requireIsPure () {
function requireDefineGlobalProperty (line 617) | function requireDefineGlobalProperty () {
function requireSharedStore (line 637) | function requireSharedStore () {
function requireShared (line 660) | function requireShared () {
function requireToObject (line 674) | function requireToObject () {
function requireHasOwnProperty (line 692) | function requireHasOwnProperty () {
function requireUid (line 712) | function requireUid () {
function requireWellKnownSymbol (line 730) | function requireWellKnownSymbol () {
function requireToPrimitive (line 757) | function requireToPrimitive () {
function requireToPropertyKey (line 791) | function requireToPropertyKey () {
function requireDocumentCreateElement (line 809) | function requireDocumentCreateElement () {
function requireIe8DomDefine (line 828) | function requireIe8DomDefine () {
function requireObjectGetOwnPropertyDescriptor (line 847) | function requireObjectGetOwnPropertyDescriptor () {
function requireV8PrototypeDefineBug (line 880) | function requireV8PrototypeDefineBug () {
function requireAnObject (line 901) | function requireAnObject () {
function requireObjectDefineProperty (line 919) | function requireObjectDefineProperty () {
function requireCreateNonEnumerableProperty (line 971) | function requireCreateNonEnumerableProperty () {
function requireFunctionName (line 992) | function requireFunctionName () {
function requireInspectSource (line 1018) | function requireInspectSource () {
function requireWeakMapBasicDetection (line 1041) | function requireWeakMapBasicDetection () {
function requireSharedKey (line 1056) | function requireSharedKey () {
function requireHiddenKeys (line 1073) | function requireHiddenKeys () {
function requireInternalState (line 1083) | function requireInternalState () {
function requireMakeBuiltIn (line 1161) | function requireMakeBuiltIn () {
function requireDefineBuiltIn (line 1224) | function requireDefineBuiltIn () {
function requireMathTrunc (line 1262) | function requireMathTrunc () {
function requireToIntegerOrInfinity (line 1281) | function requireToIntegerOrInfinity () {
function requireToAbsoluteIndex (line 1299) | function requireToAbsoluteIndex () {
function requireToLength (line 1320) | function requireToLength () {
function requireLengthOfArrayLike (line 1339) | function requireLengthOfArrayLike () {
function requireArrayIncludes (line 1355) | function requireArrayIncludes () {
function requireObjectKeysInternal (line 1397) | function requireObjectKeysInternal () {
function requireEnumBugKeys (line 1426) | function requireEnumBugKeys () {
function requireObjectGetOwnPropertyNames (line 1444) | function requireObjectGetOwnPropertyNames () {
function requireObjectGetOwnPropertySymbols (line 1465) | function requireObjectGetOwnPropertySymbols () {
function requireOwnKeys (line 1476) | function requireOwnKeys () {
function requireCopyConstructorProperties (line 1499) | function requireCopyConstructorProperties () {
function requireIsForced (line 1524) | function requireIsForced () {
function require_export (line 1555) | function require_export () {
function requireFunctionUncurryThisClause (line 1618) | function requireFunctionUncurryThisClause () {
function requireFunctionBindContext (line 1636) | function requireFunctionBindContext () {
function requireIsArray (line 1658) | function requireIsArray () {
function requireToStringTagSupport (line 1675) | function requireToStringTagSupport () {
function requireClassof (line 1692) | function requireClassof () {
function requireIsConstructor (line 1730) | function requireIsConstructor () {
function requireArraySpeciesConstructor (line 1790) | function requireArraySpeciesConstructor () {
function requireArraySpeciesCreate (line 1821) | function requireArraySpeciesCreate () {
function requireArrayIteration (line 1837) | function requireArrayIteration () {
function requireObjectKeys (line 1921) | function requireObjectKeys () {
function requireObjectDefineProperties (line 1938) | function requireObjectDefineProperties () {
function requireHtml (line 1967) | function requireHtml () {
function requireObjectCreate (line 1979) | function requireObjectCreate () {
function requireAddToUnscopables (line 2072) | function requireAddToUnscopables () {
function requireEs_array_find (line 2100) | function requireEs_array_find () {
function requireObjectAssign (line 2134) | function requireObjectAssign () {
function requireEs_object_assign (line 2199) | function requireEs_object_assign () {
function requireObjectToString (line 2221) | function requireObjectToString () {
function requireEs_object_toString (line 2237) | function requireEs_object_toString () {
function _class (line 2283) | function _class() {
FILE: src/main/resources/static/assets/bootstrap-table/extensions/cookie/bootstrap-table-cookie.js
function _arrayLikeToArray (line 7) | function _arrayLikeToArray(r, a) {
function _arrayWithHoles (line 12) | function _arrayWithHoles(r) {
function _assertThisInitialized (line 15) | function _assertThisInitialized(e) {
function _callSuper (line 19) | function _callSuper(t, o, e) {
function _classCallCheck (line 22) | function _classCallCheck(a, n) {
function _defineProperties (line 25) | function _defineProperties(e, r) {
function _createClass (line 31) | function _createClass(e, r, t) {
function _createForOfIteratorHelper (line 36) | function _createForOfIteratorHelper(r, e) {
function _get (line 84) | function _get() {
function _getPrototypeOf (line 93) | function _getPrototypeOf(t) {
function _inherits (line 98) | function _inherits(t, e) {
function _isNativeReflectConstruct (line 110) | function _isNativeReflectConstruct() {
function _iterableToArrayLimit (line 118) | function _iterableToArrayLimit(r, l) {
function _nonIterableRest (line 142) | function _nonIterableRest() {
function _possibleConstructorReturn (line 145) | function _possibleConstructorReturn(t, e) {
function _setPrototypeOf (line 150) | function _setPrototypeOf(t, e) {
function _slicedToArray (line 155) | function _slicedToArray(r, e) {
function _superPropBase (line 158) | function _superPropBase(t, o) {
function _superPropGet (line 162) | function _superPropGet(t, o, e, r) {
function _toPrimitive (line 168) | function _toPrimitive(t, r) {
function _toPropertyKey (line 178) | function _toPropertyKey(t) {
function _unsupportedIterableToArray (line 182) | function _unsupportedIterableToArray(r, a) {
function requireGlobalThis (line 197) | function requireGlobalThis () {
function requireFails (line 223) | function requireFails () {
function requireDescriptors (line 239) | function requireDescriptors () {
function requireFunctionBindNative (line 255) | function requireFunctionBindNative () {
function requireFunctionCall (line 272) | function requireFunctionCall () {
function requireObjectPropertyIsEnumerable (line 289) | function requireObjectPropertyIsEnumerable () {
function requireCreatePropertyDescriptor (line 311) | function requireCreatePropertyDescriptor () {
function requireFunctionUncurryThis (line 328) | function requireFunctionUncurryThis () {
function requireClassofRaw (line 349) | function requireClassofRaw () {
function requireIndexedObject (line 366) | function requireIndexedObject () {
function requireIsNullOrUndefined (line 390) | function requireIsNullOrUndefined () {
function requireRequireObjectCoercible (line 404) | function requireRequireObjectCoercible () {
function requireToIndexedObject (line 423) | function requireToIndexedObject () {
function requireIsCallable (line 439) | function requireIsCallable () {
function requireIsObject (line 459) | function requireIsObject () {
function requireGetBuiltIn (line 473) | function requireGetBuiltIn () {
function requireObjectIsPrototypeOf (line 492) | function requireObjectIsPrototypeOf () {
function requireEnvironmentUserAgent (line 504) | function requireEnvironmentUserAgent () {
function requireEnvironmentV8Version (line 519) | function requireEnvironmentV8Version () {
function requireSymbolConstructorDetection (line 555) | function requireSymbolConstructorDetection () {
function requireUseSymbolAsUid (line 582) | function requireUseSymbolAsUid () {
function requireIsSymbol (line 597) | function requireIsSymbol () {
function requireTryToString (line 619) | function requireTryToString () {
function requireACallable (line 637) | function requireACallable () {
function requireGetMethod (line 656) | function requireGetMethod () {
function requireOrdinaryToPrimitive (line 674) | function requireOrdinaryToPrimitive () {
function requireIsPure (line 700) | function requireIsPure () {
function requireDefineGlobalProperty (line 710) | function requireDefineGlobalProperty () {
function requireSharedStore (line 730) | function requireSharedStore () {
function requireShared (line 753) | function requireShared () {
function requireToObject (line 767) | function requireToObject () {
function requireHasOwnProperty (line 785) | function requireHasOwnProperty () {
function requireUid (line 805) | function requireUid () {
function requireWellKnownSymbol (line 823) | function requireWellKnownSymbol () {
function requireToPrimitive (line 850) | function requireToPrimitive () {
function requireToPropertyKey (line 884) | function requireToPropertyKey () {
function requireDocumentCreateElement (line 902) | function requireDocumentCreateElement () {
function requireIe8DomDefine (line 921) | function requireIe8DomDefine () {
function requireObjectGetOwnPropertyDescriptor (line 940) | function requireObjectGetOwnPropertyDescriptor () {
function requireV8PrototypeDefineBug (line 973) | function requireV8PrototypeDefineBug () {
function requireAnObject (line 994) | function requireAnObject () {
function requireObjectDefineProperty (line 1012) | function requireObjectDefineProperty () {
function requireCreateNonEnumerableProperty (line 1064) | function requireCreateNonEnumerableProperty () {
function requireFunctionName (line 1085) | function requireFunctionName () {
function requireInspectSource (line 1111) | function requireInspectSource () {
function requireWeakMapBasicDetection (line 1134) | function requireWeakMapBasicDetection () {
function requireSharedKey (line 1149) | function requireSharedKey () {
function requireHiddenKeys (line 1166) | function requireHiddenKeys () {
function requireInternalState (line 1176) | function requireInternalState () {
function requireMakeBuiltIn (line 1254) | function requireMakeBuiltIn () {
function requireDefineBuiltIn (line 1317) | function requireDefineBuiltIn () {
function requireMathTrunc (line 1355) | function requireMathTrunc () {
function requireToIntegerOrInfinity (line 1374) | function requireToIntegerOrInfinity () {
function requireToAbsoluteIndex (line 1392) | function requireToAbsoluteIndex () {
function requireToLength (line 1413) | function requireToLength () {
function requireLengthOfArrayLike (line 1432) | function requireLengthOfArrayLike () {
function requireArrayIncludes (line 1448) | function requireArrayIncludes () {
function requireObjectKeysInternal (line 1490) | function requireObjectKeysInternal () {
function requireEnumBugKeys (line 1519) | function requireEnumBugKeys () {
function requireObjectGetOwnPropertyNames (line 1537) | function requireObjectGetOwnPropertyNames () {
function requireObjectGetOwnPropertySymbols (line 1558) | function requireObjectGetOwnPropertySymbols () {
function requireOwnKeys (line 1569) | function requireOwnKeys () {
function requireCopyConstructorProperties (line 1592) | function requireCopyConstructorProperties () {
function requireIsForced (line 1617) | function requireIsForced () {
function require_export (line 1648) | function require_export () {
function requireIsArray (line 1711) | function requireIsArray () {
function requireDoesNotExceedSafeInteger (line 1728) | function requireDoesNotExceedSafeInteger () {
function requireCreateProperty (line 1744) | function requireCreateProperty () {
function requireToStringTagSupport (line 1761) | function requireToStringTagSupport () {
function requireClassof (line 1778) | function requireClassof () {
function requireIsConstructor (line 1816) | function requireIsConstructor () {
function requireArraySpeciesConstructor (line 1876) | function requireArraySpeciesConstructor () {
function requireArraySpeciesCreate (line 1907) | function requireArraySpeciesCreate () {
function requireArrayMethodHasSpeciesSupport (line 1923) | function requireArrayMethodHasSpeciesSupport () {
function requireEs_array_concat (line 1950) | function requireEs_array_concat () {
function requireFunctionUncurryThisClause (line 2020) | function requireFunctionUncurryThisClause () {
function requireFunctionBindContext (line 2038) | function requireFunctionBindContext () {
function requireArrayIteration (line 2060) | function requireArrayIteration () {
function requireEs_array_filter (line 2141) | function requireEs_array_filter () {
function requireObjectKeys (line 2170) | function requireObjectKeys () {
function requireObjectDefineProperties (line 2187) | function requireObjectDefineProperties () {
function requireHtml (line 2216) | function requireHtml () {
function requireObjectCreate (line 2228) | function requireObjectCreate () {
function requireAddToUnscopables (line 2321) | function requireAddToUnscopables () {
function requireEs_array_find (line 2349) | function requireEs_array_find () {
function requireEs_array_includes (line 2382) | function requireEs_array_includes () {
function requireEs_array_map (line 2415) | function requireEs_array_map () {
function requireObjectAssign (line 2442) | function requireObjectAssign () {
function requireEs_object_assign (line 2507) | function requireEs_object_assign () {
function requireCorrectPrototypeGetter (line 2529) | function requireCorrectPrototypeGetter () {
function requireObjectGetPrototypeOf (line 2546) | function requireObjectGetPrototypeOf () {
function requireObjectToArray (line 2576) | function requireObjectToArray () {
function requireEs_object_entries (line 2632) | function requireEs_object_entries () {
function requireEs_object_keys (line 2654) | function requireEs_object_keys () {
function requireObjectToString (line 2681) | function requireObjectToString () {
function requireEs_object_toString (line 2697) | function requireEs_object_toString () {
function requireToString (line 2719) | function requireToString () {
function requireRegexpFlags (line 2736) | function requireRegexpFlags () {
function requireRegexpStickyHelpers (line 2762) | function requireRegexpStickyHelpers () {
function requireRegexpUnsupportedDotAll (line 2801) | function requireRegexpUnsupportedDotAll () {
function requireRegexpUnsupportedNcg (line 2820) | function requireRegexpUnsupportedNcg () {
function requireRegexpExec (line 2840) | function requireRegexpExec () {
function requireEs_regexp_exec (line 2964) | function requireEs_regexp_exec () {
function requireRegexpFlagsDetection (line 2985) | function requireRegexpFlagsDetection () {
function requireRegexpGetFlags (line 3040) | function requireRegexpGetFlags () {
function requireEs_regexp_toString (line 3063) | function requireEs_regexp_toString () {
function requireIsRegexp (line 3101) | function requireIsRegexp () {
function requireNotARegexp (line 3122) | function requireNotARegexp () {
function requireCorrectIsRegexpLogic (line 3140) | function requireCorrectIsRegexpLogic () {
function requireEs_string_includes (line 3163) | function requireEs_string_includes () {
function requireFunctionApply (line 3196) | function requireFunctionApply () {
function requireFixRegexpWellKnownSymbolLogic (line 3215) | function requireFixRegexpWellKnownSymbolLogic () {
function requireStringMultibyte (line 3299) | function requireStringMultibyte () {
function requireAdvanceStringIndex (line 3344) | function requireAdvanceStringIndex () {
function requireGetSubstitution (line 3360) | function requireGetSubstitution () {
function requireRegexpExecAbstract (line 3414) | function requireRegexpExecAbstract () {
function requireEs_string_replace (line 3442) | function requireEs_string_replace () {
function requireSameValue (line 3598) | function requireSameValue () {
function requireEs_string_search (line 3613) | function requireEs_string_search () {
function requireDomIterables (line 3663) | function requireDomIterables () {
function requireDomTokenListPrototype (line 3707) | function requireDomTokenListPrototype () {
function requireArrayMethodIsStrict (line 3723) | function requireArrayMethodIsStrict () {
function requireArrayForEach (line 3741) | function requireArrayForEach () {
function requireWeb_domCollections_forEach (line 3760) | function requireWeb_domCollections_forEach () {
function _class (line 3972) | function _class() {
FILE: src/main/resources/static/assets/bootstrap-table/extensions/copy-rows/bootstrap-table-copy-rows.js
function _arrayLikeToArray (line 7) | function _arrayLikeToArray(r, a) {
function _assertThisInitialized (line 12) | function _assertThisInitialized(e) {
function _callSuper (line 16) | function _callSuper(t, o, e) {
function _classCallCheck (line 19) | function _classCallCheck(a, n) {
function _defineProperties (line 22) | function _defineProperties(e, r) {
function _createClass (line 28) | function _createClass(e, r, t) {
function _createForOfIteratorHelper (line 33) | function _createForOfIteratorHelper(r, e) {
function _get (line 81) | function _get() {
function _getPrototypeOf (line 90) | function _getPrototypeOf(t) {
function _inherits (line 95) | function _inherits(t, e) {
function _isNativeReflectConstruct (line 107) | function _isNativeReflectConstruct() {
function _possibleConstructorReturn (line 115) | function _possibleConstructorReturn(t, e) {
function _setPrototypeOf (line 120) | function _setPrototypeOf(t, e) {
function _superPropBase (line 125) | function _superPropBase(t, o) {
function _superPropGet (line 129) | function _superPropGet(t, o, e, r) {
function _toPrimitive (line 135) | function _toPrimitive(t, r) {
function _toPropertyKey (line 145) | function _toPropertyKey(t) {
function _unsupportedIterableToArray (line 149) | function _unsupportedIterableToArray(r, a) {
function requireGlobalThis (line 164) | function requireGlobalThis () {
function requireFails (line 190) | function requireFails () {
function requireDescriptors (line 206) | function requireDescriptors () {
function requireFunctionBindNative (line 222) | function requireFunctionBindNative () {
function requireFunctionCall (line 239) | function requireFunctionCall () {
function requireObjectPropertyIsEnumerable (line 256) | function requireObjectPropertyIsEnumerable () {
function requireCreatePropertyDescriptor (line 278) | function requireCreatePropertyDescriptor () {
function requireFunctionUncurryThis (line 295) | function requireFunctionUncurryThis () {
function requireClassofRaw (line 316) | function requireClassofRaw () {
function requireIndexedObject (line 333) | function requireIndexedObject () {
function requireIsNullOrUndefined (line 357) | function requireIsNullOrUndefined () {
function requireRequireObjectCoercible (line 371) | function requireRequireObjectCoercible () {
function requireToIndexedObject (line 390) | function requireToIndexedObject () {
function requireIsCallable (line 406) | function requireIsCallable () {
function requireIsObject (line 426) | function requireIsObject () {
function requireGetBuiltIn (line 440) | function requireGetBuiltIn () {
function requireObjectIsPrototypeOf (line 459) | function requireObjectIsPrototypeOf () {
function requireEnvironmentUserAgent (line 471) | function requireEnvironmentUserAgent () {
function requireEnvironmentV8Version (line 486) | function requireEnvironmentV8Version () {
function requireSymbolConstructorDetection (line 522) | function requireSymbolConstructorDetection () {
function requireUseSymbolAsUid (line 549) | function requireUseSymbolAsUid () {
function requireIsSymbol (line 564) | function requireIsSymbol () {
function requireTryToString (line 586) | function requireTryToString () {
function requireACallable (line 604) | function requireACallable () {
function requireGetMethod (line 623) | function requireGetMethod () {
function requireOrdinaryToPrimitive (line 641) | function requireOrdinaryToPrimitive () {
function requireIsPure (line 667) | function requireIsPure () {
function requireDefineGlobalProperty (line 677) | function requireDefineGlobalProperty () {
function requireSharedStore (line 697) | function requireSharedStore () {
function requireShared (line 720) | function requireShared () {
function requireToObject (line 734) | function requireToObject () {
function requireHasOwnProperty (line 752) | function requireHasOwnProperty () {
function requireUid (line 772) | function requireUid () {
function requireWellKnownSymbol (line 790) | function requireWellKnownSymbol () {
function requireToPrimitive (line 817) | function requireToPrimitive () {
function requireToPropertyKey (line 851) | function requireToPropertyKey () {
function requireDocumentCreateElement (line 869) | function requireDocumentCreateElement () {
function requireIe8DomDefine (line 888) | function requireIe8DomDefine () {
function requireObjectGetOwnPropertyDescriptor (line 907) | function requireObjectGetOwnPropertyDescriptor () {
function requireV8PrototypeDefineBug (line 940) | function requireV8PrototypeDefineBug () {
function requireAnObject (line 961) | function requireAnObject () {
function requireObjectDefineProperty (line 979) | function requireObjectDefineProperty () {
function requireCreateNonEnumerableProperty (line 1031) | function requireCreateNonEnumerableProperty () {
function requireFunctionName (line 1052) | function requireFunctionName () {
function requireInspectSource (line 1078) | function requireInspectSource () {
function requireWeakMapBasicDetection (line 1101) | function requireWeakMapBasicDetection () {
function requireSharedKey (line 1116) | function requireSharedKey () {
function requireHiddenKeys (line 1133) | function requireHiddenKeys () {
function requireInternalState (line 1143) | function requireInternalState () {
function requireMakeBuiltIn (line 1221) | function requireMakeBuiltIn () {
function requireDefineBuiltIn (line 1284) | function requireDefineBuiltIn () {
function requireMathTrunc (line 1322) | function requireMathTrunc () {
function requireToIntegerOrInfinity (line 1341) | function requireToIntegerOrInfinity () {
function requireToAbsoluteIndex (line 1359) | function requireToAbsoluteIndex () {
function requireToLength (line 1380) | function requireToLength () {
function requireLengthOfArrayLike (line 1399) | function requireLengthOfArrayLike () {
function requireArrayIncludes (line 1415) | function requireArrayIncludes () {
function requireObjectKeysInternal (line 1457) | function requireObjectKeysInternal () {
function requireEnumBugKeys (line 1486) | function requireEnumBugKeys () {
function requireObjectGetOwnPropertyNames (line 1504) | function requireObjectGetOwnPropertyNames () {
function requireObjectGetOwnPropertySymbols (line 1525) | function requireObjectGetOwnPropertySymbols () {
function requireOwnKeys (line 1536) | function requireOwnKeys () {
function requireCopyConstructorProperties (line 1559) | function requireCopyConstructorProperties () {
function requireIsForced (line 1584) | function requireIsForced () {
function require_export (line 1615) | function require_export () {
function requireFunctionUncurryThisClause (line 1678) | function requireFunctionUncurryThisClause () {
function requireFunctionBindContext (line 1696) | function requireFunctionBindContext () {
function requireIsArray (line 1718) | function requireIsArray () {
function requireToStringTagSupport (line 1735) | function requireToStringTagSupport () {
function requireClassof (line 1752) | function requireClassof () {
function requireIsConstructor (line 1790) | function requireIsConstructor () {
function requireArraySpeciesConstructor (line 1850) | function requireArraySpeciesConstructor () {
function requireArraySpeciesCreate (line 1881) | function requireArraySpeciesCreate () {
function requireArrayIteration (line 1897) | function requireArrayIteration () {
function requireObjectKeys (line 1981) | function requireObjectKeys () {
function requireObjectDefineProperties (line 1998) | function requireObjectDefineProperties () {
function requireHtml (line 2027) | function requireHtml () {
function requireObjectCreate (line 2039) | function requireObjectCreate () {
function requireAddToUnscopables (line 2132) | function requireAddToUnscopables () {
function requireEs_array_find (line 2160) | function requireEs_array_find () {
function requireObjectAssign (line 2194) | function requireObjectAssign () {
function requireEs_object_assign (line 2259) | function requireEs_object_assign () {
function requireObjectToString (line 2281) | function requireObjectToString () {
function requireEs_object_toString (line 2297) | function requireEs_object_toString () {
function requireDomIterables (line 2319) | function requireDomIterables () {
function requireDomTokenListPrototype (line 2363) | function requireDomTokenListPrototype () {
function requireArrayMethodIsStrict (line 2379) | function requireArrayMethodIsStrict () {
function requireArrayForEach (line 2397) | function requireArrayForEach () {
function requireWeb_domCollections_forEach (line 2416) | function requireWeb_domCollections_forEach () {
function _class (line 2492) | function _class() {
FILE: src/main/resources/static/assets/bootstrap-table/extensions/custom-view/bootstrap-table-custom-view.js
function _assertThisInitialized (line 7) | function _assertThisInitialized(e) {
function _callSuper (line 11) | function _callSuper(t, o, e) {
function _classCallCheck (line 14) | function _classCallCheck(a, n) {
function _defineProperties (line 17) | function _defineProperties(e, r) {
function _createClass (line 23) | function _createClass(e, r, t) {
function _get (line 28) | function _get() {
function _getPrototypeOf (line 37) | function _getPrototypeOf(t) {
function _inherits (line 42) | function _inherits(t, e) {
function _isNativeReflectConstruct (line 54) | function _isNativeReflectConstruct() {
function _possibleConstructorReturn (line 62) | function _possibleConstructorReturn(t, e) {
function _setPrototypeOf (line 67) | function _setPrototypeOf(t, e) {
function _superPropBase (line 72) | function _superPropBase(t, o) {
function _superPropGet (line 76) | function _superPropGet(t, o, e, r) {
function _toPrimitive (line 82) | function _toPrimitive(t, r) {
function _toPropertyKey (line 92) | function _toPropertyKey(t) {
function requireGlobalThis (line 104) | function requireGlobalThis () {
function requireFails (line 130) | function requireFails () {
function requireDescriptors (line 146) | function requireDescriptors () {
function requireFunctionBindNative (line 162) | function requireFunctionBindNative () {
function requireFunctionCall (line 179) | function requireFunctionCall () {
function requireObjectPropertyIsEnumerable (line 196) | function requireObjectPropertyIsEnumerable () {
function requireCreatePropertyDescriptor (line 218) | function requireCreatePropertyDescriptor () {
function requireFunctionUncurryThis (line 235) | function requireFunctionUncurryThis () {
function requireClassofRaw (line 256) | function requireClassofRaw () {
function requireIndexedObject (line 273) | function requireIndexedObject () {
function requireIsNullOrUndefined (line 297) | function requireIsNullOrUndefined () {
function requireRequireObjectCoercible (line 311) | function requireRequireObjectCoercible () {
function requireToIndexedObject (line 330) | function requireToIndexedObject () {
function requireIsCallable (line 346) | function requireIsCallable () {
function requireIsObject (line 366) | function requireIsObject () {
function requireGetBuiltIn (line 380) | function requireGetBuiltIn () {
function requireObjectIsPrototypeOf (line 399) | function requireObjectIsPrototypeOf () {
function requireEnvironmentUserAgent (line 411) | function requireEnvironmentUserAgent () {
function requireEnvironmentV8Version (line 426) | function requireEnvironmentV8Version () {
function requireSymbolConstructorDetection (line 462) | function requireSymbolConstructorDetection () {
function requireUseSymbolAsUid (line 489) | function requireUseSymbolAsUid () {
function requireIsSymbol (line 504) | function requireIsSymbol () {
function requireTryToString (line 526) | function requireTryToString () {
function requireACallable (line 544) | function requireACallable () {
function requireGetMethod (line 563) | function requireGetMethod () {
function requireOrdinaryToPrimitive (line 581) | function requireOrdinaryToPrimitive () {
function requireIsPure (line 607) | function requireIsPure () {
function requireDefineGlobalProperty (line 617) | function requireDefineGlobalProperty () {
function requireSharedStore (line 637) | function requireSharedStore () {
function requireShared (line 660) | function requireShared () {
function requireToObject (line 674) | function requireToObject () {
function requireHasOwnProperty (line 692) | function requireHasOwnProperty () {
function requireUid (line 712) | function requireUid () {
function requireWellKnownSymbol (line 730) | function requireWellKnownSymbol () {
function requireToPrimitive (line 757) | function requireToPrimitive () {
function requireToPropertyKey (line 791) | function requireToPropertyKey () {
function requireDocumentCreateElement (line 809) | function requireDocumentCreateElement () {
function requireIe8DomDefine (line 828) | function requireIe8DomDefine () {
function requireObjectGetOwnPropertyDescriptor (line 847) | function requireObjectGetOwnPropertyDescriptor () {
function requireV8PrototypeDefineBug (line 880) | function requireV8PrototypeDefineBug () {
function requireAnObject (line 901) | function requireAnObject () {
function requireObjectDefineProperty (line 919) | function requireObjectDefineProperty () {
function requireCreateNonEnumerableProperty (line 971) | function requireCreateNonEnumerableProperty () {
function requireFunctionName (line 992) | function requireFunctionName () {
function requireInspectSource (line 1018) | function requireInspectSource () {
function requireWeakMapBasicDetection (line 1041) | function requireWeakMapBasicDetection () {
function requireSharedKey (line 1056) | function requireSharedKey () {
function requireHiddenKeys (line 1073) | function requireHiddenKeys () {
function requireInternalState (line 1083) | function requireInternalState () {
function requireMakeBuiltIn (line 1161) | function requireMakeBuiltIn () {
function requireDefineBuiltIn (line 1224) | function requireDefineBuiltIn () {
function requireMathTrunc (line 1262) | function requireMathTrunc () {
function requireToIntegerOrInfinity (line 1281) | function requireToIntegerOrInfinity () {
function requireToAbsoluteIndex (line 1299) | function requireToAbsoluteIndex () {
function requireToLength (line 1320) | function requireToLength () {
function requireLengthOfArrayLike (line 1339) | function requireLengthOfArrayLike () {
function requireArrayIncludes (line 1355) | function requireArrayIncludes () {
function requireObjectKeysInternal (line 1397) | function requireObjectKeysInternal () {
function requireEnumBugKeys (line 1426) | function requireEnumBugKeys () {
function requireObjectGetOwnPropertyNames (line 1444) | function requireObjectGetOwnPropertyNames () {
function requireObjectGetOwnPropertySymbols (line 1465) | function requireObjectGetOwnPropertySymbols () {
function requireOwnKeys (line 1476) | function requireOwnKeys () {
function requireCopyConstructorProperties (line 1499) | function requireCopyConstructorProperties () {
function requireIsForced (line 1524) | function requireIsForced () {
function require_export (line 1555) | function require_export () {
function requireIsArray (line 1618) | function requireIsArray () {
function requireDoesNotExceedSafeInteger (line 1635) | function requireDoesNotExceedSafeInteger () {
function requireCreateProperty (line 1651) | function requireCreateProperty () {
function requireToStringTagSupport (line 1668) | function requireToStringTagSupport () {
function requireClassof (line 1685) | function requireClassof () {
function requireIsConstructor (line 1723) | function requireIsConstructor () {
function requireArraySpeciesConstructor (line 1783) | function requireArraySpeciesConstructor () {
function requireArraySpeciesCreate (line 1814) | function requireArraySpeciesCreate () {
function requireArrayMethodHasSpeciesSupport (line 1830) | function requireArrayMethodHasSpeciesSupport () {
function requireEs_array_concat (line 1857) | function requireEs_array_concat () {
function requireFunctionUncurryThisClause (line 1927) | function requireFunctionUncurryThisClause () {
function requireFunctionBindContext (line 1945) | function requireFunctionBindContext () {
function requireArrayIteration (line 1967) | function requireArrayIteration () {
function requireObjectKeys (line 2051) | function requireObjectKeys () {
function requireObjectDefineProperties (line 2068) | function requireObjectDefineProperties () {
function requireHtml (line 2097) | function requireHtml () {
function requireObjectCreate (line 2109) | function requireObjectCreate () {
function requireAddToUnscopables (line 2202) | function requireAddToUnscopables () {
function requireEs_array_find (line 2230) | function requireEs_array_find () {
function requireArraySlice (line 2264) | function requireArraySlice () {
function requireEs_array_slice (line 2275) | function requireEs_array_slice () {
function requireObjectAssign (line 2336) | function requireObjectAssign () {
function requireEs_object_assign (line 2401) | function requireEs_object_assign () {
function requireObjectToString (line 2423) | function requireObjectToString () {
function requireEs_object_toString (line 2439) | function requireEs_object_toString () {
function _class (line 2508) | function _class() {
FILE: src/main/resources/static/assets/bootstrap-table/extensions/defer-url/bootstrap-table-defer-url.js
function _assertThisInitialized (line 7) | function _assertThisInitialized(e) {
function _callSuper (line 11) | function _callSuper(t, o, e) {
function _classCallCheck (line 14) | function _classCallCheck(a, n) {
function _defineProperties (line 17) | function _defineProperties(e, r) {
function _createClass (line 23) | function _createClass(e, r, t) {
function _get (line 28) | function _get() {
function _getPrototypeOf (line 37) | function _getPrototypeOf(t) {
function _inherits (line 42) | function _inherits(t, e) {
function _isNativeReflectConstruct (line 54) | function _isNativeReflectConstruct() {
function _possibleConstructorReturn (line 62) | function _possibleConstructorReturn(t, e) {
function _setPrototypeOf (line 67) | function _setPrototypeOf(t, e) {
function _superPropBase (line 72) | function _superPropBase(t, o) {
function _superPropGet (line 76) | function _superPropGet(t, o, e, r) {
function _toPrimitive (line 82) | function _toPrimitive(t, r) {
function _toPropertyKey (line 92) | function _toPropertyKey(t) {
function requireGlobalThis (line 104) | function requireGlobalThis () {
function requireFails (line 130) | function requireFails () {
function requireDescriptors (line 146) | function requireDescriptors () {
function requireFunctionBindNative (line 162) | function requireFunctionBindNative () {
function requireFunctionCall (line 179) | function requireFunctionCall () {
function requireObjectPropertyIsEnumerable (line 196) | function requireObjectPropertyIsEnumerable () {
function requireCreatePropertyDescriptor (line 218) | function requireCreatePropertyDescriptor () {
function requireFunctionUncurryThis (line 235) | function requireFunctionUncurryThis () {
function requireClassofRaw (line 256) | function requireClassofRaw () {
function requireIndexedObject (line 273) | function requireIndexedObject () {
function requireIsNullOrUndefined (line 297) | function requireIsNullOrUndefined () {
function requireRequireObjectCoercible (line 311) | function requireRequireObjectCoercible () {
function requireToIndexedObject (line 330) | function requireToIndexedObject () {
function requireIsCallable (line 346) | function requireIsCallable () {
function requireIsObject (line 366) | function requireIsObject () {
function requireGetBuiltIn (line 380) | function requireGetBuiltIn () {
function requireObjectIsPrototypeOf (line 399) | function requireObjectIsPrototypeOf () {
function requireEnvironmentUserAgent (line 411) | function requireEnvironmentUserAgent () {
function requireEnvironmentV8Version (line 426) | function requireEnvironmentV8Version () {
function requireSymbolConstructorDetection (line 462) | function requireSymbolConstructorDetection () {
function requireUseSymbolAsUid (line 489) | function requireUseSymbolAsUid () {
function requireIsSymbol (line 504) | function requireIsSymbol () {
function requireTryToString (line 526) | function requireTryToString () {
function requireACallable (line 544) | function requireACallable () {
function requireGetMethod (line 563) | function requireGetMethod () {
function requireOrdinaryToPrimitive (line 581) | function requireOrdinaryToPrimitive () {
function requireIsPure (line 607) | function requireIsPure () {
function requireDefineGlobalProperty (line 617) | function requireDefineGlobalProperty () {
function requireSharedStore (line 637) | function requireSharedStore () {
function requireShared (line 660) | function requireShared () {
function requireToObject (line 674) | function requireToObject () {
function requireHasOwnProperty (line 692) | function requireHasOwnProperty () {
function requireUid (line 712) | function requireUid () {
function requireWellKnownSymbol (line 730) | function requireWellKnownSymbol () {
function requireToPrimitive (line 757) | function requireToPrimitive () {
function requireToPropertyKey (line 791) | function requireToPropertyKey () {
function requireDocumentCreateElement (line 809) | function requireDocumentCreateElement () {
function requireIe8DomDefine (line 828) | function requireIe8DomDefine () {
function requireObjectGetOwnPropertyDescriptor (line 847) | function requireObjectGetOwnPropertyDescriptor () {
function requireV8PrototypeDefineBug (line 880) | function requireV8PrototypeDefineBug () {
function requireAnObject (line 901) | function requireAnObject () {
function requireObjectDefineProperty (line 919) | function requireObjectDefineProperty () {
function requireCreateNonEnumerableProperty (line 971) | function requireCreateNonEnumerableProperty () {
function requireFunctionName (line 992) | function requireFunctionName () {
function requireInspectSource (line 1018) | function requireInspectSource () {
function requireWeakMapBasicDetection (line 1041) | function requireWeakMapBasicDetection () {
function requireSharedKey (line 1056) | function requireSharedKey () {
function requireHiddenKeys (line 1073) | function requireHiddenKeys () {
function requireInternalState (line 1083) | function requireInternalState () {
function requireMakeBuiltIn (line 1161) | function requireMakeBuiltIn () {
function requireDefineBuiltIn (line 1224) | function requireDefineBuiltIn () {
function requireMathTrunc (line 1262) | function requireMathTrunc () {
function requireToIntegerOrInfinity (line 1281) | function requireToIntegerOrInfinity () {
function requireToAbsoluteIndex (line 1299) | function requireToAbsoluteIndex () {
function requireToLength (line 1320) | function requireToLength () {
function requireLengthOfArrayLike (line 1339) | function requireLengthOfArrayLike () {
function requireArrayIncludes (line 1355) | function requireArrayIncludes () {
function requireObjectKeysInternal (line 1397) | function requireObjectKeysInternal () {
function requireEnumBugKeys (line 1426) | function requireEnumBugKeys () {
function requireObjectGetOwnPropertyNames (line 1444) | function requireObjectGetOwnPropertyNames () {
function requireObjectGetOwnPropertySymbols (line 1465) | function requireObjectGetOwnPropertySymbols () {
function requireOwnKeys (line 1476) | function requireOwnKeys () {
function requireCopyConstructorProperties (line 1499) | function requireCopyConstructorProperties () {
function requireIsForced (line 1524) | function requireIsForced () {
function require_export (line 1555) | function require_export () {
function requireObjectKeys (line 1618) | function requireObjectKeys () {
function requireObjectAssign (line 1636) | function requireObjectAssign () {
function requireEs_object_assign (line 1701) | function requireEs_object_assign () {
function _class (line 1737) | function _class() {
FILE: src/main/resources/static/assets/bootstrap-table/extensions/editable/bootstrap-table-editable.js
function _arrayLikeToArray (line 7) | function _arrayLikeToArray(r, a) {
function _arrayWithHoles (line 12) | function _arrayWithHoles(r) {
function _assertThisInitialized (line 15) | function _assertThisInitialized(e) {
function _callSuper (line 19) | function _callSuper(t, o, e) {
function _classCallCheck (line 22) | function _classCallCheck(a, n) {
function _defineProperties (line 25) | function _defineProperties(e, r) {
function _createClass (line 31) | function _createClass(e, r, t) {
function _createForOfIteratorHelper (line 36) | function _createForOfIteratorHelper(r, e) {
function _get (line 84) | function _get() {
function _getPrototypeOf (line 93) | function _getPrototypeOf(t) {
function _inherits (line 98) | function _inherits(t, e) {
function _isNativeReflectConstruct (line 110) | function _isNativeReflectConstruct() {
function _iterableToArrayLimit (line 118) | function _iterableToArrayLimit(r, l) {
function _nonIterableRest (line 142) | function _nonIterableRest() {
function _possibleConstructorReturn (line 145) | function _possibleConstructorReturn(t, e) {
function _setPrototypeOf (line 150) | function _setPrototypeOf(t, e) {
function _slicedToArray (line 155) | function _slicedToArray(r, e) {
function _superPropBase (line 158) | function _superPropBase(t, o) {
function _superPropGet (line 162) | function _superPropGet(t, o, e, r) {
function _toPrimitive (line 168) | function _toPrimitive(t, r) {
function _toPropertyKey (line 178) | function _toPropertyKey(t) {
function _unsupportedIterableToArray (line 182) | function _unsupportedIterableToArray(r, a) {
function requireGlobalThis (line 197) | function requireGlobalThis () {
function requireFails (line 223) | function requireFails () {
function requireDescriptors (line 239) | function requireDescriptors () {
function requireFunctionBindNative (line 255) | function requireFunctionBindNative () {
function requireFunctionCall (line 272) | function requireFunctionCall () {
function requireObjectPropertyIsEnumerable (line 289) | function requireObjectPropertyIsEnumerable () {
function requireCreatePropertyDescriptor (line 311) | function requireCreatePropertyDescriptor () {
function requireFunctionUncurryThis (line 328) | function requireFunctionUncurryThis () {
function requireClassofRaw (line 349) | function requireClassofRaw () {
function requireIndexedObject (line 366) | function requireIndexedObject () {
function requireIsNullOrUndefined (line 390) | function requireIsNullOrUndefined () {
function requireRequireObjectCoercible (line 404) | function requireRequireObjectCoercible () {
function requireToIndexedObject (line 423) | function requireToIndexedObject () {
function requireIsCallable (line 439) | function requireIsCallable () {
function requireIsObject (line 459) | function requireIsObject () {
function requireGetBuiltIn (line 473) | function requireGetBuiltIn () {
function requireObjectIsPrototypeOf (line 492) | function requireObjectIsPrototypeOf () {
function requireEnvironmentUserAgent (line 504) | function requireEnvironmentUserAgent () {
function requireEnvironmentV8Version (line 519) | function requireEnvironmentV8Version () {
function requireSymbolConstructorDetection (line 555) | function requireSymbolConstructorDetection () {
function requireUseSymbolAsUid (line 582) | function requireUseSymbolAsUid () {
function requireIsSymbol (line 597) | function requireIsSymbol () {
function requireTryToString (line 619) | function requireTryToString () {
function requireACallable (line 637) | function requireACallable () {
function requireGetMethod (line 656) | function requireGetMethod () {
function requireOrdinaryToPrimitive (line 674) | function requireOrdinaryToPrimitive () {
function requireIsPure (line 700) | function requireIsPure () {
function requireDefineGlobalProperty (line 710) | function requireDefineGlobalProperty () {
function requireSharedStore (line 730) | function requireSharedStore () {
function requireShared (line 753) | function requireShared () {
function requireToObject (line 767) | function requireToObject () {
function requireHasOwnProperty (line 785) | function requireHasOwnProperty () {
function requireUid (line 805) | function requireUid () {
function requireWellKnownSymbol (line 823) | function requireWellKnownSymbol () {
function requireToPrimitive (line 850) | function requireToPrimitive () {
function requireToPropertyKey (line 884) | function requireToPropertyKey () {
function requireDocumentCreateElement (line 902) | function requireDocumentCreateElement () {
function requireIe8DomDefine (line 921) | function requireIe8DomDefine () {
function requireObjectGetOwnPropertyDescriptor (line 940) | function requireObjectGetOwnPropertyDescriptor () {
function requireV8PrototypeDefineBug (line 973) | function requireV8PrototypeDefineBug () {
function requireAnObject (line 994) | function requireAnObject () {
function requireObjectDefineProperty (line 1012) | function requireObjectDefineProperty () {
function requireCreateNonEnumerableProperty (line 1064) | function requireCreateNonEnumerableProperty () {
function requireFunctionName (line 1085) | function requireFunctionName () {
function requireInspectSource (line 1111) | function requireInspectSource () {
function requireWeakMapBasicDetection (line 1134) | function requireWeakMapBasicDetection () {
function requireSharedKey (line 1149) | function requireSharedKey () {
function requireHiddenKeys (line 1166) | function requireHiddenKeys () {
function requireInternalState (line 1176) | function requireInternalState () {
function requireMakeBuiltIn (line 1254) | function requireMakeBuiltIn () {
function requireDefineBuiltIn (line 1317) | function requireDefineBuiltIn () {
function requireMathTrunc (line 1355) | function requireMathTrunc () {
function requireToIntegerOrInfinity (line 1374) | function requireToIntegerOrInfinity () {
function requireToAbsoluteIndex (line 1392) | function requireToAbsoluteIndex () {
function requireToLength (line 1413) | function requireToLength () {
function requireLengthOfArrayLike (line 1432) | function requireLengthOfArrayLike () {
function requireArrayIncludes (line 1448) | function requireArrayIncludes () {
function requireObjectKeysInternal (line 1490) | function requireObjectKeysInternal () {
function requireEnumBugKeys (line 1519) | function requireEnumBugKeys () {
function requireObjectGetOwnPropertyNames (line 1537) | function requireObjectGetOwnPropertyNames () {
function requireObjectGetOwnPropertySymbols (line 1558) | function requireObjectGetOwnPropertySymbols () {
function requireOwnKeys (line 1569) | function requireOwnKeys () {
function requireCopyConstructorProperties (line 1592) | function requireCopyConstructorProperties () {
function requireIsForced (line 1617) | function requireIsForced () {
function require_export (line 1648) | function require_export () {
function requireIsArray (line 1711) | function requireIsArray () {
function requireDoesNotExceedSafeInteger (line 1728) | function requireDoesNotExceedSafeInteger () {
function requireCreateProperty (line 1744) | function requireCreateProperty () {
function requireToStringTagSupport (line 1761) | function requireToStringTagSupport () {
function requireClassof (line 1778) | function requireClassof () {
function requireIsConstructor (line 1816) | function requireIsConstructor () {
function requireArraySpeciesConstructor (line 1876) | function requireArraySpeciesConstructor () {
function requireArraySpeciesCreate (line 1907) | function requireArraySpeciesCreate () {
function requireArrayMethodHasSpeciesSupport (line 1923) | function requireArrayMethodHasSpeciesSupport () {
function requireEs_array_concat (line 1950) | function requireEs_array_concat () {
function requireFunctionUncurryThisClause (line 2020) | function requireFunctionUncurryThisClause () {
function requireFunctionBindContext (line 2038) | function requireFunctionBindContext () {
function requireArrayIteration (line 2060) | function requireArrayIteration () {
function requireObjectKeys (line 2144) | function requireObjectKeys () {
function requireObjectDefineProperties (line 2161) | function requireObjectDefineProperties () {
function requireHtml (line 2190) | function requireHtml () {
function requireObjectCreate (line 2202) | function requireObjectCreate () {
function requireAddToUnscopables (line 2295) | function requireAddToUnscopables () {
function requireEs_array_find (line 2323) | function requireEs_array_find () {
function requireArrayMethodIsStrict (line 2357) | function requireArrayMethodIsStrict () {
function requireEs_array_indexOf (line 2374) | function requireEs_array_indexOf () {
function requireObjectAssign (line 2409) | function requireObjectAssign () {
function requireEs_object_assign (line 2474) | function requireEs_object_assign () {
function requireCorrectPrototypeGetter (line 2496) | function requireCorrectPrototypeGetter () {
function requireObjectGetPrototypeOf (line 2513) | function requireObjectGetPrototypeOf () {
function requireObjectToArray (line 2543) | function requireObjectToArray () {
function requireEs_object_entries (line 2599) | function requireEs_object_entries () {
function requireObjectToString (line 2622) | function requireObjectToString () {
function requireEs_object_toString (line 2638) | function requireEs_object_toString () {
function requireToString (line 2660) | function requireToString () {
function requireRegexpFlags (line 2677) | function requireRegexpFlags () {
function requireRegexpStickyHelpers (line 2703) | function requireRegexpStickyHelpers () {
function requireRegexpUnsupportedDotAll (line 2742) | function requireRegexpUnsupportedDotAll () {
function requireRegexpUnsupportedNcg (line 2761) | function requireRegexpUnsupportedNcg () {
function requireRegexpExec (line 2781) | function requireRegexpExec () {
function requireEs_regexp_exec (line 2905) | function requireEs_regexp_exec () {
function requireFunctionApply (line 2926) | function requireFunctionApply () {
function requireFixRegexpWellKnownSymbolLogic (line 2945) | function requireFixRegexpWellKnownSymbolLogic () {
function requireStringMultibyte (line 3029) | function requireStringMultibyte () {
function requireAdvanceStringIndex (line 3074) | function requireAdvanceStringIndex () {
function requireGetSubstitution (line 3090) | function requireGetSubstitution () {
function requireRegexpFlagsDetection (line 3144) | function requireRegexpFlagsDetection () {
function requireRegexpGetFlags (line 3199) | function requireRegexpGetFlags () {
function requireRegexpExecAbstract (line 3223) | function requireRegexpExecAbstract () {
function requireEs_string_replace (line 3251) | function requireEs_string_replace () {
function _class (line 3434) | function _class() {
FILE: src/main/resources/static/assets/bootstrap-table/extensions/export/bootstrap-table-export.js
function _arrayLikeToArray (line 7) | function _arrayLikeToArray(r, a) {
function _assertThisInitialized (line 12) | function _assertThisInitialized(e) {
function _callSuper (line 16) | function _callSuper(t, o, e) {
function _classCallCheck (line 19) | function _classCallCheck(a, n) {
function _defineProperties (line 22) | function _defineProperties(e, r) {
function _createClass (line 28) | function _createClass(e, r, t) {
function _createForOfIteratorHelper (line 33) | function _createForOfIteratorHelper(r, e) {
function _defineProperty (line 81) | function _defineProperty(e, r, t) {
function _get (line 89) | function _get() {
function _getPrototypeOf (line 98) | function _getPrototypeOf(t) {
function _inherits (line 103) | function _inherits(t, e) {
function _isNativeReflectConstruct (line 115) | function _isNativeReflectConstruct() {
function _possibleConstructorReturn (line 123) | function _possibleConstructorReturn(t, e) {
function _setPrototypeOf (line 128) | function _setPrototypeOf(t, e) {
function _superPropBase (line 133) | function _superPropBase(t, o) {
function _superPropGet (line 137) | function _superPropGet(t, o, e, r) {
function _toPrimitive (line 143) | function _toPrimitive(t, r) {
function _toPropertyKey (line 153) | function _toPropertyKey(t) {
function _unsupportedIterableToArray (line 157) | function _unsupportedIterableToArray(r, a) {
function requireGlobalThis (line 172) | function requireGlobalThis () {
function requireFails (line 198) | function requireFails () {
function requireDescriptors (line 214) | function requireDescriptors () {
function requireFunctionBindNative (line 230) | function requireFunctionBindNative () {
function requireFunctionCall (line 247) | function requireFunctionCall () {
function requireObjectPropertyIsEnumerable (line 264) | function requireObjectPropertyIsEnumerable () {
function requireCreatePropertyDescriptor (line 286) | function requireCreatePropertyDescriptor () {
function requireFunctionUncurryThis (line 303) | function requireFunctionUncurryThis () {
function requireClassofRaw (line 324) | function requireClassofRaw () {
function requireIndexedObject (line 341) | function requireIndexedObject () {
function requireIsNullOrUndefined (line 365) | function requireIsNullOrUndefined () {
function requireRequireObjectCoercible (line 379) | function requireRequireObjectCoercible () {
function requireToIndexedObject (line 398) | function requireToIndexedObject () {
function requireIsCallable (line 414) | function requireIsCallable () {
function requireIsObject (line 434) | function requireIsObject () {
function requireGetBuiltIn (line 448) | function requireGetBuiltIn () {
function requireObjectIsPrototypeOf (line 467) | function requireObjectIsPrototypeOf () {
function requireEnvironmentUserAgent (line 479) | function requireEnvironmentUserAgent () {
function requireEnvironmentV8Version (line 494) | function requireEnvironmentV8Version () {
function requireSymbolConstructorDetection (line 530) | function requireSymbolConstructorDetection () {
function requireUseSymbolAsUid (line 557) | function requireUseSymbolAsUid () {
function requireIsSymbol (line 572) | function requireIsSymbol () {
function requireTryToString (line 594) | function requireTryToString () {
function requireACallable (line 612) | function requireACallable () {
function requireGetMethod (line 631) | function requireGetMethod () {
function requireOrdinaryToPrimitive (line 649) | function requireOrdinaryToPrimitive () {
function requireIsPure (line 675) | function requireIsPure () {
function requireDefineGlobalProperty (line 685) | function requireDefineGlobalProperty () {
function requireSharedStore (line 705) | function requireSharedStore () {
function requireShared (line 728) | function requireShared () {
function requireToObject (line 742) | function requireToObject () {
function requireHasOwnProperty (line 760) | function requireHasOwnProperty () {
function requireUid (line 780) | function requireUid () {
function requireWellKnownSymbol (line 798) | function requireWellKnownSymbol () {
function requireToPrimitive (line 825) | function requireToPrimitive () {
function requireToPropertyKey (line 859) | function requireToPropertyKey () {
function requireDocumentCreateElement (line 877) | function requireDocumentCreateElement () {
function requireIe8DomDefine (line 896) | function requireIe8DomDefine () {
function requireObjectGetOwnPropertyDescriptor (line 915) | function requireObjectGetOwnPropertyDescriptor () {
function requireV8PrototypeDefineBug (line 948) | function requireV8PrototypeDefineBug () {
function requireAnObject (line 969) | function requireAnObject () {
function requireObjectDefineProperty (line 987) | function requireObjectDefineProperty () {
function requireCreateNonEnumerableProperty (line 1039) | function requireCreateNonEnumerableProperty () {
function requireFunctionName (line 1060) | function requireFunctionName () {
function requireInspectSource (line 1086) | function requireInspectSource () {
function requireWeakMapBasicDetection (line 1109) | function requireWeakMapBasicDetection () {
function requireSharedKey (line 1124) | function requireSharedKey () {
function requireHiddenKeys (line 1141) | function requireHiddenKeys () {
function requireInternalState (line 1151) | function requireInternalState () {
function requireMakeBuiltIn (line 1229) | function requireMakeBuiltIn () {
function requireDefineBuiltIn (line 1292) | function requireDefineBuiltIn () {
function requireMathTrunc (line 1330) | function requireMathTrunc () {
function requireToIntegerOrInfinity (line 1349) | function requireToIntegerOrInfinity () {
function requireToAbsoluteIndex (line 1367) | function requireToAbsoluteIndex () {
function requireToLength (line 1388) | function requireToLength () {
function requireLengthOfArrayLike (line 1407) | function requireLengthOfArrayLike () {
function requireArrayIncludes (line 1423) | function requireArrayIncludes () {
function requireObjectKeysInternal (line 1465) | function requireObjectKeysInternal () {
function requireEnumBugKeys (line 1494) | function requireEnumBugKeys () {
function requireObjectGetOwnPropertyNames (line 1512) | function requireObjectGetOwnPropertyNames () {
function requireObjectGetOwnPropertySymbols (line 1533) | function requireObjectGetOwnPropertySymbols () {
function requireOwnKeys (line 1544) | function requireOwnKeys () {
function requireCopyConstructorProperties (line 1567) | function requireCopyConstructorProperties () {
function requireIsForced (line 1592) | function requireIsForced () {
function require_export (line 1623) | function require_export () {
function requireIsArray (line 1686) | function requireIsArray () {
function requireDoesNotExceedSafeInteger (line 1703) | function requireDoesNotExceedSafeInteger () {
function requireCreateProperty (line 1719) | function requireCreateProperty () {
function requireToStringTagSupport (line 1736) | function requireToStringTagSupport () {
function requireClassof (line 1753) | function requireClassof () {
function requireIsConstructor (line 1791) | function requireIsConstructor () {
function requireArraySpeciesConstructor (line 1851) | function requireArraySpeciesConstructor () {
function requireArraySpeciesCreate (line 1882) | function requireArraySpeciesCreate () {
function requireArrayMethodHasSpeciesSupport (line 1898) | function requireArrayMethodHasSpeciesSupport () {
function requireEs_array_concat (line 1925) | function requireEs_array_concat () {
function requireFunctionUncurryThisClause (line 1995) | function requireFunctionUncurryThisClause () {
function requireFunctionBindContext (line 2013) | function requireFunctionBindContext () {
function requireArrayIteration (line 2035) | function requireArrayIteration () {
function requireObjectKeys (line 2119) | function requireObjectKeys () {
function requireObjectDefineProperties (line 2136) | function requireObjectDefineProperties () {
function requireHtml (line 2165) | function requireHtml () {
function requireObjectCreate (line 2177) | function requireObjectCreate () {
function requireAddToUnscopables (line 2270) | function requireAddToUnscopables () {
function requireEs_array_find (line 2298) | function requireEs_array_find () {
function requireEs_array_map (line 2331) | function requireEs_array_map () {
function requireArraySlice (line 2358) | function requireArraySlice () {
function requireEs_array_slice (line 2369) | function requireEs_array_slice () {
function requireObjectAssign (line 2430) | function requireObjectAssign () {
function requireEs_object_assign (line 2495) | function requireEs_object_assign () {
function requireObjectToString (line 2517) | function requireObjectToString () {
function requireEs_object_toString (line 2533) | function requireEs_object_toString () {
function requireToString (line 2555) | function requireToString () {
function requireRegexpFlags (line 2572) | function requireRegexpFlags () {
function requireRegexpStickyHelpers (line 2598) | function requireRegexpStickyHelpers () {
function requireRegexpUnsupportedDotAll (line 2637) | function requireRegexpUnsupportedDotAll () {
function requireRegexpUnsupportedNcg (line 2656) | function requireRegexpUnsupportedNcg () {
function requireRegexpExec (line 2676) | function requireRegexpExec () {
function requireEs_regexp_exec (line 2800) | function requireEs_regexp_exec () {
function requireFunctionApply (line 2821) | function requireFunctionApply () {
function requireFixRegexpWellKnownSymbolLogic (line 2840) | function requireFixRegexpWellKnownSymbolLogic () {
function requireStringMultibyte (line 2924) | function requireStringMultibyte () {
function requireAdvanceStringIndex (line 2969) | function requireAdvanceStringIndex () {
function requireGetSubstitution (line 2985) | function requireGetSubstitution () {
function requireRegexpFlagsDetection (line 3039) | function requireRegexpFlagsDetection () {
function requireRegexpGetFlags (line 3094) | function requireRegexpGetFlags () {
function requireRegexpExecAbstract (line 3118) | function requireRegexpExecAbstract () {
function requireEs_string_replace (line 3146) | function requireEs_string_replace () {
function requireDomIterables (line 3302) | function requireDomIterables () {
function requireDomTokenListPrototype (line 3346) | function requireDomTokenListPrototype () {
function requireArrayMethodIsStrict (line 3362) | function requireArrayMethodIsStrict () {
function requireArrayForEach (line 3380) | function requireArrayForEach () {
function requireWeb_domCollections_forEach (line 3399) | function requireWeb_domCollections_forEach () {
function _class (line 3488) | function _class() {
FILE: src/main/resources/static/assets/bootstrap-table/extensions/filter-control/bootstrap-table-filter-control.js
function _arrayLikeToArray (line 7) | function _arrayLikeToArray(r, a) {
function _arrayWithoutHoles (line 12) | function _arrayWithoutHoles(r) {
function _assertThisInitialized (line 15) | function _assertThisInitialized(e) {
function _callSuper (line 19) | function _callSuper(t, o, e) {
function _classCallCheck (line 22) | function _classCallCheck(a, n) {
function _defineProperties (line 25) | function _defineProperties(e, r) {
function _createClass (line 31) | function _createClass(e, r, t) {
function _get (line 36) | function _get() {
function _getPrototypeOf (line 45) | function _getPrototypeOf(t) {
function _inherits (line 50) | function _inherits(t, e) {
function _isNativeReflectConstruct (line 62) | function _isNativeReflectConstruct() {
function _iterableToArray (line 70) | function _iterableToArray(r) {
function _nonIterableSpread (line 73) | function _nonIterableSpread() {
function _possibleConstructorReturn (line 76) | function _possibleConstructorReturn(t, e) {
function _setPrototypeOf (line 81) | function _setPrototypeOf(t, e) {
function _superPropBase (line 86) | function _superPropBase(t, o) {
function _superPropGet (line 90) | function _superPropGet(t, o, e, r) {
function _toConsumableArray (line 96) | function _toConsumableArray(r) {
function _toPrimitive (line 99) | function _toPrimitive(t, r) {
function _toPropertyKey (line 109) | function _toPropertyKey(t) {
function _typeof (line 113) | function _typeof(o) {
function _unsupportedIterableToArray (line 122) | function _unsupportedIterableToArray(r, a) {
function requireGlobalThis (line 137) | function requireGlobalThis () {
function requireFails (line 163) | function requireFails () {
function requireDescriptors (line 179) | function requireDescriptors () {
function requireFunctionBindNative (line 195) | function requireFunctionBindNative () {
function requireFunctionCall (line 212) | function requireFunctionCall () {
function requireObjectPropertyIsEnumerable (line 229) | function requireObjectPropertyIsEnumerable () {
function requireCreatePropertyDescriptor (line 251) | function requireCreatePropertyDescriptor () {
function requireFunctionUncurryThis (line 268) | function requireFunctionUncurryThis () {
function requireClassofRaw (line 289) | function requireClassofRaw () {
function requireIndexedObject (line 306) | function requireIndexedObject () {
function requireIsNullOrUndefined (line 330) | function requireIsNullOrUndefined () {
function requireRequireObjectCoercible (line 344) | function requireRequireObjectCoercible () {
function requireToIndexedObject (line 363) | function requireToIndexedObject () {
function requireIsCallable (line 379) | function requireIsCallable () {
function requireIsObject (line 399) | function requireIsObject () {
function requireGetBuiltIn (line 413) | function requireGetBuiltIn () {
function requireObjectIsPrototypeOf (line 432) | function requireObjectIsPrototypeOf () {
function requireEnvironmentUserAgent (line 444) | function requireEnvironmentUserAgent () {
function requireEnvironmentV8Version (line 459) | function requireEnvironmentV8Version () {
function requireSymbolConstructorDetection (line 495) | function requireSymbolConstructorDetection () {
function requireUseSymbolAsUid (line 522) | function requireUseSymbolAsUid () {
function requireIsSymbol (line 537) | function requireIsSymbol () {
function requireTryToString (line 559) | function requireTryToString () {
function requireACallable (line 577) | function requireACallable () {
function requireGetMethod (line 596) | function requireGetMethod () {
function requireOrdinaryToPrimitive (line 614) | function requireOrdinaryToPrimitive () {
function requireIsPure (line 640) | function requireIsPure () {
function requireDefineGlobalProperty (line 650) | function requireDefineGlobalProperty () {
function requireSharedStore (line 670) | function requireSharedStore () {
function requireShared (line 693) | function requireShared () {
function requireToObject (line 707) | function requireToObject () {
function requireHasOwnProperty (line 725) | function requireHasOwnProperty () {
function requireUid (line 745) | function requireUid () {
function requireWellKnownSymbol (line 763) | function requireWellKnownSymbol () {
function requireToPrimitive (line 790) | function requireToPrimitive () {
function requireToPropertyKey (line 824) | function requireToPropertyKey () {
function requireDocumentCreateElement (line 842) | function requireDocumentCreateElement () {
function requireIe8DomDefine (line 861) | function requireIe8DomDefine () {
function requireObjectGetOwnPropertyDescriptor (line 880) | function requireObjectGetOwnPropertyDescriptor () {
function requireV8PrototypeDefineBug (line 913) | function requireV8PrototypeDefineBug () {
function requireAnObject (line 934) | function requireAnObject () {
function requireObjectDefineProperty (line 952) | function requireObjectDefineProperty () {
function requireCreateNonEnumerableProperty (line 1004) | function requireCreateNonEnumerableProperty () {
function requireFunctionName (line 1025) | function requireFunctionName () {
function requireInspectSource (line 1051) | function requireInspectSource () {
function requireWeakMapBasicDetection (line 1074) | function requireWeakMapBasicDetection () {
function requireSharedKey (line 1089) | function requireSharedKey () {
function requireHiddenKeys (line 1106) | function requireHiddenKeys () {
function requireInternalState (line 1116) | function requireInternalState () {
function requireMakeBuiltIn (line 1194) | function requireMakeBuiltIn () {
function requireDefineBuiltIn (line 1257) | function requireDefineBuiltIn () {
function requireMathTrunc (line 1295) | function requireMathTrunc () {
function requireToIntegerOrInfinity (line 1314) | function requireToIntegerOrInfinity () {
function requireToAbsoluteIndex (line 1332) | function requireToAbsoluteIndex () {
function requireToLength (line 1353) | function requireToLength () {
function requireLengthOfArrayLike (line 1372) | function requireLengthOfArrayLike () {
function requireArrayIncludes (line 1388) | function requireArrayIncludes () {
function requireObjectKeysInternal (line 1430) | function requireObjectKeysInternal () {
function requireEnumBugKeys (line 1459) | function requireEnumBugKeys () {
function requireObjectGetOwnPropertyNames (line 1477) | function requireObjectGetOwnPropertyNames () {
function requireObjectGetOwnPropertySymbols (line 1498) | function requireObjectGetOwnPropertySymbols () {
function requireOwnKeys (line 1509) | function requireOwnKeys () {
function requireCopyConstructorProperties (line 1532) | function requireCopyConstructorProperties () {
function requireIsForced (line 1557) | function requireIsForced () {
function require_export (line 1588) | function require_export () {
function requireIsArray (line 1651) | function requireIsArray () {
function requireDoesNotExceedSafeInteger (line 1668) | function requireDoesNotExceedSafeInteger () {
function requireCreateProperty (line 1684) | function requireCreateProperty () {
function requireToStringTagSupport (line 1701) | function requireToStringTagSupport () {
function requireClassof (line 1718) | function requireClassof () {
function requireIsConstructor (line 1756) | function requireIsConstructor () {
function requireArraySpeciesConstructor (line 1816) | function requireArraySpeciesConstructor () {
function requireArraySpeciesCreate (line 1847) | function requireArraySpeciesCreate () {
function requireArrayMethodHasSpeciesSupport (line 1863) | function requireArrayMethodHasSpeciesSupport () {
function requireEs_array_concat (line 1890) | function requireEs_array_concat () {
function requireFunctionUncurryThisClause (line 1960) | function requireFunctionUncurryThisClause () {
function requireFunctionBindContext (line 1978) | function requireFunctionBindContext () {
function requireArrayIteration (line 2000) | function requireArrayIteration () {
function requireEs_array_filter (line 2081) | function requireEs_array_filter () {
function requireObjectKeys (line 2110) | function requireObjectKeys () {
function requireObjectDefineProperties (line 2127) | function requireObjectDefineProperties () {
function requireHtml (line 2156) | function requireHtml () {
function requireObjectCreate (line 2168) | function requireObjectCreate () {
function requireAddToUnscopables (line 2261) | function requireAddToUnscopables () {
function requireEs_array_find (line 2289) | function requireEs_array_find () {
function requireEs_array_includes (line 2322) | function requireEs_array_includes () {
function requireArrayMethodIsStrict (line 2356) | function requireArrayMethodIsStrict () {
function requireEs_array_indexOf (line 2373) | function requireEs_array_indexOf () {
function requireObjectAssign (line 2408) | function requireObjectAssign () {
function requireEs_object_assign (line 2473) | function requireEs_object_assign () {
function requireEs_object_keys (line 2494) | function requireEs_object_keys () {
function requireObjectToString (line 2521) | function requireObjectToString () {
function requireEs_object_toString (line 2537) | function requireEs_object_toString () {
function requireCorrectPrototypeGetter (line 2559) | function requireCorrectPrototypeGetter () {
function requireObjectGetPrototypeOf (line 2576) | function requireObjectGetPrototypeOf () {
function requireObjectToArray (line 2606) | function requireObjectToArray () {
function requireEs_object_values (line 2662) | function requireEs_object_values () {
function requireEnvironment (line 2687) | function requireEnvironment () {
function requireEnvironmentIsNode (line 2716) | function requireEnvironmentIsNode () {
function requirePath (line 2728) | function requirePath () {
function requireFunctionUncurryThisAccessor (line 2740) | function requireFunctionUncurryThisAccessor () {
function requireIsPossiblePrototype (line 2758) | function requireIsPossiblePrototype () {
function requireAPossiblePrototype (line 2772) | function requireAPossiblePrototype () {
function requireObjectSetPrototypeOf (line 2790) | function requireObjectSetPrototypeOf () {
function requireSetToStringTag (line 2827) | function requireSetToStringTag () {
function requireDefineBuiltInAccessor (line 2848) | function requireDefineBuiltInAccessor () {
function requireSetSpecies (line 2865) | function requireSetSpecies () {
function requireAnInstance (line 2891) | function requireAnInstance () {
function requireAConstructor (line 2908) | function requireAConstructor () {
function requireSpeciesConstructor (line 2927) | function requireSpeciesConstructor () {
function requireFunctionApply (line 2950) | function requireFunctionApply () {
function requireArraySlice (line 2969) | function requireArraySlice () {
function requireValidateArgumentsLength (line 2981) | function requireValidateArgumentsLength () {
function requireEnvironmentIsIos (line 2996) | function requireEnvironmentIsIos () {
function requireTask (line 3009) | function requireTask () {
function requireSafeGetBuiltIn (line 3134) | function requireSafeGetBuiltIn () {
function requireQueue (line 3155) | function requireQueue () {
function requireEnvironmentIsIosPebble (line 3188) | function requireEnvironmentIsIosPebble () {
function requireEnvironmentIsWebosWebkit (line 3200) | function requireEnvironmentIsWebosWebkit () {
function requireMicrotask (line 3212) | function requireMicrotask () {
function requireHostReportErrors (line 3299) | function requireHostReportErrors () {
function requirePerform (line 3314) | function requirePerform () {
function requirePromiseNativeConstructor (line 3330) | function requirePromiseNativeConstructor () {
function requirePromiseConstructorDetection (line 3342) | function requirePromiseConstructorDetection () {
function requireNewPromiseCapability (line 3398) | function requireNewPromiseCapability () {
function requireEs_promise_constructor (line 3426) | function requireEs_promise_constructor () {
function requireIterators (line 3729) | function requireIterators () {
function requireIsArrayIteratorMethod (line 3739) | function requireIsArrayIteratorMethod () {
function requireGetIteratorMethod (line 3758) | function requireGetIteratorMethod () {
function requireGetIterator (line 3780) | function requireGetIterator () {
function requireIteratorClose (line 3802) | function requireIteratorClose () {
function requireIterate (line 3834) | function requireIterate () {
function requireCheckCorrectnessOfIteration (line 3911) | function requireCheckCorrectnessOfIteration () {
function requirePromiseStaticsIncorrectIteration (line 3960) | function requirePromiseStaticsIncorrectIteration () {
function requireEs_promise_all (line 3975) | function requireEs_promise_all () {
function requireEs_promise_catch (line 4023) | function requireEs_promise_catch () {
function requireEs_promise_race (line 4058) | function requireEs_promise_race () {
function requireEs_promise_reject (line 4093) | function requireEs_promise_reject () {
function requirePromiseResolve (line 4118) | function requirePromiseResolve () {
function requireEs_promise_resolve (line 4138) | function requireEs_promise_resolve () {
function requireEs_promise (line 4163) | function requireEs_promise () {
function requireToString (line 4183) | function requireToString () {
function requireRegexpFlags (line 4200) | function requireRegexpFlags () {
function requireRegexpStickyHelpers (line 4226) | function requireRegexpStickyHelpers () {
function requireRegexpUnsupportedDotAll (line 4265) | function requireRegexpUnsupportedDotAll () {
function requireRegexpUnsupportedNcg (line 4284) | function requireRegexpUnsupportedNcg () {
function requireRegexpExec (line 4304) | function requireRegexpExec () {
function requireEs_regexp_exec (line 4428) | function requireEs_regexp_exec () {
function requireRegexpFlagsDetection (line 4449) | function requireRegexpFlagsDetection () {
function requireRegexpGetFlags (line 4504) | function requireRegexpGetFlags () {
function requireEs_regexp_toString (line 4527) | function requireEs_regexp_toString () {
function requireIsRegexp (line 4565) | function requireIsRegexp () {
function requireNotARegexp (line 4586) | function requireNotARegexp () {
function requireCorrectIsRegexpLogic (line 4604) | function requireCorrectIsRegexpLogic () {
function requireEs_string_includes (line 4627) | function requireEs_string_includes () {
function requireFixRegexpWellKnownSymbolLogic (line 4660) | function requireFixRegexpWellKnownSymbolLogic () {
function requireStringMultibyte (line 4744) | function requireStringMultibyte () {
function requireAdvanceStringIndex (line 4789) | function requireAdvanceStringIndex () {
function requireRegexpExecAbstract (line 4805) | function requireRegexpExecAbstract () {
function requireEs_string_split (line 4833) | function requireEs_string_split () {
function requireWhitespaces (line 4956) | function requireWhitespaces () {
function requireStringTrim (line 4968) | function requireStringTrim () {
function requireStringTrimForced (line 5007) | function requireStringTrimForced () {
function requireEs_string_trim (line 5030) | function requireEs_string_trim () {
function requireDomIterables (line 5054) | function requireDomIterables () {
function requireDomTokenListPrototype (line 5098) | function requireDomTokenListPrototype () {
function requireArrayForEach (line 5114) | function requireArrayForEach () {
function requireWeb_domCollections_forEach (line 5133) | function requireWeb_domCollections_forEach () {
function requireDeletePropertyOrThrow (line 5168) | function requireDeletePropertyOrThrow () {
function requireArraySort (line 5184) | function requireArraySort () {
function requireEnvironmentFfVersion (line 5234) | function requireEnvironmentFfVersion () {
function requireEnvironmentIsIeOrEdge (line 5248) | function requireEnvironmentIsIeOrEdge () {
function requireEnvironmentWebkitVersion (line 5260) | function requireEnvironmentWebkitVersion () {
function requireEs_array_sort (line 5273) | function requireEs_array_sort () {
function requireEs_string_match (line 5390) | function requireEs_string_match () {
function requireGetSubstitution (line 5456) | function requireGetSubstitution () {
function requireEs_string_replace (line 5509) | function requireEs_string_replace () {
function requireEs_string_startsWith (line 5664) | function requireEs_string_startsWith () {
function getInputClass (line 5706) | function getInputClass(that) {
function getOptionsFromSelectControl (line 5711) | function getOptionsFromSelectControl(selectControl) {
function getControlContainer (line 5714) | function getControlContainer(that) {
function isKeyAllowed (line 5723) | function isKeyAllowed(keyCode) {
function getSearchControls (line 5726) | function getSearchControls(that) {
function existOptionInSelectControl (line 5729) | function existOptionInSelectControl(selectControl, value) {
function addOptionToSelectControl (line 5741) | function addOptionToSelectControl(selectControl, _value, text, selected,...
function sortSelectControl (line 5752) | function sortSelectControl(selectControl, orderBy, options) {
function fixHeaderCSS (line 5775) | function fixHeaderCSS(_ref) {
function getElementClass (line 5779) | function getElementClass($element) {
function getCursorPosition (line 5784) | function getCursorPosition(el) {
function cacheValues (line 5800) | function cacheValues(that) {
function setCaretPosition (line 5821) | function setCaretPosition(elem, caretPos) {
function setValues (line 5836) | function setValues(that) {
function collectBootstrapTableFilterCookies (line 5882) | function collectBootstrapTableFilterCookies() {
function escapeID (line 5912) | function escapeID(id) {
function isColumnSearchableViaSelect (line 5916) | function isColumnSearchableViaSelect(_ref2) {
function isFilterDataNotGiven (line 5921) | function isFilterDataNotGiven(_ref3) {
function hasSelectControlElement (line 5925) | function hasSelectControlElement(selectControl) {
function initFilterSelectControls (line 5928) | function initFilterSelectControls(that) {
function getFilterDataMethod (line 5973) | function getFilterDataMethod(objFilterDataMethod, searchTerm) {
function createControls (line 5982) | function createControls(that, header) {
function getDirectionOfSelectOptions (line 6173) | function getDirectionOfSelectOptions(_alignment) {
function syncHeaders (line 6186) | function syncHeaders(that) {
function _class (line 6372) | function _class() {
FILE: src/main/resources/static/assets/bootstrap-table/extensions/filter-control/utils.js
function _typeof (line 7) | function _typeof(o) {
function requireGlobalThis (line 24) | function requireGlobalThis () {
function requireFails (line 50) | function requireFails () {
function requireDescriptors (line 66) | function requireDescriptors () {
function requireFunctionBindNative (line 82) | function requireFunctionBindNative () {
function requireFunctionCall (line 99) | function requireFunctionCall () {
function requireObjectPropertyIsEnumerable (line 116) | function requireObjectPropertyIsEnumerable () {
function requireCreatePropertyDescriptor (line 138) | function requireCreatePropertyDescriptor () {
function requireFunctionUncurryThis (line 155) | function requireFunctionUncurryThis () {
function requireClassofRaw (line 176) | function requireClassofRaw () {
function requireIndexedObject (line 193) | function requireIndexedObject () {
function requireIsNullOrUndefined (line 217) | function requireIsNullOrUndefined () {
function requireRequireObjectCoercible (line 231) | function requireRequireObjectCoercible () {
function requireToIndexedObject (line 250) | function requireToIndexedObject () {
function requireIsCallable (line 266) | function requireIsCallable () {
function requireIsObject (line 286) | function requireIsObject () {
function requireGetBuiltIn (line 300) | function requireGetBuiltIn () {
function requireObjectIsPrototypeOf (line 319) | function requireObjectIsPrototypeOf () {
function requireEnvironmentUserAgent (line 331) | function requireEnvironmentUserAgent () {
function requireEnvironmentV8Version (line 346) | function requireEnvironmentV8Version () {
function requireSymbolConstructorDetection (line 382) | function requireSymbolConstructorDetection () {
function requireUseSymbolAsUid (line 409) | function requireUseSymbolAsUid () {
function requireIsSymbol (line 424) | function requireIsSymbol () {
function requireTryToString (line 446) | function requireTryToString () {
function requireACallable (line 464) | function requireACallable () {
function requireGetMethod (line 483) | function requireGetMethod () {
function requireOrdinaryToPrimitive (line 501) | function requireOrdinaryToPrimitive () {
function requireIsPure (line 527) | function requireIsPure () {
function requireDefineGlobalProperty (line 537) | function requireDefineGlobalProperty () {
function requireSharedStore (line 557) | function requireSharedStore () {
function requireShared (line 580) | function requireShared () {
function requireToObject (line 594) | function requireToObject () {
function requireHasOwnProperty (line 612) | function requireHasOwnProperty () {
function requireUid (line 632) | function requireUid () {
function requireWellKnownSymbol (line 650) | function requireWellKnownSymbol () {
function requireToPrimitive (line 677) | function requireToPrimitive () {
function requireToPropertyKey (line 711) | function requireToPropertyKey () {
function requireDocumentCreateElement (line 729) | function requireDocumentCreateElement () {
function requireIe8DomDefine (line 748) | function requireIe8DomDefine () {
function requireObjectGetOwnPropertyDescriptor (line 767) | function requireObjectGetOwnPropertyDescriptor () {
function requireV8PrototypeDefineBug (line 800) | function requireV8PrototypeDefineBug () {
function requireAnObject (line 821) | function requireAnObject () {
function requireObjectDefineProperty (line 839) | function requireObjectDefineProperty () {
function requireCreateNonEnumerableProperty (line 891) | function requireCreateNonEnumerableProperty () {
function requireFunctionName (line 912) | function requireFunctionName () {
function requireInspectSource (line 938) | function requireInspectSource () {
function requireWeakMapBasicDetection (line 961) | function requireWeakMapBasicDetection () {
function requireSharedKey (line 976) | function requireSharedKey () {
function requireHiddenKeys (line 993) | function requireHiddenKeys () {
function requireInternalState (line 1003) | function requireInternalState () {
function requireMakeBuiltIn (line 1081) | function requireMakeBuiltIn () {
function requireDefineBuiltIn (line 1144) | function requireDefineBuiltIn () {
function requireMathTrunc (line 1182) | function requireMathTrunc () {
function requireToIntegerOrInfinity (line 1201) | function requireToIntegerOrInfinity () {
function requireToAbsoluteIndex (line 1219) | function requireToAbsoluteIndex () {
function requireToLength (line 1240) | function requireToLength () {
function requireLengthOfArrayLike (line 1259) | function requireLengthOfArrayLike () {
function requireArrayIncludes (line 1275) | function requireArrayIncludes () {
function requireObjectKeysInternal (line 1317) | function requireObjectKeysInternal () {
function requireEnumBugKeys (line 1346) | function requireEnumBugKeys () {
function requireObjectGetOwnPropertyNames (line 1364) | function requireObjectGetOwnPropertyNames () {
function requireObjectGetOwnPropertySymbols (line 1385) | function requireObjectGetOwnPropertySymbols () {
function requireOwnKeys (line 1396) | function requireOwnKeys () {
function requireCopyConstructorProperties (line 1419) | function requireCopyConstructorProperties () {
function requireIsForced (line 1444) | function requireIsForced () {
function require_export (line 1475) | function require_export () {
function requireIsArray (line 1538) | function requireIsArray () {
function requireDoesNotExceedSafeInteger (line 1555) | function requireDoesNotExceedSafeInteger () {
function requireCreateProperty (line 1571) | function requireCreateProperty () {
function requireToStringTagSupport (line 1588) | function requireToStringTagSupport () {
function requireClassof (line 1605) | function requireClassof () {
function requireIsConstructor (line 1643) | function requireIsConstructor () {
function requireArraySpeciesConstructor (line 1703) | function requireArraySpeciesConstructor () {
function requireArraySpeciesCreate (line 1734) | function requireArraySpeciesCreate () {
function requireArrayMethodHasSpeciesSupport (line 1750) | function requireArrayMethodHasSpeciesSupport () {
function requireEs_array_concat (line 1777) | function requireEs_array_concat () {
function requireFunctionUncurryThisClause (line 1847) | function requireFunctionUncurryThisClause () {
function requireFunctionBindContext (line 1865) | function requireFunctionBindContext () {
function requireArrayIteration (line 1887) | function requireArrayIteration () {
function requireEs_array_filter (line 1968) | function requireEs_array_filter () {
function requireObjectKeys (line 1997) | function requireObjectKeys () {
function requireObjectDefineProperties (line 2014) | function requireObjectDefineProperties () {
function requireHtml (line 2043) | function requireHtml () {
function requireObjectCreate (line 2055) | function requireObjectCreate () {
function requireAddToUnscopables (line 2148) | function requireAddToUnscopables () {
function requireEs_array_find (line 2176) | function requireEs_array_find () {
function requireEs_array_includes (line 2209) | function requireEs_array_includes () {
function requireArrayMethodIsStrict (line 2243) | function requireArrayMethodIsStrict () {
function requireEs_array_indexOf (line 2260) | function requireEs_array_indexOf () {
function requireDeletePropertyOrThrow (line 2295) | function requireDeletePropertyOrThrow () {
function requireToString (line 2311) | function requireToString () {
function requireArraySlice (line 2328) | function requireArraySlice () {
function requireArraySort (line 2340) | function requireArraySort () {
function requireEnvironmentFfVersion (line 2390) | function requireEnvironmentFfVersion () {
function requireEnvironmentIsIeOrEdge (line 2404) | function requireEnvironmentIsIeOrEdge () {
function requireEnvironmentWebkitVersion (line 2416) | function requireEnvironmentWebkitVersion () {
function requireEs_array_sort (line 2429) | function requireEs_array_sort () {
function requireEs_object_keys (line 2546) | function requireEs_object_keys () {
function requireObjectToString (line 2573) | function requireObjectToString () {
function requireEs_object_toString (line 2589) | function requireEs_object_toString () {
function requireRegexpFlags (line 2611) | function requireRegexpFlags () {
function requireRegexpStickyHelpers (line 2637) | function requireRegexpStickyHelpers () {
function requireRegexpUnsupportedDotAll (line 2676) | function requireRegexpUnsupportedDotAll () {
function requireRegexpUnsupportedNcg (line 2695) | function requireRegexpUnsupportedNcg () {
function requireRegexpExec (line 2715) | function requireRegexpExec () {
function requireEs_regexp_exec (line 2839) | function requireEs_regexp_exec () {
function requireRegexpFlagsDetection (line 2860) | function requireRegexpFlagsDetection () {
function requireRegexpGetFlags (line 2915) | function requireRegexpGetFlags () {
function requireEs_regexp_toString (line 2938) | function requireEs_regexp_toString () {
function requireFixRegexpWellKnownSymbolLogic (line 2976) | function requireFixRegexpWellKnownSymbolLogic () {
function requireStringMultibyte (line 3060) | function requireStringMultibyte () {
function requireAdvanceStringIndex (line 3105) | function requireAdvanceStringIndex () {
function requireRegexpExecAbstract (line 3121) | function requireRegexpExecAbstract () {
function requireEs_string_match (line 3149) | function requireEs_string_match () {
function requireFunctionApply (line 3215) | function requireFunctionApply () {
function requireGetSubstitution (line 3234) | function requireGetSubstitution () {
function requireEs_string_replace (line 3287) | function requireEs_string_replace () {
function requireIsRegexp (line 3443) | function requireIsRegexp () {
function requireNotARegexp (line 3464) | function requireNotARegexp () {
function requireCorrectIsRegexpLogic (line 3482) | function requireCorrectIsRegexpLogic () {
function requireEs_string_startsWith (line 3505) | function requireEs_string_startsWith () {
function requireWhitespaces (line 3549) | function requireWhitespaces () {
function requireStringTrim (line 3561) | function requireStringTrim () {
function requireStringTrimForced (line 3600) | function requireStringTrimForced () {
function requireEs_string_trim (line 3623) | function requireEs_string_trim () {
function requireDomIterables (line 3647) | function requireDomIterables () {
function requireDomTokenListPrototype (line 3691) | function requireDomTokenListPrototype () {
function requireArrayForEach (line 3707) | function requireArrayForEach () {
function requireWeb_domCollections_forEach (line 3726) | function requireWeb_domCollections_forEach () {
function getInputClass (line 3759) | function getInputClass(that) {
function getOptionsFromSelectControl (line 3764) | function getOptionsFromSelectControl(selectControl) {
function getControlContainer (line 3767) | function getControlContainer(that) {
function isKeyAllowed (line 3776) | function isKeyAllowed(keyCode) {
function getSearchControls (line 3779) | function getSearchControls(that) {
function hideUnusedSelectOptions (line 3782) | function hideUnusedSelectOptions(selectControl, uniqueValues) {
function existOptionInSelectControl (line 3794) | function existOptionInSelectControl(selectControl, value) {
function addOptionToSelectControl (line 3806) | function addOptionToSelectControl(selectControl, _value, text, selected,...
function sortSelectControl (line 3817) | function sortSelectControl(selectControl, orderBy, options) {
function fixHeaderCSS (line 3840) | function fixHeaderCSS(_ref) {
function getElementClass (line 3844) | function getElementClass($element) {
function getCursorPosition (line 3849) | function getCursorPosition(el) {
function cacheValues (line 3865) | function cacheValues(that) {
function setCaretPosition (line 3886) | function setCaretPosition(elem, caretPos) {
function setValues (line 3901) | function setValues(that) {
function collectBootstrapTableFilterCookies (line 3947) | function collectBootstrapTableFilterCookies() {
function escapeID (line 3977) | function escapeID(id) {
function isColumnSearchableViaSelect (line 3981) | function isColumnSearchableViaSelect(_ref2) {
function isFilterDataNotGiven (line 3986) | function isFilterDataNotGiven(_ref3) {
function hasSelectControlElement (line 3990) | function hasSelectControlElement(selectControl) {
function initFilterSelectControls (line 3993) | function initFilterSelectControls(that) {
function getFilterDataMethod (line 4038) | function getFilterDataMethod(objFilterDataMethod, searchTerm) {
function createControls (line 4047) | function createControls(that, header) {
function getDirectionOfSelectOptions (line 4238) | function getDirectionOfSelectOptions(_alignment) {
function syncHeaders (line 4251) | function syncHeaders(that) {
FILE: src/main/resources/static/assets/bootstrap-table/extensions/fixed-columns/bootstrap-table-fixed-columns.js
function _assertThisInitialized (line 7) | function _assertThisInitialized(e) {
function _callSuper (line 11) | function _callSuper(t, o, e) {
function _classCallCheck (line 14) | function _classCallCheck(a, n) {
function _defineProperties (line 17) | function _defineProperties(e, r) {
function _createClass (line 23) | function _createClass(e, r, t) {
function _get (line 28) | function _get() {
function _getPrototypeOf (line 37) | function _getPrototypeOf(t) {
function _inherits (line 42) | function _inherits(t, e) {
function _isNativeReflectConstruct (line 54) | function _isNativeReflectConstruct() {
function _possibleConstructorReturn (line 62) | function _possibleConstructorReturn(t, e) {
function _setPrototypeOf (line 67) | function _setPrototypeOf(t, e) {
function _superPropBase (line 72) | function _superPropBase(t, o) {
function _superPropGet (line 76) | function _superPropGet(t, o, e, r) {
function _toPrimitive (line 82) | function _toPrimitive(t, r) {
function _toPropertyKey (line 92) | function _toPropertyKey(t) {
function requireGlobalThis (line 104) | function requireGlobalThis () {
function requireFails (line 130) | function requireFails () {
function requireDescriptors (line 146) | function requireDescriptors () {
function requireFunctionBindNative (line 162) | function requireFunctionBindNative () {
function requireFunctionCall (line 179) | function requireFunctionCall () {
function requireObjectPropertyIsEnumerable (line 196) | function requireObjectPropertyIsEnumerable () {
function requireCreatePropertyDescriptor (line 218) | function requireCreatePropertyDescriptor () {
function requireFunctionUncurryThis (line 235) | function requireFunctionUncurryThis () {
function requireClassofRaw (line 256) | function requireClassofRaw () {
function requireIndexedObject (line 273) | function requireIndexedObject () {
function requireIsNullOrUndefined (line 297) | function requireIsNullOrUndefined () {
function requireRequireObjectCoercible (line 311) | function requireRequireObjectCoercible () {
function requireToIndexedObject (line 330) | function requireToIndexedObject () {
function requireIsCallable (line 346) | function requireIsCallable () {
function requireIsObject (line 366) | function requireIsObject () {
function requireGetBuiltIn (line 380) | function requireGetBuiltIn () {
function requireObjectIsPrototypeOf (line 399) | function requireObjectIsPrototypeOf () {
function requireEnvironmentUserAgent (line 411) | function requireEnvironmentUserAgent () {
function requireEnvironmentV8Version (line 426) | function requireEnvironmentV8Version () {
function requireSymbolConstructorDetection (line 462) | function requireSymbolConstructorDetection () {
function requireUseSymbolAsUid (line 489) | function requireUseSymbolAsUid () {
function requireIsSymbol (line 504) | function requireIsSymbol () {
function requireTryToString (line 526) | function requireTryToString () {
function requireACallable (line 544) | function requireACallable () {
function requireGetMethod (line 563) | function requireGetMethod () {
function requireOrdinaryToPrimitive (line 581) | function requireOrdinaryToPrimitive () {
function requireIsPure (line 607) | function requireIsPure () {
function requireDefineGlobalProperty (line 617) | function requireDefineGlobalProperty () {
function requireSharedStore (line 637) | function requireSharedStore () {
function requireShared (line 660) | function requireShared () {
function requireToObject (line 674) | function requireToObject () {
function requireHasOwnProperty (line 692) | function requireHasOwnProperty () {
function requireUid (line 712) | function requireUid () {
function requireWellKnownSymbol (line 730) | function requireWellKnownSymbol () {
function requireToPrimitive (line 757) | function requireToPrimitive () {
function requireToPropertyKey (line 791) | function requireToPropertyKey () {
function requireDocumentCreateElement (line 809) | function requireDocumentCreateElement () {
function requireIe8DomDefine (line 828) | function requireIe8DomDefine () {
function requireObjectGetOwnPropertyDescriptor (line 847) | function requireObjectGetOwnPropertyDescriptor () {
function requireV8PrototypeDefineBug (line 880) | function requireV8PrototypeDefineBug () {
function requireAnObject (line 901) | function requireAnObject () {
function requireObjectDefineProperty (line 919) | function requireObjectDefineProperty () {
function requireCreateNonEnumerableProperty (line 971) | function requireCreateNonEnumerableProperty () {
function requireFunctionName (line 992) | function requireFunctionName () {
function requireInspectSource (line 1018) | function requireInspectSource () {
function requireWeakMapBasicDetection (line 1041) | function requireWeakMapBasicDetection () {
function requireSharedKey (line 1056) | function requireSharedKey () {
function requireHiddenKeys (line 1073) | function requireHiddenKeys () {
function requireInternalState (line 1083) | function requireInternalState () {
function requireMakeBuiltIn (line 1161) | function requireMakeBuiltIn () {
function requireDefineBuiltIn (line 1224) | function requireDefineBuiltIn () {
function requireMathTrunc (line 1262) | function requireMathTrunc () {
function requireToIntegerOrInfinity (line 1281) | function requireToIntegerOrInfinity () {
function requireToAbsoluteIndex (line 1299) | function requireToAbsoluteIndex () {
function requireToLength (line 1320) | function requireToLength () {
function requireLengthOfArrayLike (line 1339) | function requireLengthOfArrayLike () {
function requireArrayIncludes (line 1355) | function requireArrayIncludes () {
function requireObjectKeysInternal (line 1397) | function requireObjectKeysInternal () {
function requireEnumBugKeys (line 1426) | function requireEnumBugKeys () {
function requireObjectGetOwnPropertyNames (line 1444) | function requireObjectGetOwnPropertyNames () {
function requireObjectGetOwnPropertySymbols (line 1465) | function requireObjectGetOwnPropertySymbols () {
function requireOwnKeys (line 1476) | function requireOwnKeys () {
function requireCopyConstructorProperties (line 1499) | function requireCopyConstructorProperties () {
function requireIsForced (line 1524) | function requireIsForced () {
function require_export (line 1555) | function require_export () {
function requireFunctionUncurryThisClause (line 1618) | function requireFunctionUncurryThisClause () {
function requireFunctionBindContext (line 1636) | function requireFunctionBindContext () {
function requireIsArray (line 1658) | function requireIsArray () {
function requireToStringTagSupport (line 1675) | function requireToStringTagSupport () {
function requireClassof (line 1692) | function requireClassof () {
function requireIsConstructor (line 1730) | function requireIsConstructor () {
function requireArraySpeciesConstructor (line 1790) | function requireArraySpeciesConstructor () {
function requireArraySpeciesCreate (line 1821) | function requireArraySpeciesCreate () {
function requireArrayIteration (line 1837) | function requireArrayIteration () {
function requireObjectKeys (line 1921) | function requireObjectKeys () {
function requireObjectDefineProperties (line 1938) | function requireObjectDefineProperties () {
function requireHtml (line 1967) | function requireHtml () {
function requireObjectCreate (line 1979) | function requireObjectCreate () {
function requireAddToUnscopables (line 2072) | function requireAddToUnscopables () {
function requireEs_array_find (line 2100) | function requireEs_array_find () {
function requireArrayMethodIsStrict (line 2134) | function requireArrayMethodIsStrict () {
function requireEs_array_indexOf (line 2151) | function requireEs_array_indexOf () {
function requireObjectAssign (line 2186) | function requireObjectAssign () {
function requireEs_object_assign (line 2251) | function requireEs_object_assign () {
function requireObjectToString (line 2273) | function requireObjectToString () {
function requireEs_object_toString (line 2289) | function requireEs_object_toString () {
function normalizeWheel (line 2316) | function normalizeWheel(event) {
function _class (line 2381) | function _class() {
FILE: src/main/resources/static/assets/bootstrap-table/extensions/group-by-v2/bootstrap-table-group-by.js
function _arrayLikeToArray (line 7) | function _arrayLikeToArray(r, a) {
function _arrayWithHoles (line 12) | function _arrayWithHoles(r) {
function _assertThisInitialized (line 15) | function _assertThisInitialized(e) {
function _callSuper (line 19) | function _callSuper(t, o, e) {
function _classCallCheck (line 22) | function _classCallCheck(a, n) {
function _defineProperties (line 25) | function _defineProperties(e, r) {
function _createClass (line 31) | function _createClass(e, r, t) {
function _createForOfIteratorHelper (line 36) | function _createForOfIteratorHelper(r, e) {
function _get (line 84) | function _get() {
function _getPrototypeOf (line 93) | function _getPrototypeOf(t) {
function _inherits (line 98) | function _inherits(t, e) {
function _isNativeReflectConstruct (line 110) | function _isNativeReflectConstruct() {
function _iterableToArrayLimit (line 118) | function _iterableToArrayLimit(r, l) {
function _nonIterableRest (line 142) | function _nonIterableRest() {
function _possibleConstructorReturn (line 145) | function _possibleConstructorReturn(t, e) {
function _setPrototypeOf (line 150) | function _setPrototypeOf(t, e) {
function _slicedToArray (line 155) | function _slicedToArray(r, e) {
function _superPropBase (line 158) | function _superPropBase(t, o) {
function _superPropGet (line 162) | function _superPropGet(t, o, e, r) {
function _toPrimitive (line 168) | function _toPrimitive(t, r) {
function _toPropertyKey (line 178) | function _toPropertyKey(t) {
function _typeof (line 182) | function _typeof(o) {
function _unsupportedIterableToArray (line 191) | function _unsupportedIterableToArray(r, a) {
function requireGlobalThis (line 206) | function requireGlobalThis () {
function requireFails (line 232) | function requireFails () {
function requireDescriptors (line 248) | function requireDescriptors () {
function requireFunctionBindNative (line 264) | function requireFunctionBindNative () {
function requireFunctionCall (line 281) | function requireFunctionCall () {
function requireObjectPropertyIsEnumerable (line 298) | function requireObjectPropertyIsEnumerable () {
function requireCreatePropertyDescriptor (line 320) | function requireCreatePropertyDescriptor () {
function requireFunctionUncurryThis (line 337) | function requireFunctionUncurryThis () {
function requireClassofRaw (line 358) | function requireClassofRaw () {
function requireIndexedObject (line 375) | function requireIndexedObject () {
function requireIsNullOrUndefined (line 399) | function requireIsNullOrUndefined () {
function requireRequireObjectCoercible (line 413) | function requireRequireObjectCoercible () {
function requireToIndexedObject (line 432) | function requireToIndexedObject () {
function requireIsCallable (line 448) | function requireIsCallable () {
function requireIsObject (line 468) | function requireIsObject () {
function requireGetBuiltIn (line 482) | function requireGetBuiltIn () {
function requireObjectIsPrototypeOf (line 501) | function requireObjectIsPrototypeOf () {
function requireEnvironmentUserAgent (line 513) | function requireEnvironmentUserAgent () {
function requireEnvironmentV8Version (line 528) | function requireEnvironmentV8Version () {
function requireSymbolConstructorDetection (line 564) | function requireSymbolConstructorDetection () {
function requireUseSymbolAsUid (line 591) | function requireUseSymbolAsUid () {
function requireIsSymbol (line 606) | function requireIsSymbol () {
function requireTryToString (line 628) | function requireTryToString () {
function requireACallable (line 646) | function requireACallable () {
function requireGetMethod (line 665) | function requ
Copy disabled (too large)
Download .json
Condensed preview — 251 files, each showing path, character count, and a content snippet. Download the .json file for the full structured content (10,496K chars).
[
{
"path": ".editorconfig",
"chars": 739,
"preview": "\n\n# EditorConfig is awesome: https://EditorConfig.org\n\n# top-most EditorConfig file\nroot = true\n\n# Unix-style newlines w"
},
{
"path": ".gitattributes",
"chars": 66,
"preview": "*.js linguist-language=java\n*.html linguist-language=java\n\ntext=lf"
},
{
"path": ".github/dependabot.yml",
"chars": 527,
"preview": "# To get started with Dependabot version updates, you'll need to specify which\n# package ecosystems to update and where "
},
{
"path": ".github/workflows/maven.yml",
"chars": 1211,
"preview": "# This workflow will build a Java project with Maven, and cache/restore any dependencies to improve the workflow executi"
},
{
"path": ".gitignore",
"chars": 1913,
"preview": "######################\r\n# Project Specific\r\n######################\r\n/target/www/**\r\n\r\n######################\r\n# Node\r\n##"
},
{
"path": "LICENSE",
"chars": 1064,
"preview": "MIT License\n\nCopyright (c) 2018 mission\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof"
},
{
"path": "README.md",
"chars": 2237,
"preview": "\n## SpringBoot 4.0+ oauth2 server\n\n#### oauth2 openid 端点\n````\nGet /.well-known/openid-configuration\n````\n\n#### 支持的授权模式gr"
},
{
"path": "maven-version-rules.xml",
"chars": 501,
"preview": "<ruleset comparisonMethod=\"maven\"\n xmlns=\"http://mojo.codehaus.org/versions-maven-plugin/rule/2.0.0\"\n xm"
},
{
"path": "pom.xml",
"chars": 7481,
"preview": "<project xmlns=\"http://maven.apache.org/POM/4.0.0\"\n xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n "
},
{
"path": "src/main/java/com/revengemission/sso/oauth2/server/ApplicationStartedEventListener.java",
"chars": 648,
"preview": "package com.revengemission.sso.oauth2.server;\n\nimport org.springframework.boot.context.event.ApplicationStartedEvent;\nim"
},
{
"path": "src/main/java/com/revengemission/sso/oauth2/server/Oauth2ServerApplication.java",
"chars": 572,
"preview": "package com.revengemission.sso.oauth2.server;\n\nimport org.springframework.boot.SpringApplication;\nimport org.springframe"
},
{
"path": "src/main/java/com/revengemission/sso/oauth2/server/ServerExceptionHandler.java",
"chars": 3978,
"preview": "package com.revengemission.sso.oauth2.server;\n\nimport com.revengemission.sso.oauth2.server.utils.JsonUtil;\nimport jakart"
},
{
"path": "src/main/java/com/revengemission/sso/oauth2/server/WebRequestLogAspect.java",
"chars": 5402,
"preview": "package com.revengemission.sso.oauth2.server;\n\nimport com.revengemission.sso.oauth2.server.utils.ClientIpUtil;\nimport co"
},
{
"path": "src/main/java/com/revengemission/sso/oauth2/server/config/AuthorizationServerConfig.java",
"chars": 5102,
"preview": "package com.revengemission.sso.oauth2.server.config;\n\nimport com.nimbusds.jose.jwk.JWKSet;\nimport com.nimbusds.jose.jwk."
},
{
"path": "src/main/java/com/revengemission/sso/oauth2/server/config/CachesEnum.java",
"chars": 898,
"preview": "package com.revengemission.sso.oauth2.server.config;\n\npublic enum CachesEnum {\n /**\n * 使用默认值\n */\n DefaultC"
},
{
"path": "src/main/java/com/revengemission/sso/oauth2/server/config/CaffeineCacheConfiguration.java",
"chars": 1211,
"preview": "package com.revengemission.sso.oauth2.server.config;\n\nimport com.github.benmanes.caffeine.cache.Caffeine;\nimport org.spr"
},
{
"path": "src/main/java/com/revengemission/sso/oauth2/server/config/CustomAccessDeniedHandler.java",
"chars": 2321,
"preview": "package com.revengemission.sso.oauth2.server.config;\n\nimport com.revengemission.sso.oauth2.server.domain.GlobalConstant;"
},
{
"path": "src/main/java/com/revengemission/sso/oauth2/server/config/CustomAuthenticationFailureHandler.java",
"chars": 3772,
"preview": "package com.revengemission.sso.oauth2.server.config;\n\nimport com.revengemission.sso.oauth2.server.domain.GlobalConstant;"
},
{
"path": "src/main/java/com/revengemission/sso/oauth2/server/config/CustomAuthenticationProvider.java",
"chars": 4850,
"preview": "package com.revengemission.sso.oauth2.server.config;\n\nimport com.revengemission.sso.oauth2.server.domain.GlobalConstant;"
},
{
"path": "src/main/java/com/revengemission/sso/oauth2/server/config/CustomAuthenticationSuccessHandler.java",
"chars": 4635,
"preview": "package com.revengemission.sso.oauth2.server.config;\n\nimport com.revengemission.sso.oauth2.server.domain.GlobalConstant;"
},
{
"path": "src/main/java/com/revengemission/sso/oauth2/server/config/CustomCorsConfiguration.java",
"chars": 1445,
"preview": "package com.revengemission.sso.oauth2.server.config;\n\nimport org.springframework.context.annotation.Bean;\nimport org.spr"
},
{
"path": "src/main/java/com/revengemission/sso/oauth2/server/config/CustomWebAuthenticationDetails.java",
"chars": 1083,
"preview": "package com.revengemission.sso.oauth2.server.config;\n\nimport com.revengemission.sso.oauth2.server.domain.GlobalConstant;"
},
{
"path": "src/main/java/com/revengemission/sso/oauth2/server/config/DefaultSecurityConfig.java",
"chars": 4057,
"preview": "package com.revengemission.sso.oauth2.server.config;\n\nimport com.revengemission.sso.oauth2.server.domain.RoleEnum;\nimpor"
},
{
"path": "src/main/java/com/revengemission/sso/oauth2/server/config/DeviceClientAuthenticationConverter.java",
"chars": 2759,
"preview": "package com.revengemission.sso.oauth2.server.config;\n\nimport jakarta.servlet.http.HttpServletRequest;\nimport org.jspecif"
},
{
"path": "src/main/java/com/revengemission/sso/oauth2/server/config/DeviceClientAuthenticationProvider.java",
"chars": 3785,
"preview": "package com.revengemission.sso.oauth2.server.config;\n\n\nimport org.slf4j.Logger;\nimport org.slf4j.LoggerFactory;\nimport o"
},
{
"path": "src/main/java/com/revengemission/sso/oauth2/server/config/DeviceClientAuthenticationToken.java",
"chars": 1249,
"preview": "package com.revengemission.sso.oauth2.server.config;\n\nimport java.util.Map;\n\nimport org.jspecify.annotations.Nullable;\ni"
},
{
"path": "src/main/java/com/revengemission/sso/oauth2/server/config/FederatedIdentityAuthenticationSuccessHandler.java",
"chars": 2152,
"preview": "package com.revengemission.sso.oauth2.server.config;\n\n// tag::imports[]\n\nimport jakarta.servlet.ServletException;\nimport"
},
{
"path": "src/main/java/com/revengemission/sso/oauth2/server/config/JdbcClientRegistrationRepository.java",
"chars": 1632,
"preview": "package com.revengemission.sso.oauth2.server.config;\n\nimport com.revengemission.sso.oauth2.server.persistence.entity.Oau"
},
{
"path": "src/main/java/com/revengemission/sso/oauth2/server/config/SmsCodeTokenGranter.java",
"chars": 3262,
"preview": "//package com.revengemission.sso.oauth2.server.config;\n//\n//import com.revengemission.sso.oauth2.server.service.CaptchaS"
},
{
"path": "src/main/java/com/revengemission/sso/oauth2/server/config/TokenCustomizerConfig.java",
"chars": 1250,
"preview": "package com.revengemission.sso.oauth2.server.config;\n\nimport org.springframework.context.annotation.Bean;\nimport org.spr"
},
{
"path": "src/main/java/com/revengemission/sso/oauth2/server/config/WeChatMiniProgramTokenGranter.java",
"chars": 5966,
"preview": "//package com.revengemission.sso.oauth2.server.config;\n//\n//import com.fasterxml.jackson.core.type.TypeReference;\n//impo"
},
{
"path": "src/main/java/com/revengemission/sso/oauth2/server/controller/AccessConfirmationController.java",
"chars": 3639,
"preview": "//package com.revengemission.sso.oauth2.server.controller;\n//\n//import com.revengemission.sso.oauth2.server.domain.Oauth"
},
{
"path": "src/main/java/com/revengemission/sso/oauth2/server/controller/CaptchaController.java",
"chars": 3512,
"preview": "package com.revengemission.sso.oauth2.server.controller;\n\nimport cloud.tianai.captcha.application.ImageCaptchaApplicatio"
},
{
"path": "src/main/java/com/revengemission/sso/oauth2/server/controller/ManageClientController.java",
"chars": 6046,
"preview": "package com.revengemission.sso.oauth2.server.controller;\n\nimport com.revengemission.sso.oauth2.server.domain.GlobalConst"
},
{
"path": "src/main/java/com/revengemission/sso/oauth2/server/controller/ManageUserController.java",
"chars": 5855,
"preview": "package com.revengemission.sso.oauth2.server.controller;\n\nimport com.revengemission.sso.oauth2.server.domain.GlobalConst"
},
{
"path": "src/main/java/com/revengemission/sso/oauth2/server/controller/ProfileController.java",
"chars": 5826,
"preview": "package com.revengemission.sso.oauth2.server.controller;\n\nimport com.fasterxml.jackson.annotation.JsonFormat;\nimport com"
},
{
"path": "src/main/java/com/revengemission/sso/oauth2/server/controller/SignInAndUpController.java",
"chars": 4292,
"preview": "package com.revengemission.sso.oauth2.server.controller;\n\nimport com.revengemission.sso.oauth2.server.domain.*;\nimport c"
},
{
"path": "src/main/java/com/revengemission/sso/oauth2/server/domain/AlreadyExistsException.java",
"chars": 458,
"preview": "package com.revengemission.sso.oauth2.server.domain;\r\n\r\npublic class AlreadyExistsException extends RuntimeException {\r\n"
},
{
"path": "src/main/java/com/revengemission/sso/oauth2/server/domain/AlreadyExpiredException.java",
"chars": 467,
"preview": "package com.revengemission.sso.oauth2.server.domain;\r\n\r\npublic class AlreadyExpiredException extends RuntimeException {\r"
},
{
"path": "src/main/java/com/revengemission/sso/oauth2/server/domain/BaseDomain.java",
"chars": 634,
"preview": "\npackage com.revengemission.sso.oauth2.server.domain;\n\nimport com.fasterxml.jackson.annotation.JsonInclude;\nimport lombo"
},
{
"path": "src/main/java/com/revengemission/sso/oauth2/server/domain/EntityNotFoundException.java",
"chars": 467,
"preview": "package com.revengemission.sso.oauth2.server.domain;\r\n\r\npublic class EntityNotFoundException extends RuntimeException {\r"
},
{
"path": "src/main/java/com/revengemission/sso/oauth2/server/domain/GenderEnum.java",
"chars": 400,
"preview": "package com.revengemission.sso.oauth2.server.domain;\n\npublic enum GenderEnum {\n\n /**\n * 男\n */\n MALE(\"男\"),\n"
},
{
"path": "src/main/java/com/revengemission/sso/oauth2/server/domain/GlobalConstant.java",
"chars": 726,
"preview": "package com.revengemission.sso.oauth2.server.domain;\n\npublic class GlobalConstant {\n\n /**\n * 返回成功\n */\n pub"
},
{
"path": "src/main/java/com/revengemission/sso/oauth2/server/domain/JsonObjects.java",
"chars": 862,
"preview": "package com.revengemission.sso.oauth2.server.domain;\r\n\r\nimport java.io.Serializable;\r\nimport java.util.ArrayList;\r\nimpor"
},
{
"path": "src/main/java/com/revengemission/sso/oauth2/server/domain/LoginHistory.java",
"chars": 563,
"preview": "package com.revengemission.sso.oauth2.server.domain;\r\n\r\nimport com.fasterxml.jackson.annotation.JsonInclude;\r\n\r\nimport l"
},
{
"path": "src/main/java/com/revengemission/sso/oauth2/server/domain/NotImplementException.java",
"chars": 460,
"preview": "package com.revengemission.sso.oauth2.server.domain;\r\n\r\npublic class NotImplementException extends RuntimeException{\r\n "
},
{
"path": "src/main/java/com/revengemission/sso/oauth2/server/domain/OAuth2Exception.java",
"chars": 1135,
"preview": "package com.revengemission.sso.oauth2.server.domain;\n\nimport org.springframework.http.HttpStatus;\n\npublic class OAuth2Ex"
},
{
"path": "src/main/java/com/revengemission/sso/oauth2/server/domain/OauthClient.java",
"chars": 1020,
"preview": "package com.revengemission.sso.oauth2.server.domain;\n\nimport com.fasterxml.jackson.annotation.JsonInclude;\nimport lombok"
},
{
"path": "src/main/java/com/revengemission/sso/oauth2/server/domain/ParameterException.java",
"chars": 451,
"preview": "package com.revengemission.sso.oauth2.server.domain;\r\n\r\npublic class ParameterException extends RuntimeException {\r\n "
},
{
"path": "src/main/java/com/revengemission/sso/oauth2/server/domain/ResponseResult.java",
"chars": 2633,
"preview": "\npackage com.revengemission.sso.oauth2.server.domain;\n\nimport com.fasterxml.jackson.annotation.JsonInclude;\n\nimport java"
},
{
"path": "src/main/java/com/revengemission/sso/oauth2/server/domain/Role.java",
"chars": 416,
"preview": "package com.revengemission.sso.oauth2.server.domain;\n\nimport com.fasterxml.jackson.annotation.JsonInclude;\nimport lombok"
},
{
"path": "src/main/java/com/revengemission/sso/oauth2/server/domain/RoleEnum.java",
"chars": 416,
"preview": "package com.revengemission.sso.oauth2.server.domain;\n\npublic enum RoleEnum {\n\n /**\n * 普通用户\n */\n ROLE_USER("
},
{
"path": "src/main/java/com/revengemission/sso/oauth2/server/domain/ScopeDefinition.java",
"chars": 588,
"preview": "package com.revengemission.sso.oauth2.server.domain;\n\npublic class ScopeDefinition extends BaseDomain {\n /**\n *\n "
},
{
"path": "src/main/java/com/revengemission/sso/oauth2/server/domain/UserAccount.java",
"chars": 1124,
"preview": "package com.revengemission.sso.oauth2.server.domain;\n\nimport com.fasterxml.jackson.annotation.JsonIgnore;\nimport com.fas"
},
{
"path": "src/main/java/com/revengemission/sso/oauth2/server/domain/UserInfo.java",
"chars": 1482,
"preview": "package com.revengemission.sso.oauth2.server.domain;\n\nimport org.springframework.security.core.GrantedAuthority;\nimport "
},
{
"path": "src/main/java/com/revengemission/sso/oauth2/server/domain/VerificationCodeException.java",
"chars": 469,
"preview": "package com.revengemission.sso.oauth2.server.domain;\r\n\r\nimport org.springframework.security.core.AuthenticationException"
},
{
"path": "src/main/java/com/revengemission/sso/oauth2/server/jose/Jwks.java",
"chars": 1668,
"preview": "package com.revengemission.sso.oauth2.server.jose;\n\nimport com.nimbusds.jose.jwk.Curve;\nimport com.nimbusds.jose.jwk.ECK"
},
{
"path": "src/main/java/com/revengemission/sso/oauth2/server/jose/KeyGeneratorUtils.java",
"chars": 2434,
"preview": "package com.revengemission.sso.oauth2.server.jose;\n\nimport javax.crypto.KeyGenerator;\nimport javax.crypto.SecretKey;\nimp"
},
{
"path": "src/main/java/com/revengemission/sso/oauth2/server/mapper/BaseMapper.java",
"chars": 433,
"preview": "package com.revengemission.sso.oauth2.server.mapper;\n\nimport org.mapstruct.Named;\n\npublic interface BaseMapper {\n // "
},
{
"path": "src/main/java/com/revengemission/sso/oauth2/server/mapper/LoginHistoryMapper.java",
"chars": 831,
"preview": "package com.revengemission.sso.oauth2.server.mapper;\n\nimport com.revengemission.sso.oauth2.server.domain.LoginHistory;\ni"
},
{
"path": "src/main/java/com/revengemission/sso/oauth2/server/mapper/OauthClientMapper.java",
"chars": 822,
"preview": "package com.revengemission.sso.oauth2.server.mapper;\n\nimport com.revengemission.sso.oauth2.server.domain.OauthClient;\nim"
},
{
"path": "src/main/java/com/revengemission/sso/oauth2/server/mapper/RoleMapper.java",
"chars": 759,
"preview": "package com.revengemission.sso.oauth2.server.mapper;\n\nimport com.revengemission.sso.oauth2.server.domain.Role;\nimport co"
},
{
"path": "src/main/java/com/revengemission/sso/oauth2/server/mapper/ScopeDefinitionMapper.java",
"chars": 846,
"preview": "package com.revengemission.sso.oauth2.server.mapper;\n\nimport com.revengemission.sso.oauth2.server.domain.ScopeDefinition"
},
{
"path": "src/main/java/com/revengemission/sso/oauth2/server/mapper/UserAccountMapper.java",
"chars": 918,
"preview": "package com.revengemission.sso.oauth2.server.mapper;\n\nimport com.revengemission.sso.oauth2.server.domain.UserAccount;\nim"
},
{
"path": "src/main/java/com/revengemission/sso/oauth2/server/persistence/entity/BaseEntity.java",
"chars": 2537,
"preview": "package com.revengemission.sso.oauth2.server.persistence.entity;\n\nimport jakarta.persistence.Column;\nimport jakarta.pers"
},
{
"path": "src/main/java/com/revengemission/sso/oauth2/server/persistence/entity/LoginHistoryEntity.java",
"chars": 1223,
"preview": "package com.revengemission.sso.oauth2.server.persistence.entity;\n\nimport jakarta.persistence.Column;\nimport jakarta.pers"
},
{
"path": "src/main/java/com/revengemission/sso/oauth2/server/persistence/entity/Oauth2AuthorizationConsent.java",
"chars": 1099,
"preview": "package com.revengemission.sso.oauth2.server.persistence.entity;\n\nimport jakarta.persistence.Entity;\nimport jakarta.pers"
},
{
"path": "src/main/java/com/revengemission/sso/oauth2/server/persistence/entity/OauthClientEntity.java",
"chars": 3991,
"preview": "package com.revengemission.sso.oauth2.server.persistence.entity;\n\nimport jakarta.persistence.Column;\nimport jakarta.pers"
},
{
"path": "src/main/java/com/revengemission/sso/oauth2/server/persistence/entity/RoleEntity.java",
"chars": 595,
"preview": "package com.revengemission.sso.oauth2.server.persistence.entity;\n\nimport jakarta.persistence.Column;\nimport jakarta.pers"
},
{
"path": "src/main/java/com/revengemission/sso/oauth2/server/persistence/entity/ScopeDefinitionEntity.java",
"chars": 800,
"preview": "package com.revengemission.sso.oauth2.server.persistence.entity;\n\nimport jakarta.persistence.Entity;\nimport jakarta.pers"
},
{
"path": "src/main/java/com/revengemission/sso/oauth2/server/persistence/entity/ThirdPartyAccountEntity.java",
"chars": 2200,
"preview": "package com.revengemission.sso.oauth2.server.persistence.entity;\n\nimport jakarta.persistence.*;\n\nimport java.util.ArrayL"
},
{
"path": "src/main/java/com/revengemission/sso/oauth2/server/persistence/entity/UserAccountEntity.java",
"chars": 3795,
"preview": "package com.revengemission.sso.oauth2.server.persistence.entity;\n\nimport jakarta.persistence.*;\n\nimport java.time.LocalD"
},
{
"path": "src/main/java/com/revengemission/sso/oauth2/server/persistence/repository/LoginHistoryRepository.java",
"chars": 479,
"preview": "package com.revengemission.sso.oauth2.server.persistence.repository;\n\nimport com.revengemission.sso.oauth2.server.persis"
},
{
"path": "src/main/java/com/revengemission/sso/oauth2/server/persistence/repository/OauthClientRepository.java",
"chars": 360,
"preview": "package com.revengemission.sso.oauth2.server.persistence.repository;\n\nimport com.revengemission.sso.oauth2.server.persis"
},
{
"path": "src/main/java/com/revengemission/sso/oauth2/server/persistence/repository/RoleRepository.java",
"chars": 332,
"preview": "package com.revengemission.sso.oauth2.server.persistence.repository;\n\nimport com.revengemission.sso.oauth2.server.persis"
},
{
"path": "src/main/java/com/revengemission/sso/oauth2/server/persistence/repository/ScopeDefinitionRepository.java",
"chars": 370,
"preview": "package com.revengemission.sso.oauth2.server.persistence.repository;\n\nimport com.revengemission.sso.oauth2.server.persis"
},
{
"path": "src/main/java/com/revengemission/sso/oauth2/server/persistence/repository/ThirdPartyAccountRepository.java",
"chars": 438,
"preview": "package com.revengemission.sso.oauth2.server.persistence.repository;\n\nimport com.revengemission.sso.oauth2.server.persis"
},
{
"path": "src/main/java/com/revengemission/sso/oauth2/server/persistence/repository/UserAccountRepository.java",
"chars": 583,
"preview": "package com.revengemission.sso.oauth2.server.persistence.repository;\n\nimport com.revengemission.sso.oauth2.server.persis"
},
{
"path": "src/main/java/com/revengemission/sso/oauth2/server/schedule/Task.java",
"chars": 368,
"preview": "package com.revengemission.sso.oauth2.server.schedule;\n\nimport org.springframework.scheduling.annotation.Scheduled;\nimpo"
},
{
"path": "src/main/java/com/revengemission/sso/oauth2/server/service/CaptchaService.java",
"chars": 415,
"preview": "package com.revengemission.sso.oauth2.server.service;\n\nimport com.revengemission.sso.oauth2.server.config.CachesEnum;\n\np"
},
{
"path": "src/main/java/com/revengemission/sso/oauth2/server/service/CommonServiceInterface.java",
"chars": 1181,
"preview": "package com.revengemission.sso.oauth2.server.service;\n\n\nimport com.revengemission.sso.oauth2.server.domain.AlreadyExists"
},
{
"path": "src/main/java/com/revengemission/sso/oauth2/server/service/LoginHistoryService.java",
"chars": 587,
"preview": "package com.revengemission.sso.oauth2.server.service;\n\nimport com.revengemission.sso.oauth2.server.domain.JsonObjects;\ni"
},
{
"path": "src/main/java/com/revengemission/sso/oauth2/server/service/OauthClientService.java",
"chars": 384,
"preview": "package com.revengemission.sso.oauth2.server.service;\n\nimport com.revengemission.sso.oauth2.server.domain.NotImplementEx"
},
{
"path": "src/main/java/com/revengemission/sso/oauth2/server/service/RoleService.java",
"chars": 386,
"preview": "package com.revengemission.sso.oauth2.server.service;\n\nimport com.revengemission.sso.oauth2.server.domain.NotImplementEx"
},
{
"path": "src/main/java/com/revengemission/sso/oauth2/server/service/ScopeDefinitionService.java",
"chars": 424,
"preview": "package com.revengemission.sso.oauth2.server.service;\n\nimport com.revengemission.sso.oauth2.server.domain.NotImplementEx"
},
{
"path": "src/main/java/com/revengemission/sso/oauth2/server/service/UserAccountService.java",
"chars": 887,
"preview": "package com.revengemission.sso.oauth2.server.service;\n\nimport com.revengemission.sso.oauth2.server.domain.EntityNotFound"
},
{
"path": "src/main/java/com/revengemission/sso/oauth2/server/service/impl/CaptchaServiceImpl.java",
"chars": 2402,
"preview": "package com.revengemission.sso.oauth2.server.service.impl;\n\nimport com.revengemission.sso.oauth2.server.config.CachesEnu"
},
{
"path": "src/main/java/com/revengemission/sso/oauth2/server/service/impl/ClientDetailsServiceImpl.java",
"chars": 5221,
"preview": "//package com.revengemission.sso.oauth2.server.service.impl;\n//\n//import com.revengemission.sso.oauth2.server.config.Cac"
},
{
"path": "src/main/java/com/revengemission/sso/oauth2/server/service/impl/LoginHistoryServiceImpl.java",
"chars": 2499,
"preview": "package com.revengemission.sso.oauth2.server.service.impl;\n\nimport com.revengemission.sso.oauth2.server.domain.AlreadyEx"
},
{
"path": "src/main/java/com/revengemission/sso/oauth2/server/service/impl/OauthClientServiceImpl.java",
"chars": 4647,
"preview": "package com.revengemission.sso.oauth2.server.service.impl;\n\nimport com.revengemission.sso.oauth2.server.domain.AlreadyEx"
},
{
"path": "src/main/java/com/revengemission/sso/oauth2/server/service/impl/OidcUserInfoService.java",
"chars": 2323,
"preview": "//package com.revengemission.sso.oauth2.server.service.impl;\n//\n//import org.springframework.security.oauth2.core.oidc.O"
},
{
"path": "src/main/java/com/revengemission/sso/oauth2/server/service/impl/RegisteredClientRepositoryImpl.java",
"chars": 4304,
"preview": "package com.revengemission.sso.oauth2.server.service.impl;\n\nimport com.revengemission.sso.oauth2.server.config.CachesEnu"
},
{
"path": "src/main/java/com/revengemission/sso/oauth2/server/service/impl/RoleServiceImpl.java",
"chars": 1054,
"preview": "package com.revengemission.sso.oauth2.server.service.impl;\n\nimport com.revengemission.sso.oauth2.server.domain.NotImplem"
},
{
"path": "src/main/java/com/revengemission/sso/oauth2/server/service/impl/ScopeDefinitionServiceImpl.java",
"chars": 1218,
"preview": "package com.revengemission.sso.oauth2.server.service.impl;\n\nimport com.revengemission.sso.oauth2.server.domain.NotImplem"
},
{
"path": "src/main/java/com/revengemission/sso/oauth2/server/service/impl/UserAccountServiceImpl.java",
"chars": 9270,
"preview": "package com.revengemission.sso.oauth2.server.service.impl;\n\nimport com.revengemission.sso.oauth2.server.domain.AlreadyEx"
},
{
"path": "src/main/java/com/revengemission/sso/oauth2/server/service/impl/UserDetailsServiceImpl.java",
"chars": 2048,
"preview": "package com.revengemission.sso.oauth2.server.service.impl;\n\nimport com.revengemission.sso.oauth2.server.persistence.enti"
},
{
"path": "src/main/java/com/revengemission/sso/oauth2/server/utils/BigIntegerUtils.java",
"chars": 891,
"preview": "package com.revengemission.sso.oauth2.server.utils;\n\nimport java.math.BigInteger;\n\npublic class BigIntegerUtils {\n pu"
},
{
"path": "src/main/java/com/revengemission/sso/oauth2/server/utils/CheckPasswordStrength.java",
"chars": 8215,
"preview": "package com.revengemission.sso.oauth2.server.utils;\n\nimport org.apache.commons.lang3.StringUtils;\n\n/**\n * 检测密码强度\n * refe"
},
{
"path": "src/main/java/com/revengemission/sso/oauth2/server/utils/ClientIpUtil.java",
"chars": 2610,
"preview": "package com.revengemission.sso.oauth2.server.utils;\n\n\nimport jakarta.servlet.http.HttpServletRequest;\n\npublic class Clie"
},
{
"path": "src/main/java/com/revengemission/sso/oauth2/server/utils/DateUtil.java",
"chars": 822,
"preview": "package com.revengemission.sso.oauth2.server.utils;\n\nimport java.time.LocalDate;\nimport java.time.LocalDateTime;\nimport "
},
{
"path": "src/main/java/com/revengemission/sso/oauth2/server/utils/JsonUtil.java",
"chars": 6721,
"preview": "package com.revengemission.sso.oauth2.server.utils;\n\n\nimport com.fasterxml.jackson.annotation.JsonAutoDetect;\nimport com"
},
{
"path": "src/main/resources/application.properties",
"chars": 1799,
"preview": "#项目启动端口,默认35080\nserver.port=35080\nserver.servlet.context-path=/\n\n#修改默认的JSESSIONID为oauth2_session_id\nserver.servlet.sessi"
},
{
"path": "src/main/resources/db/changelog/db.changelog-master.xml",
"chars": 3032,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<databaseChangeLog xmlns=\"http://www.liquibase.org/xml/ns/dbchangelog\"\n "
},
{
"path": "src/main/resources/db/changelog/login_history_entity_create.xml",
"chars": 2043,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<databaseChangeLog xmlns=\"http://www.liquibase.org/xml/ns/dbchangelog\"\n "
},
{
"path": "src/main/resources/db/changelog/oauth2_authorization_consent_create.xml",
"chars": 1135,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<databaseChangeLog xmlns=\"http://www.liquibase.org/xml/ns/dbchangelog\"\n "
},
{
"path": "src/main/resources/db/changelog/oauth2_authorization_create.xml",
"chars": 3388,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<databaseChangeLog xmlns=\"http://www.liquibase.org/xml/ns/dbchangelog\"\n "
},
{
"path": "src/main/resources/db/changelog/oauth_client_entity_create.xml",
"chars": 2830,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<databaseChangeLog xmlns=\"http://www.liquibase.org/xml/ns/dbchangelog\"\n "
},
{
"path": "src/main/resources/db/changelog/oauth_client_entity_init.xml",
"chars": 1376,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<databaseChangeLog xmlns=\"http://www.liquibase.org/xml/ns/dbchangelog\"\n "
},
{
"path": "src/main/resources/db/changelog/role_entity_create.xml",
"chars": 1885,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<databaseChangeLog xmlns=\"http://www.liquibase.org/xml/ns/dbchangelog\"\n "
},
{
"path": "src/main/resources/db/changelog/role_entity_init.xml",
"chars": 954,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<databaseChangeLog xmlns=\"http://www.liquibase.org/xml/ns/dbchangelog\"\n "
},
{
"path": "src/main/resources/db/changelog/scope_definition_entity_create.xml",
"chars": 1872,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<databaseChangeLog xmlns=\"http://www.liquibase.org/xml/ns/dbchangelog\"\n "
},
{
"path": "src/main/resources/db/changelog/scope_definition_entity_init.xml",
"chars": 788,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<databaseChangeLog xmlns=\"http://www.liquibase.org/xml/ns/dbchangelog\"\n "
},
{
"path": "src/main/resources/db/changelog/third_pargy_entity_create.xml",
"chars": 2270,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<databaseChangeLog xmlns=\"http://www.liquibase.org/xml/ns/dbchangelog\"\n "
},
{
"path": "src/main/resources/db/changelog/third_party_role_entity_create.xml",
"chars": 2092,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<databaseChangeLog xmlns=\"http://www.liquibase.org/xml/ns/dbchangelog\"\n "
},
{
"path": "src/main/resources/db/changelog/user_account_entity_create.xml",
"chars": 2689,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<databaseChangeLog xmlns=\"http://www.liquibase.org/xml/ns/dbchangelog\"\n "
},
{
"path": "src/main/resources/db/changelog/user_account_entity_init.xml",
"chars": 1366,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<databaseChangeLog xmlns=\"http://www.liquibase.org/xml/ns/dbchangelog\"\n "
},
{
"path": "src/main/resources/db/changelog/user_account_role_entity_create.xml",
"chars": 2053,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<databaseChangeLog xmlns=\"http://www.liquibase.org/xml/ns/dbchangelog\"\n "
},
{
"path": "src/main/resources/db/changelog/user_account_role_entity_init.xml",
"chars": 1101,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<databaseChangeLog xmlns=\"http://www.liquibase.org/xml/ns/dbchangelog\"\n "
},
{
"path": "src/main/resources/messages.properties",
"chars": 426,
"preview": "AbstractAccessDecisionManager.accessDenied=访问被拒绝\nAbstractUserDetailsAuthenticationProvider.badCredentials=用户名和密码不匹配\nAbst"
},
{
"path": "src/main/resources/static/assets/bootstrap/css/bootstrap-grid.css",
"chars": 70329,
"preview": "/*!\n * Bootstrap Grid v5.3.2 (https://getbootstrap.com/)\n * Copyright 2011-2023 The Bootstrap Authors\n * Licensed under "
},
{
"path": "src/main/resources/static/assets/bootstrap/css/bootstrap-grid.rtl.css",
"chars": 70403,
"preview": "/*!\n * Bootstrap Grid v5.3.2 (https://getbootstrap.com/)\n * Copyright 2011-2023 The Bootstrap Authors\n * Licensed under "
},
{
"path": "src/main/resources/static/assets/bootstrap/css/bootstrap-reboot.css",
"chars": 12065,
"preview": "/*!\n * Bootstrap Reboot v5.3.2 (https://getbootstrap.com/)\n * Copyright 2011-2023 The Bootstrap Authors\n * Licensed unde"
},
{
"path": "src/main/resources/static/assets/bootstrap/css/bootstrap-reboot.rtl.css",
"chars": 12058,
"preview": "/*!\n * Bootstrap Reboot v5.3.2 (https://getbootstrap.com/)\n * Copyright 2011-2023 The Bootstrap Authors\n * Licensed unde"
},
{
"path": "src/main/resources/static/assets/bootstrap/css/bootstrap-utilities.css",
"chars": 107823,
"preview": "/*!\n * Bootstrap Utilities v5.3.2 (https://getbootstrap.com/)\n * Copyright 2011-2023 The Bootstrap Authors\n * Licensed u"
},
{
"path": "src/main/resources/static/assets/bootstrap/css/bootstrap-utilities.rtl.css",
"chars": 107691,
"preview": "/*!\n * Bootstrap Utilities v5.3.2 (https://getbootstrap.com/)\n * Copyright 2011-2023 The Bootstrap Authors\n * Licensed u"
},
{
"path": "src/main/resources/static/assets/bootstrap/css/bootstrap.css",
"chars": 280810,
"preview": "@charset \"UTF-8\";\n/*!\n * Bootstrap v5.3.2 (https://getbootstrap.com/)\n * Copyright 2011-2023 The Bootstrap Authors\n * L"
},
{
"path": "src/main/resources/static/assets/bootstrap/css/bootstrap.rtl.css",
"chars": 280389,
"preview": "@charset \"UTF-8\";\n/*!\n * Bootstrap v5.3.2 (https://getbootstrap.com/)\n * Copyright 2011-2023 The Bootstrap Authors\n * L"
},
{
"path": "src/main/resources/static/assets/bootstrap/js/bootstrap.bundle.js",
"chars": 207725,
"preview": "/*!\n * Bootstrap v5.3.2 (https://getbootstrap.com/)\n * Copyright 2011-2023 The Bootstrap Authors (https://github.com/t"
},
{
"path": "src/main/resources/static/assets/bootstrap/js/bootstrap.esm.js",
"chars": 135747,
"preview": "/*!\n * Bootstrap v5.3.2 (https://getbootstrap.com/)\n * Copyright 2011-2023 The Bootstrap Authors (https://github.com/t"
},
{
"path": "src/main/resources/static/assets/bootstrap/js/bootstrap.js",
"chars": 145313,
"preview": "/*!\n * Bootstrap v5.3.2 (https://getbootstrap.com/)\n * Copyright 2011-2023 The Bootstrap Authors (https://github.com/t"
},
{
"path": "src/main/resources/static/assets/bootstrap-icons/bootstrap-icons.css",
"chars": 99556,
"preview": "/*!\n * Bootstrap Icons v1.13.1 (https://icons.getbootstrap.com/)\n * Copyright 2019-2024 The Bootstrap Authors\n * License"
},
{
"path": "src/main/resources/static/assets/bootstrap-icons/bootstrap-icons.json",
"chars": 53043,
"preview": "{\n \"123\": 63103,\n \"alarm-fill\": 61697,\n \"alarm\": 61698,\n \"align-bottom\": 61699,\n \"align-center\": 61700,\n \"align-en"
},
{
"path": "src/main/resources/static/assets/bootstrap-icons/bootstrap-icons.scss",
"chars": 58496,
"preview": "/*!\n * Bootstrap Icons v1.13.1 (https://icons.getbootstrap.com/)\n * Copyright 2019-2024 The Bootstrap Authors\n * License"
},
{
"path": "src/main/resources/static/assets/bootstrap-table/bootstrap-table-locale-all.js",
"chars": 345739,
"preview": "(function (global, factory) {\n\ttypeof exports === 'object' && typeof module !== 'undefined' ? factory(require('jquery'))"
},
{
"path": "src/main/resources/static/assets/bootstrap-table/bootstrap-table-vue.esm.js",
"chars": 5591,
"preview": "//\n//\n//\n//\n\nconst $ = window.jQuery;\nconst deepCopy = arg => {\n if (arg === undefined) {\n return arg\n }\n return $"
},
{
"path": "src/main/resources/static/assets/bootstrap-table/bootstrap-table-vue.js",
"chars": 22980,
"preview": "var ne = {};\nconst W = ne.NODE_ENV !== \"production\" ? Object.freeze({}) : {}, Ne = ne.NODE_ENV !== \"production\" ? Object"
},
{
"path": "src/main/resources/static/assets/bootstrap-table/bootstrap-table-vue.umd.js",
"chars": 15523,
"preview": "(function(k,w){typeof exports==\"object\"&&typeof module<\"u\"?module.exports=w():typeof define==\"function\"&&define.amd?defi"
},
{
"path": "src/main/resources/static/assets/bootstrap-table/bootstrap-table.css",
"chars": 12024,
"preview": "@charset \"UTF-8\";\n/**\n * @author zhixin wen <wenzhixin2010@gmail.com>\n * version: 1.26.0\n * https://github.com/wenzhixin"
},
{
"path": "src/main/resources/static/assets/bootstrap-table/bootstrap-table.js",
"chars": 401769,
"preview": "(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory("
},
{
"path": "src/main/resources/static/assets/bootstrap-table/extensions/addrbar/bootstrap-table-addrbar.js",
"chars": 155721,
"preview": "(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? factory(require('jquery')"
},
{
"path": "src/main/resources/static/assets/bootstrap-table/extensions/auto-refresh/bootstrap-table-auto-refresh.js",
"chars": 79968,
"preview": "(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? factory(require('jquery')"
},
{
"path": "src/main/resources/static/assets/bootstrap-table/extensions/cookie/bootstrap-table-cookie.js",
"chars": 154651,
"preview": "(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? factory(require('jquery')"
},
{
"path": "src/main/resources/static/assets/bootstrap-table/extensions/copy-rows/bootstrap-table-copy-rows.js",
"chars": 86806,
"preview": "(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? factory(require('jquery')"
},
{
"path": "src/main/resources/static/assets/bootstrap-table/extensions/custom-view/bootstrap-table-custom-view.js",
"chars": 88533,
"preview": "(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? factory(require('jquery')"
},
{
"path": "src/main/resources/static/assets/bootstrap-table/extensions/defer-url/bootstrap-table-defer-url.js",
"chars": 59466,
"preview": "(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? factory(require('jquery')"
},
{
"path": "src/main/resources/static/assets/bootstrap-table/extensions/editable/bootstrap-table-editable.js",
"chars": 123310,
"preview": "(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? factory(require('jquery')"
},
{
"path": "src/main/resources/static/assets/bootstrap-table/extensions/export/bootstrap-table-export.js",
"chars": 128066,
"preview": "(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? factory(require('jquery')"
},
{
"path": "src/main/resources/static/assets/bootstrap-table/extensions/filter-control/bootstrap-table-filter-control.css",
"chars": 230,
"preview": "@charset \"UTF-8\";\n/**\n * @author: Dennis Hernández\n * @version: v2.1.1\n */\n.no-filter-control {\n height: 40px;\n}\n\n.filt"
},
{
"path": "src/main/resources/static/assets/bootstrap-table/extensions/filter-control/bootstrap-table-filter-control.js",
"chars": 237001,
"preview": "(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? factory(require('jquery')"
},
{
"path": "src/main/resources/static/assets/bootstrap-table/extensions/filter-control/utils.js",
"chars": 150964,
"preview": "(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require("
},
{
"path": "src/main/resources/static/assets/bootstrap-table/extensions/fixed-columns/bootstrap-table-fixed-columns.css",
"chars": 368,
"preview": ".fixed-columns,\n.fixed-columns-right {\n position: absolute;\n top: 0;\n height: 100%;\n background-color: #fff;\n box-s"
},
{
"path": "src/main/resources/static/assets/bootstrap-table/extensions/fixed-columns/bootstrap-table-fixed-columns.js",
"chars": 92630,
"preview": "(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? factory(require('jquery')"
},
{
"path": "src/main/resources/static/assets/bootstrap-table/extensions/group-by-v2/bootstrap-table-group-by.css",
"chars": 201,
"preview": ".bootstrap-table .table > tbody > tr.group-by.expanded,\n.bootstrap-table .table > tbody > tr.group-by.collapsed {\n curs"
},
{
"path": "src/main/resources/static/assets/bootstrap-table/extensions/group-by-v2/bootstrap-table-group-by.js",
"chars": 169334,
"preview": "(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? factory(require('jquery')"
},
{
"path": "src/main/resources/static/assets/bootstrap-table/extensions/i18n-enhance/bootstrap-table-i18n-enhance.js",
"chars": 57250,
"preview": "(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? factory(require('jquery')"
},
{
"path": "src/main/resources/static/assets/bootstrap-table/extensions/key-events/bootstrap-table-key-events.js",
"chars": 93795,
"preview": "(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? factory(require('jquery')"
},
{
"path": "src/main/resources/static/assets/bootstrap-table/extensions/mobile/bootstrap-table-mobile.js",
"chars": 88206,
"preview": "(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? factory(require('jquery')"
},
{
"path": "src/main/resources/static/assets/bootstrap-table/extensions/multiple-sort/bootstrap-table-multiple-sort.js",
"chars": 131222,
"preview": "(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? factory(require('jquery')"
},
{
"path": "src/main/resources/static/assets/bootstrap-table/extensions/page-jump-to/bootstrap-table-page-jump-to.css",
"chars": 363,
"preview": ".bootstrap-table.bootstrap3 .fixed-table-pagination > .pagination .page-jump-to {\n display: inline-block;\n}\n.bootstrap-"
},
{
"path": "src/main/resources/static/assets/bootstrap-table/extensions/page-jump-to/bootstrap-table-page-jump-to.js",
"chars": 86007,
"preview": "(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? factory(require('jquery')"
},
{
"path": "src/main/resources/static/assets/bootstrap-table/extensions/pipeline/bootstrap-table-pipeline.js",
"chars": 78817,
"preview": "(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? factory(require('jquery')"
},
{
"path": "src/main/resources/static/assets/bootstrap-table/extensions/print/bootstrap-table-print.js",
"chars": 136447,
"preview": "(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? factory(require('jquery')"
},
{
"path": "src/main/resources/static/assets/bootstrap-table/extensions/reorder-columns/bootstrap-table-reorder-columns.js",
"chars": 93237,
"preview": "(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? factory(require('jquery')"
},
{
"path": "src/main/resources/static/assets/bootstrap-table/extensions/reorder-rows/bootstrap-table-reorder-rows.css",
"chars": 458,
"preview": ".reorder-rows-on-drag-class td {\n background-color: #eee;\n box-shadow: 6px 4px 5px 1px #555, 0 1px 0 #ccc inset, 0 -1p"
},
{
"path": "src/main/resources/static/assets/bootstrap-table/extensions/reorder-rows/bootstrap-table-reorder-rows.js",
"chars": 80066,
"preview": "(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? factory(require('jquery')"
},
{
"path": "src/main/resources/static/assets/bootstrap-table/extensions/resizable/bootstrap-table-resizable.js",
"chars": 60488,
"preview": "(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? factory(require('jquery')"
},
{
"path": "src/main/resources/static/assets/bootstrap-table/extensions/sticky-header/bootstrap-table-sticky-header.css",
"chars": 360,
"preview": "/**\n * @author vincent loh <vincent.ml@gmail.com>\n * @update zhixin wen <wenzhixin2010@gmail.com>\n */\n.fix-sticky {\n po"
},
{
"path": "src/main/resources/static/assets/bootstrap-table/extensions/sticky-header/bootstrap-table-sticky-header.js",
"chars": 84351,
"preview": "(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? factory(require('jquery')"
},
{
"path": "src/main/resources/static/assets/bootstrap-table/extensions/toolbar/bootstrap-table-toolbar.js",
"chars": 126938,
"preview": "(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? factory(require('jquery')"
},
{
"path": "src/main/resources/static/assets/bootstrap-table/extensions/treegrid/bootstrap-table-treegrid.js",
"chars": 77902,
"preview": "(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? factory(require('jquery')"
},
{
"path": "src/main/resources/static/assets/bootstrap-table/locale/bootstrap-table-af-ZA.js",
"chars": 68265,
"preview": "(function (global, factory) {\n\ttypeof exports === 'object' && typeof module !== 'undefined' ? factory(require('jquery'))"
},
{
"path": "src/main/resources/static/assets/bootstrap-table/locale/bootstrap-table-ar-SA.js",
"chars": 68521,
"preview": "(function (global, factory) {\n\ttypeof exports === 'object' && typeof module !== 'undefined' ? factory(require('jquery'))"
},
{
"path": "src/main/resources/static/assets/bootstrap-table/locale/bootstrap-table-bg-BG.js",
"chars": 68813,
"preview": "(function (global, factory) {\n\ttypeof exports === 'object' && typeof module !== 'undefined' ? factory(require('jquery'))"
},
{
"path": "src/main/resources/static/assets/bootstrap-table/locale/bootstrap-table-ca-ES.js",
"chars": 68395,
"preview": "(function (global, factory) {\n\ttypeof exports === 'object' && typeof module !== 'undefined' ? factory(require('jquery'))"
},
{
"path": "src/main/resources/static/assets/bootstrap-table/locale/bootstrap-table-cs-CZ.js",
"chars": 68362,
"preview": "(function (global, factory) {\n\ttypeof exports === 'object' && typeof module !== 'undefined' ? factory(require('jquery'))"
},
{
"path": "src/main/resources/static/assets/bootstrap-table/locale/bootstrap-table-da-DK.js",
"chars": 68272,
"preview": "(function (global, factory) {\n\ttypeof exports === 'object' && typeof module !== 'undefined' ? factory(require('jquery'))"
},
{
"path": "src/main/resources/static/assets/bootstrap-table/locale/bootstrap-table-de-DE.js",
"chars": 68448,
"preview": "(function (global, factory) {\n\ttypeof exports === 'object' && typeof module !== 'undefined' ? factory(require('jquery'))"
},
{
"path": "src/main/resources/static/assets/bootstrap-table/locale/bootstrap-table-el-GR.js",
"chars": 68699,
"preview": "(function (global, factory) {\n\ttypeof exports === 'object' && typeof module !== 'undefined' ? factory(require('jquery'))"
},
{
"path": "src/main/resources/static/assets/bootstrap-table/locale/bootstrap-table-en-US.js",
"chars": 68161,
"preview": "(function (global, factory) {\n\ttypeof exports === 'object' && typeof module !== 'undefined' ? factory(require('jquery'))"
},
{
"path": "src/main/resources/static/assets/bootstrap-table/locale/bootstrap-table-es-AR.js",
"chars": 68329,
"preview": "(function (global, factory) {\n\ttypeof exports === 'object' && typeof module !== 'undefined' ? factory(require('jquery'))"
},
{
"path": "src/main/resources/static/assets/bootstrap-table/locale/bootstrap-table-es-CL.js",
"chars": 68281,
"preview": "(function (global, factory) {\n\ttypeof exports === 'object' && typeof module !== 'undefined' ? factory(require('jquery'))"
},
{
"path": "src/main/resources/static/assets/bootstrap-table/locale/bootstrap-table-es-CR.js",
"chars": 68304,
"preview": "(function (global, factory) {\n\ttypeof exports === 'object' && typeof module !== 'undefined' ? factory(require('jquery'))"
},
{
"path": "src/main/resources/static/assets/bootstrap-table/locale/bootstrap-table-es-ES.js",
"chars": 68575,
"preview": "(function (global, factory) {\n\ttypeof exports === 'object' && typeof module !== 'undefined' ? factory(require('jquery'))"
},
{
"path": "src/main/resources/static/assets/bootstrap-table/locale/bootstrap-table-es-MX.js",
"chars": 68475,
"preview": "(function (global, factory) {\n\ttypeof exports === 'object' && typeof module !== 'undefined' ? factory(require('jquery'))"
},
{
"path": "src/main/resources/static/assets/bootstrap-table/locale/bootstrap-table-es-NI.js",
"chars": 68215,
"preview": "(function (global, factory) {\n\ttypeof exports === 'object' && typeof module !== 'undefined' ? factory(require('jquery'))"
},
{
"path": "src/main/resources/static/assets/bootstrap-table/locale/bootstrap-table-es-SP.js",
"chars": 68174,
"preview": "(function (global, factory) {\n\ttypeof exports === 'object' && typeof module !== 'undefined' ? factory(require('jquery'))"
},
{
"path": "src/main/resources/static/assets/bootstrap-table/locale/bootstrap-table-et-EE.js",
"chars": 68228,
"preview": "(function (global, factory) {\n\ttypeof exports === 'object' && typeof module !== 'undefined' ? factory(require('jquery'))"
},
{
"path": "src/main/resources/static/assets/bootstrap-table/locale/bootstrap-table-eu-EU.js",
"chars": 68235,
"preview": "(function (global, factory) {\n\ttypeof exports === 'object' && typeof module !== 'undefined' ? factory(require('jquery'))"
},
{
"path": "src/main/resources/static/assets/bootstrap-table/locale/bootstrap-table-fa-IR.js",
"chars": 68442,
"preview": "(function (global, factory) {\n\ttypeof exports === 'object' && typeof module !== 'undefined' ? factory(require('jquery'))"
},
{
"path": "src/main/resources/static/assets/bootstrap-table/locale/bootstrap-table-fi-FI.js",
"chars": 68222,
"preview": "(function (global, factory) {\n\ttypeof exports === 'object' && typeof module !== 'undefined' ? factory(require('jquery'))"
},
{
"path": "src/main/resources/static/assets/bootstrap-table/locale/bootstrap-table-fr-BE.js",
"chars": 68413,
"preview": "(function (global, factory) {\n\ttypeof exports === 'object' && typeof module !== 'undefined' ? factory(require('jquery'))"
},
{
"path": "src/main/resources/static/assets/bootstrap-table/locale/bootstrap-table-fr-CH.js",
"chars": 68355,
"preview": "(function (global, factory) {\n\ttypeof exports === 'object' && typeof module !== 'undefined' ? factory(require('jquery'))"
},
{
"path": "src/main/resources/static/assets/bootstrap-table/locale/bootstrap-table-fr-FR.js",
"chars": 68470,
"preview": "(function (global, factory) {\n\ttypeof exports === 'object' && typeof module !== 'undefined' ? factory(require('jquery'))"
},
{
"path": "src/main/resources/static/assets/bootstrap-table/locale/bootstrap-table-fr-LU.js",
"chars": 68436,
"preview": "(function (global, factory) {\n\ttypeof exports === 'object' && typeof module !== 'undefined' ? factory(require('jquery'))"
},
{
"path": "src/main/resources/static/assets/bootstrap-table/locale/bootstrap-table-he-IL.js",
"chars": 68266,
"preview": "(function (global, factory) {\n\ttypeof exports === 'object' && typeof module !== 'undefined' ? factory(require('jquery'))"
},
{
"path": "src/main/resources/static/assets/bootstrap-table/locale/bootstrap-table-hi-IN.js",
"chars": 68501,
"preview": "(function (global, factory) {\n\ttypeof exports === 'object' && typeof module !== 'undefined' ? factory(require('jquery'))"
},
{
"path": "src/main/resources/static/assets/bootstrap-table/locale/bootstrap-table-hr-HR.js",
"chars": 68274,
"preview": "(function (global, factory) {\n\ttypeof exports === 'object' && typeof module !== 'undefined' ? factory(require('jquery'))"
},
{
"path": "src/main/resources/static/assets/bootstrap-table/locale/bootstrap-table-hu-HU.js",
"chars": 68198,
"preview": "(function (global, factory) {\n\ttypeof exports === 'object' && typeof module !== 'undefined' ? factory(require('jquery'))"
},
{
"path": "src/main/resources/static/assets/bootstrap-table/locale/bootstrap-table-id-ID.js",
"chars": 68409,
"preview": "(function (global, factory) {\n\ttypeof exports === 'object' && typeof module !== 'undefined' ? factory(require('jquery'))"
},
{
"path": "src/main/resources/static/assets/bootstrap-table/locale/bootstrap-table-it-IT.js",
"chars": 68389,
"preview": "(function (global, factory) {\n\ttypeof exports === 'object' && typeof module !== 'undefined' ? factory(require('jquery'))"
}
]
// ... and 51 more files (download for full content)
About this extraction
This page contains the full source code of the jobmission/oauth2-server GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 251 files (9.4 MB), approximately 2.5M tokens, and a symbol index with 10015 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.
Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.