Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Submit feedback
Sign in
Toggle navigation
L
Ldap_test
Project overview
Project overview
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Anass Slimani
Ldap_test
Commits
4137d299
Commit
4137d299
authored
Sep 29, 2022
by
Anass Slimani
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
first commit
parents
Pipeline
#297
failed with stages
Changes
13
Pipelines
1
Hide whitespace changes
Inline
Side-by-side
Showing
13 changed files
with
1309 additions
and
0 deletions
+1309
-0
.gitignore
.gitignore
+33
-0
.mvn/wrapper/maven-wrapper.jar
.mvn/wrapper/maven-wrapper.jar
+0
-0
.mvn/wrapper/maven-wrapper.properties
.mvn/wrapper/maven-wrapper.properties
+2
-0
mvnw
mvnw
+316
-0
mvnw.cmd
mvnw.cmd
+188
-0
pom.xml
pom.xml
+75
-0
src/main/java/com/iam/ldapbackend/LdapTest.java
src/main/java/com/iam/ldapbackend/LdapTest.java
+461
-0
src/main/java/com/iam/ldapbackend/LdapbackendApplication.java
...main/java/com/iam/ldapbackend/LdapbackendApplication.java
+13
-0
src/main/java/com/iam/ldapbackend/ServletInitializer.java
src/main/java/com/iam/ldapbackend/ServletInitializer.java
+13
-0
src/main/java/com/iam/ldapbackend/ToolsController.java
src/main/java/com/iam/ldapbackend/ToolsController.java
+138
-0
src/main/java/com/iam/ldapbackend/WebSecurityConfigAD.java
src/main/java/com/iam/ldapbackend/WebSecurityConfigAD.java
+47
-0
src/main/resources/application.properties
src/main/resources/application.properties
+10
-0
src/test/java/com/iam/ldapbackend/LdapbackendApplicationTests.java
...java/com/iam/ldapbackend/LdapbackendApplicationTests.java
+13
-0
No files found.
.gitignore
0 → 100644
View file @
4137d299
HELP.md
target/
!.mvn/wrapper/maven-wrapper.jar
!**/src/main/**/target/
!**/src/test/**/target/
### STS ###
.apt_generated
.classpath
.factorypath
.project
.settings
.springBeans
.sts4-cache
### IntelliJ IDEA ###
.idea
*.iws
*.iml
*.ipr
### NetBeans ###
/nbproject/private/
/nbbuild/
/dist/
/nbdist/
/.nb-gradle/
build/
!**/src/main/**/build/
!**/src/test/**/build/
### VS Code ###
.vscode/
.mvn/wrapper/maven-wrapper.jar
0 → 100644
View file @
4137d299
File added
.mvn/wrapper/maven-wrapper.properties
0 → 100644
View file @
4137d299
distributionUrl
=
https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.8.6/apache-maven-3.8.6-bin.zip
wrapperUrl
=
https://repo.maven.apache.org/maven2/org/apache/maven/wrapper/maven-wrapper/3.1.0/maven-wrapper-3.1.0.jar
mvnw
0 → 100644
View file @
4137d299
#!/bin/sh
# ----------------------------------------------------------------------------
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements. See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership. The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License. You may obtain a copy of the License at
#
# https://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied. See the License for the
# specific language governing permissions and limitations
# under the License.
# ----------------------------------------------------------------------------
# ----------------------------------------------------------------------------
# Maven Start Up Batch script
#
# Required ENV vars:
# ------------------
# JAVA_HOME - location of a JDK home dir
#
# Optional ENV vars
# -----------------
# M2_HOME - location of maven2's installed home dir
# MAVEN_OPTS - parameters passed to the Java VM when running Maven
# e.g. to debug Maven itself, use
# set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000
# MAVEN_SKIP_RC - flag to disable loading of mavenrc files
# ----------------------------------------------------------------------------
if
[
-z
"
$MAVEN_SKIP_RC
"
]
;
then
if
[
-f
/usr/local/etc/mavenrc
]
;
then
.
/usr/local/etc/mavenrc
fi
if
[
-f
/etc/mavenrc
]
;
then
.
/etc/mavenrc
fi
if
[
-f
"
$HOME
/.mavenrc"
]
;
then
.
"
$HOME
/.mavenrc"
fi
fi
# OS specific support. $var _must_ be set to either true or false.
cygwin
=
false
;
darwin
=
false
;
mingw
=
false
case
"
`
uname
`
"
in
CYGWIN
*
)
cygwin
=
true
;;
MINGW
*
)
mingw
=
true
;;
Darwin
*
)
darwin
=
true
# Use /usr/libexec/java_home if available, otherwise fall back to /Library/Java/Home
# See https://developer.apple.com/library/mac/qa/qa1170/_index.html
if
[
-z
"
$JAVA_HOME
"
]
;
then
if
[
-x
"/usr/libexec/java_home"
]
;
then
export
JAVA_HOME
=
"
`
/usr/libexec/java_home
`
"
else
export
JAVA_HOME
=
"/Library/Java/Home"
fi
fi
;;
esac
if
[
-z
"
$JAVA_HOME
"
]
;
then
if
[
-r
/etc/gentoo-release
]
;
then
JAVA_HOME
=
`
java-config
--jre-home
`
fi
fi
if
[
-z
"
$M2_HOME
"
]
;
then
## resolve links - $0 may be a link to maven's home
PRG
=
"
$0
"
# need this for relative symlinks
while
[
-h
"
$PRG
"
]
;
do
ls
=
`
ls
-ld
"
$PRG
"
`
link
=
`
expr
"
$ls
"
:
'.*-> \(.*\)$'
`
if
expr
"
$link
"
:
'/.*'
>
/dev/null
;
then
PRG
=
"
$link
"
else
PRG
=
"
`
dirname
"
$PRG
"
`
/
$link
"
fi
done
saveddir
=
`
pwd
`
M2_HOME
=
`
dirname
"
$PRG
"
`
/..
# make it fully qualified
M2_HOME
=
`
cd
"
$M2_HOME
"
&&
pwd
`
cd
"
$saveddir
"
# echo Using m2 at $M2_HOME
fi
# For Cygwin, ensure paths are in UNIX format before anything is touched
if
$cygwin
;
then
[
-n
"
$M2_HOME
"
]
&&
M2_HOME
=
`
cygpath
--unix
"
$M2_HOME
"
`
[
-n
"
$JAVA_HOME
"
]
&&
JAVA_HOME
=
`
cygpath
--unix
"
$JAVA_HOME
"
`
[
-n
"
$CLASSPATH
"
]
&&
CLASSPATH
=
`
cygpath
--path
--unix
"
$CLASSPATH
"
`
fi
# For Mingw, ensure paths are in UNIX format before anything is touched
if
$mingw
;
then
[
-n
"
$M2_HOME
"
]
&&
M2_HOME
=
"
`
(
cd
"
$M2_HOME
"
;
pwd
)
`
"
[
-n
"
$JAVA_HOME
"
]
&&
JAVA_HOME
=
"
`
(
cd
"
$JAVA_HOME
"
;
pwd
)
`
"
fi
if
[
-z
"
$JAVA_HOME
"
]
;
then
javaExecutable
=
"
`
which javac
`
"
if
[
-n
"
$javaExecutable
"
]
&&
!
[
"
`
expr
\"
$javaExecutable
\"
:
'\([^ ]*\)'
`
"
=
"no"
]
;
then
# readlink(1) is not available as standard on Solaris 10.
readLink
=
`
which
readlink
`
if
[
!
`
expr
"
$readLink
"
:
'\([^ ]*\)'
`
=
"no"
]
;
then
if
$darwin
;
then
javaHome
=
"
`
dirname
\"
$javaExecutable
\"
`
"
javaExecutable
=
"
`
cd
\"
$javaHome
\"
&&
pwd
-P
`
/javac"
else
javaExecutable
=
"
`
readlink
-f
\"
$javaExecutable
\"
`
"
fi
javaHome
=
"
`
dirname
\"
$javaExecutable
\"
`
"
javaHome
=
`
expr
"
$javaHome
"
:
'\(.*\)/bin'
`
JAVA_HOME
=
"
$javaHome
"
export
JAVA_HOME
fi
fi
fi
if
[
-z
"
$JAVACMD
"
]
;
then
if
[
-n
"
$JAVA_HOME
"
]
;
then
if
[
-x
"
$JAVA_HOME
/jre/sh/java"
]
;
then
# IBM's JDK on AIX uses strange locations for the executables
JAVACMD
=
"
$JAVA_HOME
/jre/sh/java"
else
JAVACMD
=
"
$JAVA_HOME
/bin/java"
fi
else
JAVACMD
=
"
`
\\
unset
-f
command
;
\\
command
-v
java
`
"
fi
fi
if
[
!
-x
"
$JAVACMD
"
]
;
then
echo
"Error: JAVA_HOME is not defined correctly."
>
&2
echo
" We cannot execute
$JAVACMD
"
>
&2
exit
1
fi
if
[
-z
"
$JAVA_HOME
"
]
;
then
echo
"Warning: JAVA_HOME environment variable is not set."
fi
CLASSWORLDS_LAUNCHER
=
org.codehaus.plexus.classworlds.launcher.Launcher
# traverses directory structure from process work directory to filesystem root
# first directory with .mvn subdirectory is considered project base directory
find_maven_basedir
()
{
if
[
-z
"
$1
"
]
then
echo
"Path not specified to find_maven_basedir"
return
1
fi
basedir
=
"
$1
"
wdir
=
"
$1
"
while
[
"
$wdir
"
!=
'/'
]
;
do
if
[
-d
"
$wdir
"
/.mvn
]
;
then
basedir
=
$wdir
break
fi
# workaround for JBEAP-8937 (on Solaris 10/Sparc)
if
[
-d
"
${
wdir
}
"
]
;
then
wdir
=
`
cd
"
$wdir
/.."
;
pwd
`
fi
# end of workaround
done
echo
"
${
basedir
}
"
}
# concatenates all lines of a file
concat_lines
()
{
if
[
-f
"
$1
"
]
;
then
echo
"
$(
tr
-s
'\n'
' '
<
"
$1
"
)
"
fi
}
BASE_DIR
=
`
find_maven_basedir
"
$(
pwd
)
"
`
if
[
-z
"
$BASE_DIR
"
]
;
then
exit
1
;
fi
##########################################################################################
# Extension to allow automatically downloading the maven-wrapper.jar from Maven-central
# This allows using the maven wrapper in projects that prohibit checking in binary data.
##########################################################################################
if
[
-r
"
$BASE_DIR
/.mvn/wrapper/maven-wrapper.jar"
]
;
then
if
[
"
$MVNW_VERBOSE
"
=
true
]
;
then
echo
"Found .mvn/wrapper/maven-wrapper.jar"
fi
else
if
[
"
$MVNW_VERBOSE
"
=
true
]
;
then
echo
"Couldn't find .mvn/wrapper/maven-wrapper.jar, downloading it ..."
fi
if
[
-n
"
$MVNW_REPOURL
"
]
;
then
jarUrl
=
"
$MVNW_REPOURL
/org/apache/maven/wrapper/maven-wrapper/3.1.0/maven-wrapper-3.1.0.jar"
else
jarUrl
=
"https://repo.maven.apache.org/maven2/org/apache/maven/wrapper/maven-wrapper/3.1.0/maven-wrapper-3.1.0.jar"
fi
while
IFS
=
"="
read
key value
;
do
case
"
$key
"
in
(
wrapperUrl
)
jarUrl
=
"
$value
"
;
break
;;
esac
done
<
"
$BASE_DIR
/.mvn/wrapper/maven-wrapper.properties"
if
[
"
$MVNW_VERBOSE
"
=
true
]
;
then
echo
"Downloading from:
$jarUrl
"
fi
wrapperJarPath
=
"
$BASE_DIR
/.mvn/wrapper/maven-wrapper.jar"
if
$cygwin
;
then
wrapperJarPath
=
`
cygpath
--path
--windows
"
$wrapperJarPath
"
`
fi
if
command
-v
wget
>
/dev/null
;
then
if
[
"
$MVNW_VERBOSE
"
=
true
]
;
then
echo
"Found wget ... using wget"
fi
if
[
-z
"
$MVNW_USERNAME
"
]
||
[
-z
"
$MVNW_PASSWORD
"
]
;
then
wget
"
$jarUrl
"
-O
"
$wrapperJarPath
"
||
rm
-f
"
$wrapperJarPath
"
else
wget
--http-user
=
$MVNW_USERNAME
--http-password
=
$MVNW_PASSWORD
"
$jarUrl
"
-O
"
$wrapperJarPath
"
||
rm
-f
"
$wrapperJarPath
"
fi
elif
command
-v
curl
>
/dev/null
;
then
if
[
"
$MVNW_VERBOSE
"
=
true
]
;
then
echo
"Found curl ... using curl"
fi
if
[
-z
"
$MVNW_USERNAME
"
]
||
[
-z
"
$MVNW_PASSWORD
"
]
;
then
curl
-o
"
$wrapperJarPath
"
"
$jarUrl
"
-f
else
curl
--user
$MVNW_USERNAME
:
$MVNW_PASSWORD
-o
"
$wrapperJarPath
"
"
$jarUrl
"
-f
fi
else
if
[
"
$MVNW_VERBOSE
"
=
true
]
;
then
echo
"Falling back to using Java to download"
fi
javaClass
=
"
$BASE_DIR
/.mvn/wrapper/MavenWrapperDownloader.java"
# For Cygwin, switch paths to Windows format before running javac
if
$cygwin
;
then
javaClass
=
`
cygpath
--path
--windows
"
$javaClass
"
`
fi
if
[
-e
"
$javaClass
"
]
;
then
if
[
!
-e
"
$BASE_DIR
/.mvn/wrapper/MavenWrapperDownloader.class"
]
;
then
if
[
"
$MVNW_VERBOSE
"
=
true
]
;
then
echo
" - Compiling MavenWrapperDownloader.java ..."
fi
# Compiling the Java class
(
"
$JAVA_HOME
/bin/javac"
"
$javaClass
"
)
fi
if
[
-e
"
$BASE_DIR
/.mvn/wrapper/MavenWrapperDownloader.class"
]
;
then
# Running the downloader
if
[
"
$MVNW_VERBOSE
"
=
true
]
;
then
echo
" - Running MavenWrapperDownloader.java ..."
fi
(
"
$JAVA_HOME
/bin/java"
-cp
.mvn/wrapper MavenWrapperDownloader
"
$MAVEN_PROJECTBASEDIR
"
)
fi
fi
fi
fi
##########################################################################################
# End of extension
##########################################################################################
export
MAVEN_PROJECTBASEDIR
=
${
MAVEN_BASEDIR
:-
"
$BASE_DIR
"
}
if
[
"
$MVNW_VERBOSE
"
=
true
]
;
then
echo
$MAVEN_PROJECTBASEDIR
fi
MAVEN_OPTS
=
"
$(
concat_lines
"
$MAVEN_PROJECTBASEDIR
/.mvn/jvm.config"
)
$MAVEN_OPTS
"
# For Cygwin, switch paths to Windows format before running java
if
$cygwin
;
then
[
-n
"
$M2_HOME
"
]
&&
M2_HOME
=
`
cygpath
--path
--windows
"
$M2_HOME
"
`
[
-n
"
$JAVA_HOME
"
]
&&
JAVA_HOME
=
`
cygpath
--path
--windows
"
$JAVA_HOME
"
`
[
-n
"
$CLASSPATH
"
]
&&
CLASSPATH
=
`
cygpath
--path
--windows
"
$CLASSPATH
"
`
[
-n
"
$MAVEN_PROJECTBASEDIR
"
]
&&
MAVEN_PROJECTBASEDIR
=
`
cygpath
--path
--windows
"
$MAVEN_PROJECTBASEDIR
"
`
fi
# Provide a "standardized" way to retrieve the CLI args that will
# work with both Windows and non-Windows executions.
MAVEN_CMD_LINE_ARGS
=
"
$MAVEN_CONFIG
$@
"
export
MAVEN_CMD_LINE_ARGS
WRAPPER_LAUNCHER
=
org.apache.maven.wrapper.MavenWrapperMain
exec
"
$JAVACMD
"
\
$MAVEN_OPTS
\
$MAVEN_DEBUG_OPTS
\
-classpath
"
$MAVEN_PROJECTBASEDIR
/.mvn/wrapper/maven-wrapper.jar"
\
"-Dmaven.home=
${
M2_HOME
}
"
\
"-Dmaven.multiModuleProjectDirectory=
${
MAVEN_PROJECTBASEDIR
}
"
\
${
WRAPPER_LAUNCHER
}
$MAVEN_CONFIG
"
$@
"
mvnw.cmd
0 → 100644
View file @
4137d299
@REM
----------------------------------------------------------------------------
@REM
Licensed
to
the
Apache
Software
Foundation
(
ASF
)
under
one
@REM
or
more
contributor
license
agreements
.
See
the
NOTICE
file
@REM
distributed
with
this
work
for
additional
information
@REM
regarding
copyright
ownership
.
The
ASF
licenses
this
file
@REM
to
you
under
the
Apache
License
,
Version
2
.0
(
the
@REM
"License"
);
you
may
not
use
this
file
except
in
compliance
@REM
with
the
License
.
You
may
obtain
a
copy
of
the
License
at
@REM
@REM
https
://www.apache.org/licenses/LICENSE
-
2
.0
@REM
@REM
Unless
required
by
applicable
law
or
agreed
to
in
writing
,
@REM
software
distributed
under
the
License
is
distributed
on
an
@REM
"AS IS"
BASIS
,
WITHOUT
WARRANTIES
OR
CONDITIONS
OF
ANY
@REM
KIND
,
either
express
or
implied
.
See
the
License
for
the
@REM
specific
language
governing
permissions
and
limitations
@REM
under
the
License
.
@REM
----------------------------------------------------------------------------
@REM
----------------------------------------------------------------------------
@REM
Maven
Start
Up
Batch
script
@REM
@REM
Required
ENV
vars
:
@REM
JAVA_HOME
-
location
of
a
JDK
home
dir
@REM
@REM
Optional
ENV
vars
@REM
M2_HOME
-
location
of
maven2
's installed home dir
@REM MAVEN_BATCH_ECHO - set to '
on
' to enable the echoing of the batch commands
@REM MAVEN_BATCH_PAUSE - set to '
on
' to wait for a keystroke before ending
@REM MAVEN_OPTS - parameters passed to the Java VM when running Maven
@REM e.g. to debug Maven itself, use
@REM set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000
@REM MAVEN_SKIP_RC - flag to disable loading of mavenrc files
@REM ----------------------------------------------------------------------------
@REM Begin all REM lines with '
@
' in case MAVEN_BATCH_ECHO is '
on
'
@echo off
@REM set title of command window
title
%
0
@REM enable echoing by setting MAVEN_BATCH_ECHO to '
on
'
@if "
%MAVEN_BATCH_ECHO%
" == "on" echo
%MAVEN_BATCH_ECHO%
@REM set
%HOME%
to equivalent of $HOME
if "
%HOME%
" == "" (set "HOME=
%HOMEDRIVE%%
HOMEPATH
%
")
@REM Execute a user defined script before this one
if not "
%MAVEN_SKIP_RC%
" == "" goto skipRcPre
@REM check for pre script, once with legacy .bat ending and once with .cmd ending
if exist "
%USERPROFILE%
\mavenrc_pre.bat" call "
%USERPROFILE%
\mavenrc_pre.bat"
%
*
if exist "
%USERPROFILE%
\mavenrc_pre.cmd" call "
%USERPROFILE%
\mavenrc_pre.cmd"
%
*
:skipRcPre
@setlocal
set ERROR_CODE=0
@REM To isolate internal variables from possible post scripts, we use another setlocal
@setlocal
@REM ==== START VALIDATION ====
if not "
%JAVA_HOME%
" == "" goto OkJHome
echo.
echo Error: JAVA_HOME not found in your environment. >&2
echo Please set the JAVA_HOME variable in your environment to match the >&2
echo location of your Java installation. >&2
echo.
goto error
:OkJHome
if exist "
%JAVA_HOME%
\bin\java.exe" goto init
echo.
echo Error: JAVA_HOME is set to an invalid directory. >&2
echo JAVA_HOME = "
%JAVA_HOME%
" >&2
echo Please set the JAVA_HOME variable in your environment to match the >&2
echo location of your Java installation. >&2
echo.
goto error
@REM ==== END VALIDATION ====
:init
@REM Find the project base dir, i.e. the directory that contains the folder ".mvn".
@REM Fallback to current working directory if not found.
set MAVEN_PROJECTBASEDIR=
%MAVEN_BASEDIR%
IF NOT "
%MAVEN_PROJECTBASEDIR%
"=="" goto endDetectBaseDir
set EXEC_DIR=
%CD%
set WDIR=
%EXEC_DIR%
:findBaseDir
IF EXIST "
%WDIR%
"\.mvn goto baseDirFound
cd ..
IF "
%WDIR%
"=="
%CD%
" goto baseDirNotFound
set WDIR=
%CD%
goto findBaseDir
:baseDirFound
set MAVEN_PROJECTBASEDIR=
%WDIR%
cd "
%EXEC_DIR%
"
goto endDetectBaseDir
:baseDirNotFound
set MAVEN_PROJECTBASEDIR=
%EXEC_DIR%
cd "
%EXEC_DIR%
"
:endDetectBaseDir
IF NOT EXIST "
%MAVEN_PROJECTBASEDIR%
\.mvn\jvm.config" goto endReadAdditionalConfig
@setlocal EnableExtensions EnableDelayedExpansion
for /F "usebackq delims="
%%a
in ("
%MAVEN_PROJECTBASEDIR%
\.mvn\jvm.config") do set JVM_CONFIG_MAVEN_PROPS=
!JVM_CONFIG_MAVEN_PROPS!
%%a
@endlocal & set JVM_CONFIG_MAVEN_PROPS=
%JVM_CONFIG_MAVEN_PROPS%
:endReadAdditionalConfig
SET MAVEN_JAVA_EXE="
%JAVA_HOME%
\bin\java.exe"
set WRAPPER_JAR="
%MAVEN_PROJECTBASEDIR%
\.mvn\wrapper\maven-wrapper.jar"
set WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain
set DOWNLOAD_URL="https://repo.maven.apache.org/maven2/org/apache/maven/wrapper/maven-wrapper/3.1.0/maven-wrapper-3.1.0.jar"
FOR /F "usebackq tokens=1,2 delims=="
%%A
IN ("
%MAVEN_PROJECTBASEDIR%
\.mvn\wrapper\maven-wrapper.properties") DO (
IF "
%%A
"=="wrapperUrl" SET DOWNLOAD_URL=
%%B
)
@REM Extension to allow automatically downloading the maven-wrapper.jar from Maven-central
@REM This allows using the maven wrapper in projects that prohibit checking in binary data.
if exist
%WRAPPER_JAR%
(
if "
%MVNW_VERBOSE%
" == "true" (
echo Found
%WRAPPER_JAR%
)
) else (
if not "
%MVNW_REPOURL%
" == "" (
SET DOWNLOAD_URL="
%MVNW_REPOURL%
/org/apache/maven/wrapper/maven-wrapper/3.1.0/maven-wrapper-3.1.0.jar"
)
if "
%MVNW_VERBOSE%
" == "true" (
echo Couldn'
t
find
%WRAPPER_JAR%
,
downloading
it
...
echo
Downloading
from
:
%DOWNLOAD_URL%
)
powershell
-Command
"&{"
^
"$webclient = new-object System.Net.WebClient;"
^
"if (-not ([string]::IsNullOrEmpty('
%MVNW_USERNAME%
') -and [string]::IsNullOrEmpty('
%MVNW_PASSWORD%
'))) {"
^
"$webclient.Credentials = new-object System.Net.NetworkCredential('
%MVNW_USERNAME%
', '
%MVNW_PASSWORD%
');"
^
"}"
^
"[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12; $webclient.DownloadFile('
%DOWNLOAD_URL%
', '
%WRAPPER_JAR%
')"
^
"}"
if
"
%MVNW_VERBOSE%
"
==
"true"
(
echo
Finished
downloading
%WRAPPER_JAR%
)
)
@REM
End
of
extension
@REM
Provide
a
"standardized"
way
to
retrieve
the
CLI
args
that
will
@REM
work
with
both
Windows
and
non
-Windows
executions
.
set
MAVEN_CMD_LINE_ARGS
=
%
*
%MAVEN_JAVA_EXE%
^
%JVM_CONFIG_MAVEN_PROPS%
^
%MAVEN_OPTS%
^
%MAVEN_DEBUG_OPTS%
^
-classpath
%WRAPPER_JAR%
^
"-Dmaven.multiModuleProjectDirectory=
%MAVEN_PROJECTBASEDIR%
"
^
%WRAPPER_LAUNCHER%
%MAVEN_CONFIG%
%
*
if
ERRORLEVEL
1
goto
error
goto
end
:error
set
ERROR_CODE
=
1
:end
@endlocal
&
set
ERROR_CODE
=
%ERROR_CODE%
if
not
"
%MAVEN_SKIP_RC%
"
==
""
goto
skipRcPost
@REM
check
for
post
script
,
once
with
legacy
.bat
ending
and
once
with
.cmd
ending
if
exist
"
%USERPROFILE%
\mavenrc_post.bat"
call
"
%USERPROFILE%
\mavenrc_post.bat"
if
exist
"
%USERPROFILE%
\mavenrc_post.cmd"
call
"
%USERPROFILE%
\mavenrc_post.cmd"
:skipRcPost
@REM
pause
the
script
if
MAVEN_BATCH_PAUSE
is
set
to
'on'
if
"
%MAVEN_BATCH_PAUSE%
"
==
"on"
pause
if
"
%MAVEN_TERMINATE_CMD%
"
==
"on"
exit
%ERROR_CODE%
cmd
/C
exit
/B
%ERROR_CODE%
pom.xml
0 → 100644
View file @
4137d299
<?xml version="1.0" encoding="UTF-8"?>
<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 https://maven.apache.org/xsd/maven-4.0.0.xsd"
>
<modelVersion>
4.0.0
</modelVersion>
<parent>
<groupId>
org.springframework.boot
</groupId>
<artifactId>
spring-boot-starter-parent
</artifactId>
<version>
2.7.3
</version>
<relativePath
/>
<!-- lookup parent from repository -->
</parent>
<groupId>
com.iam
</groupId>
<artifactId>
ldapbackend
</artifactId>
<version>
0.0.1-SNAPSHOT
</version>
<packaging>
war
</packaging>
<name>
ldapbackend
</name>
<description>
Demo project for Spring Boot
</description>
<properties>
<java.version>
1.8
</java.version>
</properties>
<dependencies>
<dependency>
<groupId>
org.springframework.boot
</groupId>
<artifactId>
spring-boot-starter-web
</artifactId>
</dependency>
<dependency>
<groupId>
org.springframework.boot
</groupId>
<artifactId>
spring-boot-starter-tomcat
</artifactId>
<scope>
provided
</scope>
</dependency>
<dependency>
<groupId>
org.springframework.boot
</groupId>
<artifactId>
spring-boot-starter-test
</artifactId>
<scope>
test
</scope>
</dependency>
<dependency>
<groupId>
org.springframework.security
</groupId>
<artifactId>
spring-security-ldap
</artifactId>
<version>
5.7.3
</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.springframework.ldap/spring-ldap-core -->
<dependency>
<groupId>
org.springframework.ldap
</groupId>
<artifactId>
spring-ldap-core
</artifactId>
<version>
2.4.1
</version>
</dependency>
<dependency>
<groupId>
org.springframework.boot
</groupId>
<artifactId>
spring-boot-starter-data-ldap
</artifactId>
</dependency>
<!-- <dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency> -->
</dependencies>
<build>
<plugins>
<plugin>
<groupId>
org.springframework.boot
</groupId>
<artifactId>
spring-boot-maven-plugin
</artifactId>
</plugin>
</plugins>
</build>
</project>
\ No newline at end of file
src/main/java/com/iam/ldapbackend/LdapTest.java
0 → 100644
View file @
4137d299
package
com
.
iam
.
ldapbackend
;
import
java.util.ArrayList
;
import
java.util.List
;
import
javax.naming.NamingException
;
import
javax.naming.directory.Attribute
;
import
javax.naming.directory.Attributes
;
import
javax.net.ssl.HostnameVerifier
;
import
javax.net.ssl.HttpsURLConnection
;
import
javax.net.ssl.SSLContext
;
import
javax.net.ssl.SSLSession
;
import
javax.net.ssl.TrustManager
;
import
java.net.URL
;
import
java.security.SecureRandom
;
import
java.security.cert.CertificateException
;
import
java.security.cert.X509Certificate
;
import
javax.net.ssl.X509TrustManager
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.beans.factory.annotation.Value
;
import
org.springframework.context.annotation.Bean
;
import
org.springframework.ldap.core.AttributesMapper
;
import
org.springframework.ldap.core.LdapTemplate
;
import
org.springframework.ldap.core.support.BaseLdapPathContextSource
;
import
org.springframework.ldap.core.support.LdapContextSource
;
import
org.springframework.ldap.filter.AndFilter
;
import
org.springframework.ldap.filter.EqualsFilter
;
import
org.springframework.security.authentication.AuthenticationManager
;
import
org.springframework.security.ldap.authentication.LdapAuthenticationProvider
;
import
org.springframework.security.ldap.authentication.LdapAuthenticator
;
import
org.springframework.security.ldap.userdetails.PersonContextMapper
;
import
org.springframework.stereotype.Service
;
@Service
public
class
LdapTest
{
// public boolean login(String username, String password) {
// AndFilter filter = new AndFilter();
// LdapContextSource contextSource = new LdapContextSource();
// System.out.println("------->>>>>> "+ldpaBase+"// "+ldpaURL+"// "+"// ");
// contextSource.setUrl(ldpaURL);
// contextSource.setBase(ldpaBase);
// contextSource.afterPropertiesSet();
// LdapTemplate lt = new LdapTemplate(contextSource);
// lt.setIgnorePartialResultException(true);
// // Active Directory doesn’t transparently handle referrals. This fixes that.
// filter.and(new EqualsFilter("userPrincipalName", username));
// return lt.authenticate("ou=people",
// filter.toString(), password);
// }
public
void
authenticate
(
String
username
,
String
password
)
{
LdapContextSource
contextSource
=
new
LdapContextSource
();
contextSource
.
setUrl
(
ldpaURL
);
contextSource
.
setBase
(
ldpaBase
);
contextSource
.
setUserDn
(
ldpaBase
);
contextSource
.
afterPropertiesSet
();
contextSource
.
getContext
(
"uid="
+
username
+
","
+
ldpaBase
,
password
);
}
public
void
authenticateSimpleAdmin
(
String
username
,
String
password
)
throws
Exception
{
LdapContextSource
contextSource
=
new
LdapContextSource
();
contextSource
.
setUrl
(
ldpaURL
);
contextSource
.
setBase
(
ldpaBase
);
// contextSource.setUserDn(ldpaBase);
contextSource
.
setUserDn
(
"cn=DIGI_VENTE,DC=iamdg,DC=net,DC=ma"
);
contextSource
.
setPassword
(
"926$8af$MC"
);
contextSource
.
afterPropertiesSet
();
HttpsURLConnection
https
=
getHttpsConnexion
();
https
.
connect
();
contextSource
.
getContext
(
"uid="
+
username
+
","
+
ldpaBase
,
password
);
https
.
disconnect
();
}
public
void
authenticate2
(
String
username
,
String
password
,
String
ou
)
{
try
{
LdapContextSource
contextSource
=
new
LdapContextSource
();
contextSource
.
setUrl
(
ldpaURL
);
contextSource
.
setBase
(
ldpaBase
);
contextSource
.
afterPropertiesSet
();
contextSource
.
getContext
(
"uid="
+
username
+
",ou="
+
ou
+
","
+
ldpaBase
,
password
);
}
catch
(
Exception
ex
){
ex
.
printStackTrace
();
}
}
public
void
authenticateWithAdmin
(
String
username
,
String
password
,
String
ou
)
throws
Exception
{
LdapContextSource
contextSource
=
new
LdapContextSource
();
contextSource
.
setUrl
(
ldpaURL
);
contextSource
.
setBase
(
ldpaBase
);
contextSource
.
setUserDn
(
"cn=DIGI_VENTE,DC=iamdg,DC=net,DC=ma"
);
contextSource
.
setPassword
(
"926$8af$MC"
);
contextSource
.
afterPropertiesSet
();
HttpsURLConnection
https
=
getHttpsConnexion
();
https
.
connect
();
contextSource
.
getContext
(
"uid="
+
username
+
",ou="
+
ou
+
","
+
ldpaBase
,
password
);
https
.
disconnect
();
}
public
List
<
String
>
search
(
String
username
)
throws
Exception
{
LdapContextSource
contextSource
=
new
LdapContextSource
();
contextSource
.
setUrl
(
ldpaURL
);
contextSource
.
setBase
(
ldpaBase
);
contextSource
.
setUserDn
(
"cn=DIGI_VENTE,DC=iamdg,DC=net,DC=ma"
);
contextSource
.
setPassword
(
"926$8af$MC"
);
contextSource
.
afterPropertiesSet
();
LdapTemplate
lt
=
new
LdapTemplate
(
contextSource
);
HttpsURLConnection
https
=
getHttpsConnexion
();
https
.
connect
();
try
{
lt
.
afterPropertiesSet
();
return
lt
.
search
(
""
,
"uid="
+
username
,
(
AttributesMapper
<
String
>)
attrs
->
(
String
)(
attrs
.
toString
()));
}
catch
(
Exception
e
)
{
// TODO Auto-generated catch block
e
.
printStackTrace
();
List
l
=
new
ArrayList
<>();
l
.
add
(
"error : "
+
e
.
getMessage
());
return
l
;
}
finally
{
https
.
disconnect
();
}
}
public
List
searchCustome
(
String
username
)
throws
Exception
{
LdapContextSource
contextSource
=
new
LdapContextSource
();
contextSource
.
setUrl
(
ldpaURL
);
contextSource
.
setBase
(
ldpaBase
);
contextSource
.
afterPropertiesSet
();
LdapTemplate
lt
=
new
LdapTemplate
(
contextSource
);
// try {
// Attributes xx = contextSource.getReadOnlyContext().getAttributes("uid=joe,ou=otherpeople");
// System.out.println("JOE LDAP ATTRIBUTES : "+xx.toString());
// } catch (NamingException e1) {
// // TODO Auto-generated catch block
// e1.printStackTrace();
// }
HttpsURLConnection
https
=
getHttpsConnexion
();
https
.
connect
();
try
{
List
persons
=
new
ArrayList
();
try
{
List
search
=
lt
.
search
(
""
,
"(objectClass=person)"
,
(
AttributesMapper
<
String
>)
attrs
->
(
String
)
attrs
.
toString
());
persons
.
addAll
(
search
);
}
catch
(
Exception
e
)
{
System
.
out
.
println
(
"Error: "
+
e
);
}
return
persons
;
}
catch
(
Exception
e
)
{
// TODO Auto-generated catch block
e
.
printStackTrace
();
List
l
=
new
ArrayList
<>();
l
.
add
(
"error : "
+
e
.
getMessage
());
return
l
;
}
finally
{
https
.
disconnect
();
}
}
public
List
searchGroups
(
String
objectClass
)
{
LdapContextSource
contextSource
=
new
LdapContextSource
();
contextSource
.
setUrl
(
ldpaURL
);
contextSource
.
setBase
(
ldpaBase
);
contextSource
.
afterPropertiesSet
();
LdapTemplate
lt
=
new
LdapTemplate
(
contextSource
);
try
{
List
search
=
null
;
try
{
search
=
lt
.
search
(
""
,
"(objectClass="
+
objectClass
+
")"
,
(
AttributesMapper
<
String
>)
attrs
->
(
String
)
attrs
.
toString
());
System
.
out
.
println
();
}
catch
(
Exception
e
)
{
System
.
out
.
println
(
"Error: "
+
e
);
}
return
search
;
}
catch
(
Exception
e
)
{
// TODO Auto-generated catch block
e
.
printStackTrace
();
List
l
=
new
ArrayList
<>();
l
.
add
(
"error : "
+
e
.
getMessage
());
return
l
;
}
}
@Value
(
"${spring.ldap.base}"
)
String
ldpaBase
;
@Value
(
"${spring.ldap.url}"
)
String
ldpaURL
;
private
HttpsURLConnection
getHttpsConnexion
()
throws
Exception
{
HttpsURLConnection
https
=
null
;
SSLContext
sslCon
=
SSLContext
.
getInstance
(
"SSL"
);
TrustManager
[]
trustAll
=
new
TrustManager
[]{
new
TrustAllCerts
()
};
sslCon
.
init
(
null
,
trustAll
,
new
SecureRandom
());
https
.
setDefaultSSLSocketFactory
(
sslCon
.
getSocketFactory
());
URL
url
;
url
=
new
URL
(
"https://10.100.11.2:636"
);
https
=
(
HttpsURLConnection
)
url
.
openConnection
();
https
.
setHostnameVerifier
(
new
TrustAllHosts
());
return
https
;
}
public
class
TrustAllHosts
implements
HostnameVerifier
{
@Override
public
boolean
verify
(
String
arg0
,
SSLSession
arg1
)
{
// TODO Auto-generated method stub
return
true
;
}
}
public
class
TrustAllCerts
implements
X509TrustManager
{
@Override
public
void
checkClientTrusted
(
X509Certificate
[]
arg0
,
String
arg1
)
throws
CertificateException
{
// TODO Auto-generated method stub
}
@Override
public
void
checkServerTrusted
(
X509Certificate
[]
arg0
,
String
arg1
)
throws
CertificateException
{
// TODO Auto-generated method stub
}
@Override
public
X509Certificate
[]
getAcceptedIssuers
()
{
// TODO Auto-generated method stub
return
null
;
}
}
// @Value("${spring.ldap.username}")
// String ldpaPrinciple;
// @Value("${spring.ldap.password}")
// String ldpaPass;
// LdapTemplate ldapTemplate(){
// return new LdapTemplate(contextSource());
// }
// @Bean
// public LdapContextSource contextSource() {
// LdapContextSource contextSource = new LdapContextSource();
// System.out.println("------->>>>>> "+ldpaBase+"// "+ldpaURL+"// "+"// ");
// contextSource.setUrl(ldpaURL);
// // contextSource.setBase(ldpaBase);
// contextSource.afterPropertiesSet();
// return contextSource;
// }
// public class PersonAttributesMapper implements AttributesMapper{
// @Override
// public Object mapFromAttributes(Attributes attributes) throws NamingException {
// AppUserMobile user = new AppUserMobile();
// Attribute name = attributes.get("name");
// if (name != null){
// user.setAddress((String) name.get());
// }
// Attribute displayname = attributes.get("cn");
// if (displayname != null){
// user.setEmail((String) displayname.get());
// }
// Attribute lastname = attributes.get("sn");
// if (lastname != null){
// user.setLastName((String) lastname.get());
// }
// Attribute firstname = attributes.get("ou");
// if (firstname != null){
// user.setFirstName((String) firstname.get());
// }
// Attribute mail = attributes.get("mail");
// if (mail != null){
// user.setEmail((String) mail.get());
// }
// Attribute userid = attributes.get("uid");
// if (userid != null){
// user.setId((String) userid.get());
// }
// System.out.println(user.toString());
// return user;
// }
// }
}
src/main/java/com/iam/ldapbackend/LdapbackendApplication.java
0 → 100644
View file @
4137d299
package
com
.
iam
.
ldapbackend
;
import
org.springframework.boot.SpringApplication
;
import
org.springframework.boot.autoconfigure.SpringBootApplication
;
@SpringBootApplication
public
class
LdapbackendApplication
{
public
static
void
main
(
String
[]
args
)
{
SpringApplication
.
run
(
LdapbackendApplication
.
class
,
args
);
}
}
src/main/java/com/iam/ldapbackend/ServletInitializer.java
0 → 100644
View file @
4137d299
package
com
.
iam
.
ldapbackend
;
import
org.springframework.boot.builder.SpringApplicationBuilder
;
import
org.springframework.boot.web.servlet.support.SpringBootServletInitializer
;
public
class
ServletInitializer
extends
SpringBootServletInitializer
{
@Override
protected
SpringApplicationBuilder
configure
(
SpringApplicationBuilder
application
)
{
return
application
.
sources
(
LdapbackendApplication
.
class
);
}
}
src/main/java/com/iam/ldapbackend/ToolsController.java
0 → 100644
View file @
4137d299
package
com
.
iam
.
ldapbackend
;
import
java.util.List
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.beans.factory.annotation.Value
;
import
org.springframework.http.ResponseEntity
;
import
org.springframework.web.bind.annotation.CrossOrigin
;
import
org.springframework.web.bind.annotation.GetMapping
;
import
org.springframework.web.bind.annotation.RequestMapping
;
import
org.springframework.web.bind.annotation.RequestMethod
;
import
org.springframework.web.bind.annotation.RequestParam
;
import
org.springframework.web.bind.annotation.RestController
;
@CrossOrigin
(
methods
=
{
RequestMethod
.
GET
,
RequestMethod
.
PUT
})
@RestController
@RequestMapping
(
"tools"
)
public
class
ToolsController
{
@Autowired
LdapTest
ldapTest
;
@GetMapping
(
"checkLdapUser"
)
public
ResponseEntity
authLdap22
(
@RequestParam
String
uid
,
@RequestParam
String
password
){
try
{
ldapTest
.
authenticate
(
uid
,
password
);
}
catch
(
Exception
e0
){
e0
.
printStackTrace
();
return
ResponseEntity
.
ok
(
"nook"
);
}
return
ResponseEntity
.
ok
(
"ok"
);
}
@GetMapping
(
"checkLdapUser1"
)
public
ResponseEntity
authLdap11
(
@RequestParam
String
uid
,
@RequestParam
String
password
){
try
{
ldapTest
.
authenticateSimpleAdmin
(
uid
,
password
);
}
catch
(
Exception
e0
){
e0
.
printStackTrace
();
return
ResponseEntity
.
ok
(
"nook"
);
}
return
ResponseEntity
.
ok
(
"ok"
);
}
@GetMapping
(
"checkLdapUser2"
)
public
ResponseEntity
authLdap33
(
@RequestParam
String
uid
,
@RequestParam
String
password
,
@RequestParam
String
ou
){
try
{
ldapTest
.
authenticate2
(
uid
,
password
,
ou
);
}
catch
(
Exception
e0
){
e0
.
printStackTrace
();
return
ResponseEntity
.
ok
(
"nook"
);
}
return
ResponseEntity
.
ok
(
"ok"
);
}
@GetMapping
(
"checkLdapUserAdmin"
)
public
ResponseEntity
authLdapAdmin
(
@RequestParam
String
uid
,
@RequestParam
String
password
,
@RequestParam
String
ou
){
try
{
ldapTest
.
authenticateWithAdmin
(
uid
,
password
,
ou
);
}
catch
(
Exception
e0
){
e0
.
printStackTrace
();
return
ResponseEntity
.
ok
(
"nook"
);
}
return
ResponseEntity
.
ok
(
"ok"
);
}
@GetMapping
(
"ldapsearchuser"
)
public
ResponseEntity
serchLdap
(
@RequestParam
String
uid
){
try
{
List
d
=
ldapTest
.
search
(
uid
);
String
sss
=
""
;
for
(
Object
o
:
d
){
sss
+=
(
o
).
toString
();
}
return
ResponseEntity
.
ok
(
sss
);
}
catch
(
Exception
e0
){
e0
.
printStackTrace
();
return
ResponseEntity
.
ok
(
"nook"
);
}
}
@GetMapping
(
"ldapgroups"
)
public
ResponseEntity
ldapgroups
(
@RequestParam
String
objectClass
){
try
{
List
d
=
ldapTest
.
searchGroups
(
objectClass
);
String
sss
=
""
;
for
(
Object
o
:
d
){
System
.
out
.
println
(
"OBject = "
+
o
.
toString
()+
"\n"
);
sss
+=
o
.
toString
();
// sss += ((AppUserMobile)o).getLastName() + " // "+((AppUserMobile)o).getId()+ " // "+((AppUserMobile)o).getLastName();
}
return
ResponseEntity
.
ok
(
sss
);
}
catch
(
Exception
e0
){
e0
.
printStackTrace
();
return
ResponseEntity
.
ok
(
"nook"
);
}
}
}
src/main/java/com/iam/ldapbackend/WebSecurityConfigAD.java
0 → 100644
View file @
4137d299
// package com.iam.ldapbackend;
// import org.springframework.beans.factory.annotation.Value;
// import org.springframework.context.annotation.Bean;
// import org.springframework.context.annotation.Configuration;
// import org.springframework.security.authentication.AuthenticationManager;
// import org.springframework.security.authentication.AuthenticationProvider;
// import org.springframework.security.authentication.ProviderManager;
// import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;
// 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.WebSecurityConfigurerAdapter;
// import org.springframework.security.ldap.authentication.ad.ActiveDirectoryLdapAuthenticationProvider;
// import java.util.Arrays;
// @Configuration
// @EnableWebSecurity
// public class WebSecurityConfigAD extends WebSecurityConfigurerAdapter {
// @Value("${spring.ldap.url}")
// private String AD_URL;
// @Override
// protected void configure(HttpSecurity http) throws Exception {
// http.authorizeRequests().anyRequest().authenticated().and().httpBasic();
// }
// @Override
// protected void configure(AuthenticationManagerBuilder authManagerBuilder) throws Exception {
// authManagerBuilder.authenticationProvider(activeDirectoryLdapAuthenticationProvider());
// }
// @Bean
// public AuthenticationManager authenticationManager() {
// return new ProviderManager(Arrays.asList(activeDirectoryLdapAuthenticationProvider()));
// }
// @Bean
// public AuthenticationProvider activeDirectoryLdapAuthenticationProvider() {
// ActiveDirectoryLdapAuthenticationProvider provider = new ActiveDirectoryLdapAuthenticationProvider("", AD_URL);
// provider.setConvertSubErrorCodesToExceptions(true);
// provider.setUseAuthenticationRequestCredentials(true);
// return provider;
// }
// }
src/main/resources/application.properties
0 → 100644
View file @
4137d299
server.port
=
8000
#////====> LDPA CONFIG
spring.ldap.url
=
ldaps://10.100.11.2:636
# spring.ldap.url=ldap://192.168.1.26:8389
spring.ldap.base
=
DC=iamdg,DC=net,DC=ma
#
spring.ldap.base
=
dc=springframework,dc=org
\ No newline at end of file
src/test/java/com/iam/ldapbackend/LdapbackendApplicationTests.java
0 → 100644
View file @
4137d299
package
com
.
iam
.
ldapbackend
;
import
org.junit.jupiter.api.Test
;
import
org.springframework.boot.test.context.SpringBootTest
;
@SpringBootTest
class
LdapbackendApplicationTests
{
@Test
void
contextLoads
()
{
}
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment