Hello Chris
I work with Rocketd3 and mvstoolkit and I have managed to make the connection type Basic Auth and Type Bear Token. I share my experience and code of the programs. I hope this information solves your question.
Type Basic Auth
In this case you only get the user and password data that are sent in the header from the api.
Example:
***********OBTENGO USUARIO DESDE LA CABECERA**************
INCLUDE CORS_Headers
CALL MVSP.GET.HTTP.REQUEST.HEADER(RESPONSE)
USR=TRIM(RESPONSE<2,1>[7,100])
long=LEN(USR)
***********DECODIFICO USER*******************************
IF USR # "WHATEVER" THEN
error = "2000" ;**2000 usuario incorrecto
RETURN
END
Type Bearer Token
If you need to generate a JWT, you could do it in the following way, I use Python to generate it and I execute it from a pick program I share the example code.
SUBROUTINE LOGIN(response)
******************************************************************
* Verifica si usuario Existe
* FPAREDES 31 AGOSTO 2020
******************************************************************
*
*
OPEN "D3PYTHON" TO FPYTHON ELSE
RESPONSE = "No se Encontro el Archivo D3PYTHON "
RETURN
END
***********Verifica que usuario y contrase¤a sean correctos**********
OPEN "USUARIOS" TO FUSUARIO ELSE
RESPONSE = "No se Encontro el Archivo USUARIOS "
RETURN
END
OPEN "TOKEN" TO FTOKEN ELSE
RESPONSE = "No se Encontro el Archivo TOKEN "
RETURN
END
***********OBTENGO USUARIO DESDE LA CABECERA**************
INCLUDE CORS_Headers
CALL MVSP.GET.HTTP.REQUEST.HEADER(RESPONSE)
USR=TRIM(RESPONSE<2,1>[7,100])
long=LEN(USR)
***********DECODIFICO USER*******************************
R1=''
READ R1 FROM FPYTHON,"decode64.py" THEN
R1<1>="import base64"
R1<2>="encoded = '":USR:"'"
R1<3>="data = base64.b64decode(encoded)"
R1<4>="print(data)"
WRITE R1 ON FPYTHON,"decode64.py"
END ELSE
R1<1>="import base64"
R1<2>="encoded = '":USR:"'"
R1<3>="data = base64.b64decode(encoded)"
R1<4>="print(data)"
WRITE R1 ON FPYTHON,"decode64.py"
END
SEL1 = "python C:\D3PYTHON\decode64.py"
EXECUTE SEL1 CAPTURING JJ
IDUSR=JJ<1>
USR=FIELD(IDUSR,':',1); **USR
PASS=FIELD(IDUSR,':',2); **PASS
USER=OCONV(USR,"G1'1")
PASSWORD=OCONV(PASS,"G0'1")
*********************************************************
R=''
READ R FROM FUSUARIO,USER THEN
IF PASSWORD # R<1> THEN
RESPONSE = "Password incorrecto"
RETURN
END ELSE
R1=''
READ R1 FROM FPYTHON,"login.py" THEN
R1<1>="import jwt"
R1<2>="from time import time"
R1<3>='secret_key = "clavemexico"'
R1<4>="token = jwt.encode({"
R1<5>="'user': '":user:"',"
R1<6>="'password': '":password:"',"
R1<7>="'exp': time() + 300"
R1<8>="}, secret_key, algorithm='HS256').decode('utf-8')"
R1<9>="print(token)"
WRITE R1 ON FPYTHON,"login.py"
END ELSE
R1<1>="import jwt"
R1<2>="from time import time"
R1<3>='secret_key = "clavemexico"'
R1<4>="token = jwt.encode({"
R1<5>="'user': '":user:"',"
R1<6>="'password': '":password:"',"
R1<7>="'exp': time() + 300"
R1<8>="}, secret_key, algorithm='HS256').decode('utf-8')"
R1<9>="print(token)"
WRITE R1 ON FPYTHON,"login.py"
END
SEL = "python C:\D3PYTHON\login.py"
EXECUTE SEL CAPTURING XX
RESPONSE=XX<1>
********GRABA ARCHIVO TOKEN***************
CLAVE=DATE():"*":TIME()
R2=''
READ R2 FROM FTOKEN,CLAVE THEN
R2<1>=RESPONSE
R2<2>=DATE()
R2<3>=TIME()
R2<4>=user
WRITE R2 ON FTOKEN,CLAVE
END ELSE
R2<1>=RESPONSE
R2<2>=DATE()
R2<3>=TIME()
R2<4>=user
WRITE R2 ON FTOKEN,CLAVE
END
END
END ELSE
RESPONSE = "Usuario ":USER:" no existe"
RETURN
END
RETURN
Python programs to get JWT.
login.py
import jwt
from time import time
secret_key = "clavemexico"
token = jwt.encode({
'user': 'mexico',
'password': 'TijFGWIZSSFD',
'exp': time() + 300
}, secret_key, algorithm='HS256').decode('utf-8')
print(token)
decode64.py
import base64
encoded = 'd29jY3U6VGlqRkdXSVo='
data = base64.b64decode(encoded)
print(data)
valida.py
import jwt
secret_key = "clavemexico"
token = 'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VyIjoid29jY3UiLCJwYXNzd29yZCI6IlRpakZHV0laIiwiZXhwIjoxNTk5MTA1MjA3LjY1MjYwNDh9.iM0U8MlbqSn9GzeSIUM3v_GrBpzyGTYPLjFUKUMdWQ0'
payload = jwt.decode(token, secret_key, algorithms=['HS256'])
print(payload)"
Regards
Fausto Paredes
------------------------------
Fausto Paredes
GENERAL MANAGER
Admindysad Cia. Ltda.
Quito Ecuador
------------------------------
Original Message:
Sent: 08-30-2021 14:14
From: Chris Wolcz
Subject: MVS Toolkit
Hello,
We would like to use MVS Toolkit with either a web page or a Flutter app.
Specifically, I am looking for an example of user authentication. Did you write your own subroutine for tokens?
We would like to create a simple shopping cart application. Any suggestions will be appreciated.
Thank you,
Chris
------------------------------
Chris Wolcz
Senior Software Developer
Rocket Forum Shared Account
Clifton Park NY United States
------------------------------