Skip to content
Snippets Groups Projects
Select Git revision
  • 328caf007428aac9f6c28d021e57bf3d6bbf78d3
  • master default protected
  • pw-autocomplete-off
  • redis-rate-limits
  • typehints
  • incremental-sync
  • test_instance_path
  • consistent_strings
  • qol_edits
  • v1.2.x
  • v1.x.x
  • v1.1.x
  • feature_invite_validuntil_minmax
  • Dockerfile
  • pylint_disable_consider-using-f-string
  • v1.0.x
  • roles-recursive-cte
  • v2.2.0
  • v2.1.0
  • v2.0.1
  • v2.0.0
  • v1.2.0
  • v1.1.2
  • v1.1.1
  • v1.0.2
  • v1.1.0
  • v1.0.1
  • v1.0.0
  • v0.3.0
  • v0.2.0
  • v0.1.5
  • v0.1.4
  • v0.1.2
33 results

uffd

  • Clone with SSH
  • Clone with HTTPS
  • Forked from uffd / uffd
    Source project has a limited visibility.

    c3InfoDesk Printer

    WIP

    • Set the app for running over containers.
    • Finish Makefile.
    • List on TODO.md file

    What is this?

    This is a repo for deploying the the printer system used at the c3infodesk for printing EXTREMILY NECESSARY documents


    TL;DR

    1- Clone the repo

    Clone this repo to your target system.

    2- Set the Variables

    Go tho the docker/docker-compose.yml file and edit the environment variables there.

    3- Build the Containers

    Just run the command:

    make docker_build_all

    4- Run the System

    Just run the command:

    make docker_run

    Using the system with Docker containers

    CUPS Problem

    There's till the moment, no solution for setting the CUPS container without using the UI. If you know any other way for doing it, please make a merge request.

    Stopping the host CUPS

    First of all, at the host system, you should disable cups with:

    systemctl stop cups

    Find the Printer on the host

    For using it with docker, you have first scan at the host system which port is the printer set

    lsusb

    You should update this at the docker-compose.yml file at:

      cups:
        devices:
          - /dev/bus/usb/001/007:/dev/bus/usb/001/007

    So the container can connect to the printer.

    Setting the Printer with it's Driver

    Now you can go to the running CUPS from the container at the address:

    http://localhosl:631

    And at the administration set the printer with it's driver or PPD file.

    NOTE HP Printers are tricky to find the right driver.

    After printer with driver installed

    Now will can start/re-start the others containers from the system

    Using InfluxDB

    For using the API functionalities, you have to set the ENABLED_INFLUXDB to true

    Please check also the values at the docker-compose.yml and adjust it to your needs.

    WIP

    At the moment, if the influxDB is enabled, I'm unable to set the App before generating a new token from the InfluxDB-UI :(

    The token used for generating the container can't be used for setting the organization, buckets and etc. This step have to also be genareted manually, as the same as setting the printer from the CUPS container. If you have an idea how to solve that, please make a merge request.

    So you have to start the system from the docker-compose and go trought the InfluxDB-UI for generating a new Token, then, update the value from INFLUXDB_TOKEN at the docker-compose.yml file with the new generated token. After that, it should work fine. Restart the containers from docker-compose.yml and the app container should be running.


    Printers list

    https://wiki.cccv.de/general/drucker


    Installing the the system

    Just clone this repo to your computer/Pi. Use the functions/commands setted over the Makefile


    Using the Makefile

    To list the possible commands run the command:

    make help

    Here is the list from the commands at the mmoment:

    debug_container_connect_app    Connects to the app container.
    debug_container_connect_cups   Connects to the cups container.
    debug_container_connect_proxy  Connects to the proxy container.
    debug_proxy_remove             Debug remove the proxy container.
    debug_proxy_start              Debug start the proxy container.
    docker_build_all               Build local docker image from Dockerfile from all.
    docker_build_app               Build local docker image from Dockerfile from app.
    docker_build_cups              Build local docker image from Dockerfile from cups.
    docker_build_proxy             Build local docker image from Dockerfile from proxy.
    docker_create_all              Create all containers.
    docker_create_app              Create the local app container.
    docker_create_cups             Create the local cups container.
    docker_create_proxy            Create the local app container.
    docker_remove_all              Delete the local container.
    docker_run                     Runs the app at the containers.
    docker_start_all               Start all containers.
    docker_start_app               Start the local cups container.
    docker_start_cups              Start the local cups container.
    docker_start_proxy             Start the local proxy container.
    docker_stop_all                Stop the all containers.
    docker_stop_app                Stop the local app container.
    docker_stop_cups               Stop the local cups container.
    docker_stop_proxy              Stop the local proxy container.
    local_install_reqs             Install locally the necessary python requirements.
    local_run                      Runs locally the app locally.
    local_set_venv                 Sets locally a python Virtual Environment from the PYTHON_VENV_PATH setted variable.
    local_test_lint                Runs locally lint tests locally.
    local_test_pep                 Runs locally pep8 tests locally.
    local_test_unit                Runs locally unit-tests locally.

    Adjusting the system

    You can adjust the system in 3 ways

    • Editing the config.yml
    • Setting environmental variables
    • Parsing values to the python command

    The hierarchy from each value will be over-writen is:

    config.yml --> environmental variables --> parsed values

    This means that the parsed values will have priority from the other 2 ones.

    System Environments

    This are the system environments that can be set for running the script.

    • PRINTER_NAME=EPSON_ET_2820_Series_USB
    • SERVER_PORT=8000
    • SERVER_SECRET_KEY=123456
    • DEBUG=true
    • DEBUG_DISABLE_PRINTING=false
    • VERBOSE=true
    • LOG_TO_FILE=false
    • PATH_UPLOAD=/c3printing/uploads
    • PATH_LOG_FILE=/c3printing/logs/log_01.txt
    • PATH_DATA=/c3printing/data
    • PATH_TEST_FILE=/c3printing/tests/files/test_file.pdf
    • LOGIN_USER_EMAIL=foo@bar.net
    • LOGIN_USER_PASSWD=123456
    • LOGIN_ADMIN_EMAIL=foo@bar.net
    • LOGIN_ADMIN_PASSWD=123456
    • LOGIN_API_EMAIL=foo@bar.net
    • LOGIN_API_PASSWD=123456
    • LOG_MODE=append
    • LOG_FORMAT=%(asctime)s - %(levelname)s - %(module)s - %(funcName)s - %(message)s
    • KEEP_ALIVE_MIN=15
    • NUM_DIGITS=9
    • MAX_UPLOAD_BYTES_FOLDER=4000000000
    • MAX_UPLOAD_BYTES_FILE=16000000
    • DATE_FORMAT=%Y-%m-%d_-_%H-%M-%S
    • ALLOWED_FILE_EXTENSIONS="{'png', 'jpg', 'jpeg', 'gif', 'pdf'}"
    • USE_MEM_DB=false
    • ENABLED_PRINT_WITH_OPTIONS=true
    • ENABLED_QUESTIONS=false
    • ENABLED_ABOUT=false
    • ENABLED_API=false
    • ENABLED_INFLUXDB=false
    • FILE_PREVIEW_WIDTH=800
    • FILE_PREVIEW_HEIGHT=600
    • FILE_AUTO_DELETE_AFTER_PRINT=false
    • API_TOKEN_EXPIRE_HOURS=120
    • INFLUXDB_TOKEN='Please set the influxdb token'
    • INFLUXDB_PORT=8086
    • INFLUXDB_URL='http://localhost'
    • INFLUXDB_MEASUREMENT='app-usage'
    • INFLUXDB_ROTATION_MINUTES=2
    • INFLUXDB_BUCKET='c3infodesk-print'
    • INFLUXDB_BUCKET_DESCRIPTION='Bucket used from InfoDesk at the 39c3'
    • INFLUXDB_BUCKET_RETENTION_DAYS=10

    Parsing the values

    You can see the options by running the command:

    python3 src/main.py --help

    The options are:

    usage: main.py [-h] [--debug] [--debug_disable_printing] [--verbose] [--log_to_file] [--use_mem_db] [--enabled_questions] [--enabled_about]
                   [--enabled_print_with_options] [--enabled_api] [--enabled_influxdb] [--file_auto_delete_after_print] [--path_to_upload PATH_TO_UPLOAD]
                   [--path_to_log PATH_TO_LOG] [--path_to_data PATH_TO_DATA] [--path_test_file PATH_TEST_FILE] [--port_server PORT_SERVER]
                   [--server_secret_key SERVER_SECRET_KEY] [--log_file_mode LOG_FILE_MODE] [--log_format LOG_FORMAT] [--printer_name PRINTER_NAME]
                   [--login_user_email LOGIN_USER_EMAIL] [--login_user_passwd LOGIN_USER_PASSWD] [--login_admin_email LOGIN_ADMIN_EMAIL]
                   [--login_admin_passwd LOGIN_ADMIN_PASSWD] [--login_api_email LOGIN_API_EMAIL] [--login_api_passwd LOGIN_API_PASSWD] [--keep_alive KEEP_ALIVE]
                   [--num_digits NUM_DIGITS] [--max_upload_bytes_folder MAX_UPLOAD_BYTES_FOLDER] [--max_upload_bytes_file MAX_UPLOAD_BYTES_FILE]
                   [--max_upload_pdf_pages MAX_UPLOAD_PDF_PAGES] [--max_upload_file_copies MAX_UPLOAD_FILE_COPIES] [--date_format DATE_FORMAT]
                   [--allowed_file_extensions ALLOWED_FILE_EXTENSIONS] [--file_preview_width FILE_PREVIEW_WIDTH] [--file_preview_height FILE_PREVIEW_HEIGHT]
                   [--api_token_expire_hours API_TOKEN_EXPIRE_HOURS] [--influxdb_token INFLUXDB_TOKEN] [--influxdb_organization INFLUXDB_ORGANIZATION]
                   [--influxdb_port INFLUXDB_PORT] [--influxdb_url INFLUXDB_URL] [--influxdb_measurement INFLUXDB_MEASUREMENT]
                   [--influxdb_rotation_minutes INFLUXDB_ROTATION_MINUTES] [--influxdb_bucket INFLUXDB_BUCKET]
                   [--influxdb_bucket_description INFLUXDB_BUCKET_DESCRIPTION] [--influxdb_bucket_retention_days INFLUXDB_BUCKET_RETENTION_DAYS]
    
    c3 InfoDesk Printer
    
    options:
      -h, --help            show this help message and exit
      --debug               Enable debugging information from execution.
      --debug_disable_printing
                            Disable the printing funcionallity for debugging.
      --verbose             Enable printing information from execution.
      --log_to_file         Enable writing the log to a file.
      --use_mem_db          If using the TinyDB in memory or file.
      --enabled_questions   If using the questions functionality.
      --enabled_about       If using the about functionality.
      --enabled_print_with_options
                            If using the functionality for printing with options.
      --enabled_api         If using the API functionality.
      --enabled_influxdb    If using the InfluxDB functionality.
      --file_auto_delete_after_print
                            If auto deleting the file after printing.
      --path_to_upload PATH_TO_UPLOAD
                            Path where the printing files should be uploaded.
      --path_to_log PATH_TO_LOG
                            Path where the log file should be written.
      --path_to_data PATH_TO_DATA
                            Path where the app data should be written.
      --path_test_file PATH_TEST_FILE
                            Path where the test print file location.
      --port_server PORT_SERVER
                            The port of the system
      --server_secret_key SERVER_SECRET_KEY
                            The secret key from the server
      --log_file_mode LOG_FILE_MODE
                            Mode that the log file should be written, it can be: 'append' or 'new'.
      --log_format LOG_FORMAT
                            Log format to be used.
      --printer_name PRINTER_NAME
                            Name of the printer to be used.
      --login_user_email LOGIN_USER_EMAIL
                            Email to be used for login as user for printing.
      --login_user_passwd LOGIN_USER_PASSWD
                            Password to be used for login as user for printing.
      --login_admin_email LOGIN_ADMIN_EMAIL
                            Email to be used for login as admin.
      --login_admin_passwd LOGIN_ADMIN_PASSWD
                            Password to be used for login as admin.
      --login_api_email LOGIN_API_EMAIL
                            Email to be used for login as api.
      --login_api_passwd LOGIN_API_PASSWD
                            Password to be used for login as api.
      --keep_alive KEEP_ALIVE
                            The amount of minutes to keep the file at the server before deletion.
      --num_digits NUM_DIGITS
                            The lenght of the generated code from the file to be printed.
      --max_upload_bytes_folder MAX_UPLOAD_BYTES_FOLDER
                            The maximum size in bytes that can be upload folder can keep.
      --max_upload_bytes_file MAX_UPLOAD_BYTES_FILE
                            The maximum size in bytes from a file that can be uploaded.
      --max_upload_pdf_pages MAX_UPLOAD_PDF_PAGES
                            The maximum number of pages from a PDF file that can be uploaded.
      --max_upload_file_copies MAX_UPLOAD_FILE_COPIES
                            The maximum number of copies from a file that can be printed.
      --date_format DATE_FORMAT
                            The date format to be used handiling the system.
      --allowed_file_extensions ALLOWED_FILE_EXTENSIONS
                            The allowed file extensions that the system can use.
      --file_preview_width FILE_PREVIEW_WIDTH
                            The width at the webpage for previewing a file.
      --file_preview_height FILE_PREVIEW_HEIGHT
                            The height at the webpage for previewing a file.
      --api_token_expire_hours API_TOKEN_EXPIRE_HOURS
                            How many hours till the API token to expire.
      --influxdb_token INFLUXDB_TOKEN
                            The token to be used for InfluxDB.
      --influxdb_organization INFLUXDB_ORGANIZATION
                            The organization to be used for InfluxDB.
      --influxdb_port INFLUXDB_PORT
                            The port of the InfluxDB server.
      --influxdb_url INFLUXDB_URL
                            The URL of the InfluxDB server.
      --influxdb_measurement INFLUXDB_MEASUREMENT
                            The measurement name of the InfluxDB server.
      --influxdb_rotation_minutes INFLUXDB_ROTATION_MINUTES
                            how many minutes to refresh the values at the InfluxDB server.
      --influxdb_bucket INFLUXDB_BUCKET
                            The bucket name of the InfluxDB server.
      --influxdb_bucket_description INFLUXDB_BUCKET_DESCRIPTION
                            The description from the bucket of the InfluxDB server.
      --influxdb_bucket_retention_days INFLUXDB_BUCKET_RETENTION_DAYS
                            The retention days from the bucket of the InfluxDB server.

    Accessing the System via Web

    Just go to the system IP addr from the system and to the things... if you haven't changed the SERVER_PORT, it will be 8000

    Running Locally

    http://localhost:8000

    Running from the containers

    http://localhost

    User

    • /: GET
      • Where you can upload your file.
    • /upload: POST
      • The output with the code from upladed file
    • /login: GET
      • To login at the app as administrator.
    • /logout: GET
      • To logout at the app as administrator.

    Admin

    These end-points are only accessible when logged into the system.

    • /logout: GET
      • Logout as admin.
    • /home-admin: GET | POST
      • Where the messages and the first page after login.
    • /uploaded-list: GET
      • Show all the uploaded files. Here you can print or delete the uploaded files.
    • /uploaded-clean: GET
      • Nuke all uploaded files
    • /file-print: POST
      • Return page with the message from printing a file.
    • /file-print-options: POST
      • Return page with the message from printing a file with printing options.
    • /file-preview: POST
      • Opens a new Tab with the file content.
    • /file-delete: POST
      • Return page with the message from deleting a file.
    • /remove-all-files: POST
      • A route for nuking all files on the system.
    • /docs/index.html: GET
      • A route for reading the documentaion of this project.

    Debug

    These endpoints are only enable when DEBUG is set to true

    • /debug-printers: GET | POST
      • Here you can list all the printers recognized from the app using CUPS and printing a test file.
    • /debug-sys: GET
      • Display a couple of tips for debugging the system and also all the setted values.
    • /debug-api: GET
      • Display the generated token_access and token_refresh values.

    Questions

    These endpoints are only enable when ENABLED_QUESTIONS is set to true

    • /most-asked-questions: GET | POST
      • Read, update and add a new most common questions.
    • /set-question: GET | POST
      • Add or update the questions on the system.


    Accessing the System via API

    For using the API functionalities, you have to set the ENABLED_API to true

    POST /api/login

    Creating new tokens are only accessible when the app are running at debug mode

    curl -X POST \
      http://localhost:8000/api/login \
      -u api@39c3.local:123456

    GET /api/create-refresh-token

    curl -X POST \
      http://localhost:8000/api/create-refresh-token \
      -H 'Authorization: Bearer YOUR_REFRESH_TOKEN' \
      -H 'Content-Type: application/json' \
      -d '{"refresh_token": "YOUR_REFRESH_TOKEN"}'

    GET /api/test

    curl -X GET \
      http://your-app-url.local/api/test \
      -H 'Authorization: Bearer YOUR_ACCESS_TOKEN' \
      -H 'Content-Type: application/json'

    InfoDesk Printer

    37c3

    https://support.hp.com/de-de/drivers/hp-laserjet-pro-m402dn/model/7458632

    38c3

    TODO: Find this in WIKI


    License