add comments to code

This commit is contained in:
bruno 2022-08-10 12:02:02 -04:00
parent daddb2bbc4
commit 1f73faa7e4
5 changed files with 105 additions and 28 deletions

View File

@ -9,11 +9,17 @@
# Copyright 2019 - Thomas T. Jarløv
# --==--==--==--==--==--==--==--==--==--==--==--==--==--==--==-- #
# import db_sqlite, os, parsecfg, strutils, logging
import db_sqlite, os, parsecfg, logging
import os
import logging
import parsecfg
import db_sqlite
import ../code/password_utils
# --==--==--==--==--==--==--==--==--==--==-- #
# PROC : Generate Database
# --==--==--==--==--==--==--==--==--==--==-- #
proc generateDB*() =
echo "Generating database"
@ -69,6 +75,9 @@ proc generateDB*() =
echo " - Database: session table already exists"
# --==--==--==--==--==--==--==--==--==--==-- #
# PROC : Create Administrator User
# --==--==--==--==--==--==--==--==--==--==-- #
proc createAdminUser*(db: DbConn, args: seq[string]) =
## Create new admin user

View File

@ -8,7 +8,9 @@
# [TODO] joplin_json_utils : need to create many procedures
# --==--==--==--==--==--==--==--==--==--==--==--==--==--==--==-- #
# Data structure for TAGS
# --==--==--==--==--==--==--==--==--==--==-- #
# TYPE : Data structure for TAGS
# --==--==--==--==--==--==--==--==--==--==-- #
type Tag = object
id : string
parent_id : string
@ -19,3 +21,4 @@ type Tags = object
has_more: string

View File

@ -6,7 +6,6 @@
# joplin_utils : procedure related joplin application
#
# --==--==--==--==--==--==--==--==--==--==--==--==--==--==--==-- #
import net
import times
import osproc
@ -19,29 +18,37 @@ import std/options
from os import sleep
import std/[asyncdispatch, httpclient]
# Setup joplin_ping data
# --==--==--==--==--==--==--==--==--==--==-- #
# TYPE : Setup joplin_ping data
# --==--==--==--==--==--==--==--==--==--==-- #
type
joplin_ping* = object
ping_result*: seq[string]
ping_status*: bool
req*: Request
# Setup joplin_tags data
# --==--==--==--==--==--==--==--==--==--==-- #
# TYPE : Setup joplin_tags data
# --==--==--==--==--==--==--==--==--==--==-- #
type
joplin_tags* = object
id*, parent_id*, title*: seq[string]
created_time*, updated_time*, user_created_time*, user_updated_time*, is_shared*: seq[int]
req*: Request
# Setup joplin_notebooks data
# --==--==--==--==--==--==--==--==--==--==-- #
# TYPE : Setup joplin_notebooks data
# --==--==--==--==--==--==--==--==--==--==-- #
type
joplin_notebooks* = object
id*, parent_id*, title*, share_id*, icon*: seq[string]
created_time*, updated_time*, user_created_time*, user_updated_time*, is_shared*: seq[int]
req*: Request
# Setup joplin_notes data
# --==--==--==--==--==--==--==--==--==--==-- #
# TYPE : Setup joplin_notes data
# --==--==--==--==--==--==--==--==--==--==-- #
type
joplin_notes* = object
id*, parent_id*, title*, body*, author*, source_url*, source*, source_application*, application_data*, share_id*, conflict_original_id*, body_html*, base_url*: seq[string]
@ -49,15 +56,25 @@ type
latitude*, longitude*, altitude*, order*:seq[float]
req*: Request
# --==--==--==--==--==--==--==--==--==--==-- #
# DURATION : duration variables
# --==--==--==--==--==--==--==--==--==--==-- #
let
resetDuration = initDuration(seconds=2)
deciSecondDuration* = initDuration(milliseconds = 100)
qtrsecondDuration* = initDuration(milliseconds = 250)
# --==--==--==--==--==--==--==--==--==--==-- #
# VAR : connexion http variables
# --==--==--==--==--==--==--==--==--==--==-- #
var
client = newHttpClient()
lastConnection = getTime().utc
# --==--==--==--==--==--==--==--==--==--==-- #
# PROC : reset HTTP client
# --==--==--==--==--==--==--==--==--==--==-- #
proc resetHttpClient() =
if (getTime().utc - lastConnection) > resetDuration:
# Probably a new timeout. We have not yet experienced a long outage.
@ -71,8 +88,9 @@ proc resetHttpClient() =
echo("Current exception: ", getCurrentExceptionMsg())
client = newHttpClient(timeout=500)
# [TODO] procédure Ping à finir qui ne fonctionne pas.
# --==--==--==--==--==--==--==--==--==--==--==--==--==-==--==--==- #
# PROC : use the joplin API ping to validate service availibility
# --==--==--==--==--==--==--==--==--==--==--==--==--==-==--==--==- #
proc ping_joplin*(token:string): Future[joplin_ping] {.async.} =
var j_p: joplin_ping
@ -108,7 +126,9 @@ proc ping_joplin*(token:string): Future[joplin_ping] {.async.} =
#let joplin_notes_Json = parseJson(json)
# --==--==--==--==--==--==--==--==--==--==-- #
# PROC : get all joplin NOTEBOOKS
# --==--==--==--==--==--==--==--==--==--==-- #
proc get_joplin_notebooks*(token:string): Future[joplin_notebooks] {.async.} =
# Variables
@ -152,6 +172,10 @@ proc get_joplin_notebooks*(token:string): Future[joplin_notebooks] {.async.} =
return j_nb
# --==--==--==--==--==--==--==--==--==--==-- #
# PROC : get all joplin NOTES
# --==--==--==--==--==--==--==--==--==--==-- #
proc get_joplin_notes*(token:string): Future[joplin_notes] {.async.} =
# Variables
@ -195,6 +219,9 @@ proc get_joplin_notes*(token:string): Future[joplin_notes] {.async.} =
return j_notes
# --==--==--==--==--==--==--==--==--==--==-- #
# PROC : get all joplin TAGS
# --==--==--==--==--==--==--==--==--==--==-- #
proc get_joplin_tags*(token:string): Future[joplin_tags] {.async.} =
# Variables
@ -238,7 +265,9 @@ proc get_joplin_tags*(token:string): Future[joplin_tags] {.async.} =
return j_tags
# get the token from Joplin Terminal
# --==--==--==--==--==--==--==--==--==--==-- #
# PROC : get the token from Joplin Terminal
# --==--==--==--==--==--==--==--==--==--==-- #
proc get_joplin_cli_token*(): string =
var flagName: string = ""
var flagValue: string = ""
@ -253,44 +282,55 @@ proc get_joplin_cli_token*(): string =
return flagValue
# start Joplin Terminal
# --==--==--==--==--==--==--==--==--==--==-- #
# PROC : start Joplin Terminal
# --==--==--==--==--==--==--==--==--==--==-- #
proc joplin_cli_start*(): bool =
var rc = false
var result = execCmdEx("joplin server start &")
if result.exitCode == 0:
echo result.output
# echo result.output
rc = true
else:
rc = false
return rc
# check Joplin Terminal staus
# --==--==--==--==--==--==--==--==--==--==-- #
# PROC : check Joplin Terminal staus
# --==--==--==--==--==--==--==--==--==--==-- #
proc joplin_cli_status*(): bool =
var rc = false
var result = execCmdEx("joplin server status")
if result.exitCode == 0:
echo result.output
# echo result.output
rc = true
else:
rc = false
return rc
# stop Joplin Terminal
# --==--==--==--==--==--==--==--==--==--==-- #
# PROC : stop Joplin Terminal
# --==--==--==--==--==--==--==--==--==--==-- #
proc joplin_cli_stop*(): bool =
var rc = false
var result = execCmdEx("joplin server stop")
if result.exitCode == 0:
echo result.output
# echo result.output
rc = true
else:
rc = false
return rc
# --==--==--==--==--==--==--==--==--==--==-- #
# PROC :
# --==--==--==--==--==--==--==--==--==--==-- #
# proc get_joplin_tags_json*(token:string): Future[] {.async.} =
# # url = fmt"http://localhost:41184/notes/{id}?fields=id,parent_id,title,body,created_time,updated_time,is_conflict,latitude,longitude,altitude,author,source_url,is_todo,todo_due,todo_completed,source,source_application,application_data,order,user_created_time,user_updated_time,encryption_cipher_text,encryption_applied,markup_language,is_shared,share_id,conflict_original_id,master_key_id&token={token}"

View File

@ -8,19 +8,24 @@
# Inspiration of : https://ttj.dk/blog/2019/01/20/setup-a-website-with-nim
# Copyright 2019 - Thomas T. Jarløv
# --==--==--==--==--==--==--==--==--==--==--==--==--==--==--==-- #
# import md5, bcrypt, math, random, os
import md5
import bcrypt
import random
randomize()
# --==--==--==--==--==--==--==--==--==--==-- #
# Let and VAR : for random
# --==--==--==--==--==--==--==--==--==--==-- #
var urandom: File
let useUrandom = urandom.open("/dev/urandom")
# --==--==--==--==--==--==--==--==--==--==--=--==--==--=--==--==--=--==--==-- #
# PROC : Make Salt
## : Generate random salt. Uses cryptographically secure /dev/urandom
## : on platforms where it is available, and Nim's random module in other cases.
# --==--==--==--==--==--==--==--==--==--==--=--==--==--=--==--==--=--==--==-- #
proc makeSalt*(): string =
## Generate random salt. Uses cryptographically secure /dev/urandom
## on platforms where it is available, and Nim's random module in other cases.
result = ""
if useUrandom:
var randomBytes: array[0..127, char]
@ -32,13 +37,20 @@ proc makeSalt*(): string =
for i in 0..127:
result.add(chr(rand(94) + 32)) # Generate numbers from 32 to 94 + 32 = 126
proc makeSessionKey*(): string =
# --==--==--==--==--==--==--==--==--==--==-- #
# PROC : Make session key
## Creates a random key to be used to authorize a session.
# --==--==--==--==--==--==--==--==--==--==-- #
proc makeSessionKey*(): string =
let random = makeSalt()
return bcrypt.hash(random, genSalt(8))
proc makePassword*(password, salt: string, comparingTo = ""): string =
# --==--==--==--==--==--==--==--==--==--==-- #
# PROC : make password
## Creates an MD5 hash by combining password and salt
# --==--==--==--==--==--==--==--==--==--==-- #
proc makePassword*(password, salt: string, comparingTo = ""): string =
let bcryptSalt = if comparingTo != "": comparingTo else: genSalt(8)
result = hash(getMD5(salt & getMD5(password)), bcryptSalt)

View File

@ -1,3 +1,6 @@
# --==--==--==--==--==--==--==--==--==--==-- #
# Database : information to setup DB
# --==--==--==--==--==--==--==--==--==--==-- #
[Database]
folder = "data"
host = "data/website.db"
@ -5,14 +8,24 @@ name = "website"
user = "user"
pass = ""
# --==--==--==--==--==--==--==--==--==--==-- #
# Server : informations related to server side
# --==--==--==--==--==--==--==--==--==--==-- #
[Server]
website = "https://127.0.0.1:7000"
title = "Joplin The New Web"
url = "127.0.0.1"
port = "7000"
# --==--==--==--==--==--==--==--==--==--==-- #
# Joplin : Informations related to Joplin app
# --==--==--==--==--==--==--==--==--==--==-- #
[Joplin]
#Joplin DESKTOP token
#token = "e5f6644fbf6a97ddc55648dae72b11caecda6c6642d8ce0d3b20129b89b196385737eb908923542c3343649ebbf865b55bda031ab4c3a16edc7723ef2ad77d8f"
# Joplin CLI token
token = "5b05f489016ce8a001ec83a7968419368eb9206340a18f73119c79e2154ab267ddec424658920bb6f88961c170a2680cd07fbd83f38e1c0c8df907a9aed22427"
joplin_server = "https://joplinlab.bcmaison.cf"
joplin_server_user = "joplinlab@zohomail.com"