Code Monkey home page Code Monkey logo

warp's Introduction

Announcement

$${\color{red}looking\ for\ a\ maintainer}$$ Recently, I haven't had too much time to maintain this project. There are a couple of great PRs waiting for my review and merge, and I'm sad that I'm not able to do that. So, I'm looking for a maintainer for this project. If you are an experienced Python and JavaScript (full-stack) developer, I'll be more than happy to accept your help! Please reach out to me via email (available in git-log).

WARP: Workspace Autonomous Reservation Program

The story of this project begins when, due to COVID-19, we have converted our regular office into a hybrid of regular and hot-desk assignments. We needed to find a solution for desk reservations, transparency of that, and detailed logging of who was in the office for epidemic purposes.

I've quickly evaluated a couple of existing solutions, but they were either too big and complicated and/or too expensive. As I assumed that other people would have the same challenge I had, I decided to spend my after-hours time making an open-source tailored system for the need. Yes - it is free as speech, not as beer.

What WARP can do

  • It allows people to book / change / unbook desks (or even parking stalls) in the office.
  • It allows people to check who else will be in the office.
  • It works on mobile.
  • All is done in an easy, visual way.
  • Generate a report of past bookings and export it to Excel file

More advanced features

  • Seats can be limited to certain people, so other people cannot book them (it is called assigned seats).
  • Seats can be disabled, so people don't see them at all.
  • Multiple zones (maps) can be created, for example, floors or parking.
  • Zones can be grouped. One person can have only one seat booked simultaneously in a zone group (so you can have one group for floors and another group for parking stalls).
  • Admin(s) can book / modify / unbook seat for any user.
  • Full admin interface to add/remove/edit maps, zones, groups, and users.
  • SAML2.0 support - via Apache mod_auth_mellon module.
  • LDAP and Active Directory - via LDAP3 library.
  • Translations - currently, English and Polish are supported.

What I'm not even planning to do

  • Approvals - the main goal of the system was to make it autonomous and management-free. So I don't intend to implement approval flows.
  • Timezone support - the selected time is always in the same timezone as a zone. It works well and is simple. But in case someone would like to have a couple of zones in different timezones and keep the one person one seat at a given time rule across these timezones, this will fail.

What browsers are supported

To be honest, I was not paying much attention to browser compatibility, nor was I extensively testing it on other browsers than Chrome and Firefox. Nevertheless, all modern browsers should be supported (definitely not IE).

Is there any demo?

demo animation

It is so easy to run it via docker compose that I have removed the demo, which was available some time ago.

Deployment

During the first run on an empty database, WARP will populate the database schema and create an admin user.

Default admin credentials are: admin:noneshallpass

Demo quickstart

The preferred way to deploy is to run it via Docker. You need a working docker, and I won't cover it here.

docker compose

From the command line:

# clone the repository
$ git clone https://github.com/sebo-b/warp.git
$ cd warp

$ docker compose -f demo_compose.yaml up

After that, open http://127.0.0.1:8080 in your browser and log in as admin with password noneshallpass.

without docker compose (but why?)

From the command line:

# clone the repository
$ git clone https://github.com/sebo-b/warp.git
$ cd warp

# build docker image (you can skip hash if you don't want to track it)
$ export GIT_HASH=`git log -1 --format=%h`
$ docker build -t warp:latest -t warp:$GIT_HASH .

# install postrgres (what I cover here is a simplistic way just to run a demo)
$ docker pull postgres
$ docker run --name warp-demo-db -e POSTGRES_PASSWORD=postgres_password -d postgres
$ export WARP_DEMO_DB_IP=`docker inspect  -f '{{range.NetworkSettings.Networks}}{{.IPAddress}}{{end}}' warp-demo-db`

# start warp
$ docker run --name warp-demo-wsgi \
> --env 'WARP_DATABASE=postgresql://postgres:postgres_password@warp-demo-db:5432/postgres' \
> --env WARP_SECRET_KEY=mysecretkey \
> --env WARP_DATABASE_INIT_SCRIPT='["sql/schema.sql","sql/sample_data.sql"]' \
> --add-host=warp-demo-db:${WARP_DEMO_DB_IP} -d warp:latest
$ export WARP_DEMO_WSGI_IP=`docker inspect  -f '{{range.NetworkSettings.Networks}}{{.IPAddress}}{{end}}' warp-demo-wsgi`

# install nginx as wsgi rewerse proxy
$ docker pull nginx
$ docker run --add-host=warp-demo-wsgi:${WARP_DEMO_WSGI_IP} --mount type=bind,source="$(pwd)"/res/nginx.conf,target=/etc/nginx/conf.d/default.conf,readonly -d -p 127.0.0.1:8080:80 nginx

After that, open http://127.0.0.1:8080 in your browser and log in as admin with password noneshallpass.

without Docker - the old way

You need a working Python3 environment, Node.js, and PostgreSQL, and I won't cover it here. This is not a preferred way, use it only for debugging or development purposes. Things may change, and this section can be outdated - but I assume that you know what you are doing.

From the command line:

# clone repo
$ git clone https://github.com/sebo-b/warp.git
$ cd warp

# create virtual envirnoment and activate it
$ python3 -m venv --prompt warp .venv
$ source .venv/bin/activate

# install python requirements
# if this raises an error in psycopg2, either install its all build dependencies
# or change psycopg2 to psycopg2-binary in requirements.txt
$ pip install -r requirements.txt

# compile JavaScript files
$ pushd js
$ npm ci
$ npm run build
$ popd

# setup Flask and database URL
$ export FLASK_APP=warp
$ export FLASK_ENV=development
$ export WARP_DATABASE=postgresql://warp:warp@localhost:5432/warp

# run the app
$ flash run

After that, open http://127.0.0.1:5000 in your browser and log in as admin with password noneshallpass.

Production environment

For the production environment, I recommend running Nginx and PostgreSQL on separate VMs. Then (even multiple) WARP image can be simply started via Docker and rev-proxed from Nginx.

Each configuration parameter (check config.py) can be passed via the envirnoment as WARP_varname. As environment variables as passed as strings, they need to be parsed into Python types and data structures. To do that values are first converted to lower case and then json.loads is used. If that fails variable is treaten as string. This makes possible to pass integers, floats, booleans as well as dicts, arrays and None value (as JSON null).

SECRET_KEY

For the production environment, make sure that you have generated SECRET_KEY used for signing cookies. It is defined in config.py.

Flask documentation mentions this method to generate it:

$ python -c 'import os; print(os.urandom(16))'

Alternatively, you can use OpenSSL and Sed:

$ openssl rand -hex 16 | sed 's/\(..\)/\\x\1/g;s/^/b"/;s/$/"/'

or wrap it into Python:

$ python -c 'from subprocess import run; print(run(["openssl","rand","16"],capture_output=True).stdout)'

Language

Change LANGUAGE_FILE variable in config.py or set WARP_LANGUAGE_FILE environment variable. Currently, language is global for the instance.

Advanced configuration

LDAP authentication (including Active Directory)

WARP supports authentication against an LDAP server. In this way your LDAP directory users to log in on your WARP installation.

To enable LDAP auth, you need to set AUTH_LDAP to True and at least configure LDAP_SERVER_URL, LDAP_USER_DN_TEMPLATE. Probably you will need to tweak more parameters to make it working with your LDAP setup, so keep reading.

This plugin supports:

  • LDAP over plain text, SSL or StartTLS
  • SIMPLE or NTLM LDAP authentication
  • automatic Warp user creation on the first login
  • replicating user name and user groups from LDAP
  • limiting access only to users within a specific LDAP group(s)
  • exclude users (e.g. admins) from LDAP login

Configuration variables

Please note that every variable can be set either in the config file or via the environment (in that case, it needs to be prefixed by WARP_ string).

variable: AUTH_LDAP
type: boolean
default value: False
description: If set to True enables LDAP authentication
variable: LDAP_SERVER_URL
type: string
default value: None (have to be defined)
description: Server url, either ldap://address[:port] or ldaps://address[:port]
It must be ldap:// for StartTLS
variable: LDAP_AUTH_TYPE
type: string: SIMPLE or NTLM
default value: SIMPLE
description: LDAP authentication type.
For NTLM see Active Directory authentication for more details.
variable: LDAP_STARTTLS
type: boolean
default value: True
description: If StartTLS should be invoked before bind.
variable: LDAP_VALIDATE_CERT
type: boolean
default value: False
description: If server certificate should be validated for SSL or StartTLS
variable: LDAP_TLS_VERSION
type: string: TLSv1, TLSv1.1 or TLSv1.2
default value: None
description: TLS version to be user.
If not set, default value from Python SSL module is used.
variable: LDAP_TLS_CIPHERS
type: string
default value: None
description: Limit TLS only to specified ciphers.
If not set, default value from Python SSL module is used.
variable: LDAP_USER_TEMPLATE
type: string
default value: None
description: Template used for user authentication (bind) to LDAP. It must contain {login} placeholder.
For OpenLDAP it is usually a distinguished name, for AD it is usually Domain\\{login}
example value: OpenLDAP: uid={login},ou=users,dc=example,dc=org
AD: SAMDOM\{login}
variable: LDAP_USER_SEARCH_BASE
type: string
default value: None
description: Search base used for fetching user data. If this is not defined, LDAP_USER_TEMPLATE is used as it is usually configured as DN for OpenLDAP.
It can contain {login} placeholder.
example value: OpenLDAP: None
AD: cn=users,dc=samdom,dc=example,dc=org
variable: LDAP_USER_SEARCH_FILTER_TEMPLATE
type: string
default value: (objectClass=person)
description: Search filter used for fetching user data.
If LDAP_USER_SEARCH_BASE is DN, it can even be (objectClass=*).
example value: OpenLDAP: (objectClass=*)
AD: (&(sAMAccountName={login})(objectClass=user))
variable: LDAP_USER_NAME_ATTRIBUTE
type: string
default value: cn
description: Full user name LDAP atribute.
variable: LDAP_GROUP_SEARCH_BASE
type: string
default value: None (have to be defined)
description: Base for searching for user groups.
Check the next sections for more advanced examples.
example value: OpenLDAP: ou=groups,dc=example,dc=org
AD: CN=Users,DC=samdom,DC=example,DC=org
variable: LDAP_GROUP_SEARCH_FILTER_TEMPLATE
type: string
default value: (&(memberUid={login})(cn={group}))
description: Search filter for user's group lookup.
It must contain {login} and {group} placeholders.
Check the next sections for more advanced examples.
example value: AD: (&(sAMAccountName={login})(objectClass=user)(memberOf:1.2.840.113556.1.4.1941:={group}))
variable: LDAP_GROUP_MAP
type: array of tuples
default value: [ [null,null] ]
description: See LDAP group mapping section.
variable: LDAP_GROUP_STRICT_MAPPING
type: boolean
default value: False
description: Should user be removed from Warp groups if such mapping is not present in LDAP.
See LDAP group mapping section for more details.
variable: LDAP_EXCLUDED_USERS
type: array of strings
default value: []
description: List of logins to be excluded from LDAP authentication.
This can be usable for admins

LDAP group mapping

With a proper LDAP_GROUP_MAP and LDAP_GROUP_STRICT_MAPPING you can achieve the following scenarios:

  • allow only limited LDAP group to login to Warp
  • add users to Warp groups based on LDAP groups
  • remove users from Warp groups based on LDAP groups
  • add users to specified default Warp groups

LDAP_GROUP_MAP must be an array of arrays of two strings. The first string is LDAP group, the second string is Warp group.

You can interpret that in the following way:

  • what LDAP groups are allowing user to log in to Warp
  • to what WARP groups user should be added to, based on LDAP groups

The following configurations of an entry are possible:

[
['LDAP group 1',null],
['LDAP group 2',null]
]

User must be in one of the LDAP group 1 or LDAP group 2 to be allowed to log in to Warp.

[
['LDAP group 1','WARP group A'],
['LDAP group 2','WARP group B']
]

As in the previous example user must be in one of the LDAP group 1 or LDAP group 2 to be allowed to log in to Warp. In addition, during logging in user will be also accordingly added to WARP group A and/or WARP group B (based on LDAP group membership).

[
['LDAP group 1',null],
[null,'WARP group A']
[null,'WARP group B']
]

User must be in the LDAP group 1 to be allowed to log in to Warp (the first entry). During logging in user will be always added to WARP group A and WARP group B.

[
[null,null],
['LDAP group 1','WARP group A'],
['LDAP group 2','WARP group B']
]

The first entry ([null,null]) changes the standard behaviour and every LDAP user will be allowed to log in to Warp. In addition if user is in LDAP group 1 and/or LDAP group 2 will be accordingly added to WARP group A and/or WARP group B.

Of course you can build a more complicated scenarios with multiple mappings, multiple default Warp, and multiple LDAP groups without a mapping.

Only users from LDAP groups specified in this array are allowed to login to Warp, unless there is a special [null,null] entry in this array.

Warp groups are not automatically created by LDAP plugin, users are only added (and possibly removed) to an existing Warp groups.

If LDAP_GROUP_STRICT_MAPPING is set to False users are not removed from Warp groups based on LDAP group mapping mechanism. If LDAP_GROUP_STRICT_MAPPING is set to True users are removed from all Warp groups not matched by the mapping.

Active Directory authentication

The distinguished name is (usually?) not used for authenticating against Active Directory. The user name is in the form of Domain\Username, in such scenario the following variable needs to be properly configured (example values given):

WARP_LDAP_USER_TEMPLATE = "SAMDOM\\{login}"
WARP_LDAP_USER_SEARCH_BASE = "cn=Users,dc=samdom,dc=example,dc=org"
WARP_LDAP_USER_SEARCH_FILTER_TEMPLATE = "(&(sAMAccountName={login})(objectClass=user))"

This applies to both SAMPLE and NTML authentication mechanisms.

Please also note that backslash in most of the cases is the escape character, so after the domain in WARP_LDAP_USER_TEMPLATE, it usually needs to be escaped (\\).

memberOf LDAP attribute and LDAP_MATCHING_RULE_IN_CHAIN

In case you use memberOf (or similar) LDAP attribute to assign users to groups, the follwing setup should do the trick (example values given):

LDAP_GROUP_SEARCH_BASE = "CN=Users,DC=samdom,DC=example,DC=org"
LDAP_GROUP_SEARCH_FILTER_TEMPLATE = "(&(sAMAccountName={login})(objectClass=user)(memberOf={group}))"

In addition, if your server supports LDAP_MATCHING_RULE_IN_CHAIN you can specify it as follow:

LDAP_GROUP_SEARCH_BASE = "CN=Users,DC=samdom,DC=example,DC=org"
LDAP_GROUP_SEARCH_FILTER_TEMPLATE = "(&(sAMAccountName={login})(objectClass=user)(memberOf:1.2.840.113556.1.4.1941:={group}))"

Example configuration

For OpenLDAP

WARP_AUTH_LDAP = "True"
WARP_LDAP_SERVER_URL = "ldap://ldap.example.org:1389"
WARP_LDAP_USER_TEMPLATE = "uid={login},ou=users,dc=example,dc=org"
WARP_LDAP_GROUP_SEARCH_BASE = "ou=groups,dc=example,dc=org"
WARP_LDAP_GROUP_MAP = "[ ['WARP_allowed',null], [null,'Everyone'] ]"
WARP_LDAP_EXCLUDED_USERS = "['admin']"

# the following values are default, keeping here just for clarity
WARP_LDAP_STARTTLS = "True"
WARP_LDAP_VALIDATE_CERT = "False"
WARP_LDAP_USER_NAME_ATTRIBUTE = "cn"
WARP_LDAP_GROUP_SEARCH_FILTER_TEMPLATE = "(&(memberUid={login})(cn={group}))"

For Active Directory

WARP_AUTH_LDAP = "True"
WARP_LDAP_SERVER_URL = "ldaps://ldap.example.org:636"
WARP_LDAP_VALIDATE_CERT = "True"
WARP_LDAP_AUTH_TYPE = "NTLM"
WARP_LDAP_USER_TEMPLATE = "SAMDOM\\{login}"
WARP_LDAP_USER_SEARCH_BASE = "cn=Users,dc=samdom,dc=example,dc=org"
WARP_LDAP_USER_SEARCH_FILTER_TEMPLATE = "(&(sAMAccountName={login})(objectClass=user))"
WARP_LDAP_GROUP_SEARCH_BASE = "CN=Users,DC=samdom,DC=example,DC=org"
WARP_LDAP_GROUP_SEARCH_FILTER_TEMPLATE = "(&(sAMAccountName={login})(objectClass=user)(memberOf:1.2.840.113556.1.4.1941:={group}))"
WARP_LDAP_EXCLUDED_USERS = "['admin']"
WARP_LDAP_GROUP_MAP = "[ ['CN=warp_allowed,CN=Users,DC=samdom,DC=example,DC=com','AD users'], [null,'Everyone'] ]"

How to import users

You can add them manually one by one via the users' management tab or import them directly to the database. Basically, insert users to user table, look at the table definition in warp/sql/schema.sql.

The role is one of:

10 - admin
20 - regular user
90 - account blocked

Password is a hash used by werkzeug.security.check_password_hash (more documentation can be found here), by default (in my configuration) it is pbkdf2:sha256 with 16 bytes salt and 260,000 iterations.

You can generate it with Python (just make sure you have activated the environment where Flask is installed):

python -c 'from getpass import getpass; from werkzeug.security import generate_password_hash; print(generate_password_hash(getpass()))'

Other

How can I support you

Oh.. I was not expecting that, but you can send a beer via PayPal: https://paypal.me/sebo271

Can I pay for a feature or support

Reach me out on my mail (git log is your friend), and we can discuss.

warp's People

Contributors

a-bertil avatar aileo avatar dreadnoth avatar echu2013 avatar gjacquenot avatar mpolitze avatar n-rodrig avatar sebo-b avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

warp's Issues

error while loading shared libraries: libpcre.so.3

Sorry, but the error persists. I just tried to get it working but got the same error.
I used a fresh debian inside proxmox. The hints from the closed issue regarding the same problem did not help.
Do you have an idea what to do?
Kind regards
Tueftler

Active Directory access

Hi is possible to add non non anonymous binds
i need to use
RootDN and passwort to access.

Multiple date editing tries to remove booking not belonging to the current user

Hello,

It seems that editing multiple date does not perform proper checking about whose booking is edited.

Considering the following bookings:

  • Foo has a booking for seat 1.3 on 2024-05-17 09:00-17:00
  • Bar has a booking for the same seat, on 2024-05-20 09:00-17:00

In this configuration, if Bar tries to book any seat for both dates, the application tries to remove the booking of Foo, resulting in a "You don't have required permissions in the zone. (102)" error.

I believe this is the same bug as reported by #40

Thanks,

Guidance for a productive environment

Hello Sebo-b

Is there perhaps a tutorial on how I can set up WARP on my server and use it productively?

I have already read the README and found out that it doesn't go any further after the secret key.

Maybe there is a possibility that we contact each other by e-mail, and you explain to me how I can use WARP, or maybe you have a documentation or description that you can send me.

Thank you

libpcre.so.3: cannot open shared object

when i try to run i have

warp-demo-wsgi-1 | uwsgi: error while loading shared libraries: libpcre.so.3: cannot open shared object file: No such file or directory

"Logged as" visible for all type of roles

Hello,
Is there any possibility to see the "logged as" information for every user logged, not only for users with Manager role?
Great and amazing job done with WARP!
Thanks and regards!

Recent peewe version makes it fail on group zone assignement

Hi, sebo-b:

First of all, I would like to thank you for this project. Great job!

Second, I have found that last time I built the whole project, the resulting deployment failed when assigning groups to zones. After a little research, I found that something was wrong in :

_cab_warp-warp-demo-wsgi-1 | File "/usr/local/lib/python3.10/site-packages/warp/xhr/zones.py", line 209, in assign

cab_warp-warp-demo-wsgi-1 | raise ApplyError(f"Wrong number of affected rows {rowCount} != "+ str(len(jsonData['change'])), 223)_

Something seems to have changed on last version of peewe. The easy solution is to force peewe version en requirements.txt as peewee==3.14.10, doing so everything works fine.

I hope this pice of advise is usefull for new users.

cheers!

Docker install failed

After following the docker setup instructions in the readme, an error showed up:

python setup.py bdist_wheel -d wheel:
/usr/local/lib/python3.11/site-packages/setuptools/dist.py:548: UserWarning: The version specified ('2.0-rolling') is an invalid version, this may not work as expected with newer versions of setuptools, pip, and PyPI. Please see PEP 440 for more details.

To finish installing, change the version param in setup.py from 2.0-rolling to 2.0.

I'm using MacOSX Ventura 13.1; Docker 4.16.2.

Seat stays booked after time slot elapses

Hi,

Thanks for this project. I was wondering if there was a way for the seats to be freed after the time slot elapses. As of now, it stays booked even after the time-slot has elapsed.

Need help with AD

Hi, could I get your help setting up the AD integration for a "beer at Paypal or something ;-)"? Unfortunately we can't get it done (for whatever reason). We followed the documentation but it doesn't work.

Thanks best regards

LDAP configuration

👋

I would like to setup the LDAP authentification.

I usually have a bind_cn and a password fields to provide but I don't know where to set it in warp configuration.

The bind_cn field looks generally like that: (bind_dn: 'CN=my_Ldap,OU=my_ou,DC=my_domain,DC=com')

Any help would highly be appreciated!

Guillaume

Cannot build demo quickstart because of error related to buildkit

Hi,
I'm unable to docker-compose the demo, I get the following error:
ERROR: Service 'warp-demo-wsgi' failed to build: the --mount option requires BuildKit. Refer to https://docs.docker.com/go/buildkit/ to learn how to build images with BuildKit enabled
I'm using a Ubuntu 20.04.

Tried to set env DOCKER_BUILDKIT=1 but I must be missing something.

Any advice? Thank you.

isort and black

@sebo-b , would you be interested in using isort and then black for code formatting?

  • isort would provide a nice way to import all external and internal code (There would be mixed between internal and external code as can be seen here)
  • black would format all lines (For there would be no mix between single and double quote usage)

If so, I can propose the associated pull request. Or @sebo-b , you can do it yourself, as it changes mainly line ownership.

I use these commands

isort --profile black -l 100 my_code
black -l 100 my_code

Originally posted by @Gjacquenot in #8 (comment)

Meeting room feature

Hello,

First, thank you for this great project!

Are you also planning to add the ability to book a meeting room?

Useful features:

  • title and description, i.e. what is currently going on there and what will be needed for the meeting
  • people participating in the meeting
  • a group allowed to book a room in a given ZONE
  • maximum number of hours for a person in a given user group to reserve rooms in a given ZONE (per week/month)

WARP without Docer

Hello Sebo-b

thanks for your previous answer.

Is there a way to install and use WARP without Docker?

I can't build any workplaces

Under config.py, I have changed

LANGUAGE_FILE="i18n/en.js" to LANGUAGE_FILE="i18n/de.js". And config.py => from WEEKS_IN_ADVANCE = 1 to WEEKS_IN_ADVANCE = 5 so the map is not shown any more and I build any workplaces. The Bookings tab is also gone 😱
WARP.

Is the project open to PRs ?

Hello,

First, thank you for this great project.

I deployed it in our little company as we do part time remote and we do not have enough desk on-site for everyone to come at once.

I developed several features to match our needs, and I tried to keep them as generic as I could so I would like to know if you were interested in pull requests for some of them :

  • Weekdays omission, hide some weekdays based on an environment variable, useful to hide weekends in the list (and optimize screen use).
  • Opening hours, restrains the time slider to a min and max values based on two environment variables.
  • Mixed group zones, add an optional group override on seats to handle them as part of a different group than their parent zone.
    Used to separate callpods and meeting rooms from open-space desks in the same floor so you don't have to "release" the open-space desk while in a meeting or call.
    It does not affect the behavior if no seat group is set.
  • Azure AD / Microsoft Entra Authentication, use SSO with Microsoft account and synchronize groups just like LDAP.

Disclaimer : I am not familiar with python so some of the code might be awful...

i18n

Hi, whenever I have set, like the doku says, the language in the WARP_LANGUAGE_FILE and restarted the app with a "custom" language (german in this case), all entries and links disappear. Unfortunately, the app does not load the additional i18n file. Do you have an idea what could be causing this?

Duplicate Account Creation Possible when used with LDAP

When using an LDAP server as the authentication provider, duplicate user accounts can be created inside Warp.

By default, the user's DN is case-insensitive (this can be defined in the LDAP schema). Thus, the user can sign in successfully with any combination of capital and lowercase letters matching his username. For example, Username, userName, and username are all valid and accepted. However, as Warp stores the username in a case-sensitive manner, this allows the creation of multiple accounts within Warp for the same LDAP user.

Treating the username as lowercase by default (i.e., by calling .lower() on the login argument) solves the issue. Nevertheless, I don't know if that is the best solution. For the case where the LDAP DN is case-sensitive, this solution will result in different usernames stored with Postgres. If .lower() is executed before calling the LDAP server, as shown below, this will result in an authentication error if the DN includes any capital letter.

Possible Solution

--- a/warp/auth_ldap.py
+++ b/warp/auth_ldap.py
@@ -207,7 +207,7 @@ def login():
 
     if flask.request.method == 'POST':
 
-        u = flask.request.form.get('login')
+        u = flask.request.form.get('login').lower()
         p = flask.request.form.get('password')
 
         LDAP_EXCLUDED_USERS = flask.current_app.config.get('LDAP_EXCLUDED_USERS', [])

Wokrspaces for a month

First I would like to thank you after a bit of back and forth I managed to get Warp running.

Is there the possibility in the zone also like selection of the date to extend to a month so that you can see directly the whole month and book workplaces

User: Admin Role -> Seat assign problem

Hi, thank you for WARP it is a great tool.
However, I wanted to ask if only I have the following problem locally or if you can also prove it.
If additional users with an admin role are created with the main or example admin (for teamleaders, for example), they cannot assign seats, only book them themselves. The example admin himself can also assign seats. Is that how it should work?

Thank you for your work and your answers :-).
Best regards from Hamburg
J.

Error HTTP500 with the Demo quickstart

Hi,
I want to try WARP on my computer. I followed the doc here ; https://github.com/sebo-b/warp#demo-quickstart

I did the git clone without any errors.

When I executed the docker compose I got an error HTTP 500 on the url http://127.0.0.1:8080/

Here are the traces:

(base) pascal@pascal-xps:~/Dev/warp$ docker compose -f demo_compose.yaml up
[+] Running 20/20
 ⠿ warp-demo-nginx Pulled                                                                                                                               10.8s
   ⠿ f03b40093957 Pull complete                                                                                                                          6.9s
   ⠿ eed12bbd6494 Pull complete                                                                                                                          7.5s
   ⠿ fa7eb8c8eee8 Pull complete                                                                                                                          7.6s
   ⠿ 7ff3b2b12318 Pull complete                                                                                                                          7.7s
   ⠿ 0f67c7de5f2c Pull complete                                                                                                                          7.8s
   ⠿ 831f51541d38 Pull complete                                                                                                                          7.9s
 ⠿ warp-demo-db Pulled                                                                                                                                  24.4s
   ⠿ 9d674c93414d Pull complete                                                                                                                          7.0s
   ⠿ de781e8e259a Pull complete                                                                                                                          7.6s
   ⠿ 5ea6efaf51f6 Pull complete                                                                                                                          7.8s
   ⠿ b078d5f4ac82 Pull complete                                                                                                                          8.4s
   ⠿ 97f84fb2a918 Pull complete                                                                                                                          8.7s
   ⠿ 5a6bf2f43fb8 Pull complete                                                                                                                          8.8s
   ⠿ f1a40e88fea4 Pull complete                                                                                                                          9.0s
   ⠿ 4be673794a1a Pull complete                                                                                                                         21.2s
   ⠿ 9d72f84fb861 Pull complete                                                                                                                         21.3s
   ⠿ 5d52569da92e Pull complete                                                                                                                         21.4s
   ⠿ 5d48fbe991ff Pull complete                                                                                                                         21.4s
   ⠿ 4ae692d11ad3 Pull complete                                                                                                                         21.5s
[+] Building 119.9s (27/28)                                                                                                                                   
 => [internal] load build definition from Dockerfile                                                                                                     0.1s
 => => transferring dockerfile: 1.77kB                                                                                                                   0.1s
 => [internal] load .dockerignore                                                                                                                        0.1s
 => => transferring context: 2B                                                                                                                          0.1s
 => [internal] load metadata for docker.io/library/python:3-slim                                                                                       119.6s
 => [compile-image  1/19] FROM docker.io/library/python:3-slim@sha256:eaee5f73efa9ae962d2077756292bc4878c04fcbc13dc168bb00cc365f35647e                   3.2s
 => => resolve docker.io/library/python:3-slim@sha256:eaee5f73efa9ae962d2077756292bc4878c04fcbc13dc168bb00cc365f35647e                                   0.1s
 => => sha256:05c2151a829c7c573d1d540463c8928df99235dca88fba7ae468657f3a0dda73 1.08MB / 1.08MB                                                           1.2s
 => => sha256:d31163dd7cf1fe77e2bb90104ec4d35cff4b4763dc39a431e376a4a93985a14f 11.94MB / 11.94MB                                                         2.0s
 => => sha256:e2dbff2a8d756ecb457f520679428777b7b0df55c2302fda65efb6281460f8e6 244B / 244B                                                               0.2s
 => => sha256:eaee5f73efa9ae962d2077756292bc4878c04fcbc13dc168bb00cc365f35647e 1.65kB / 1.65kB                                                           0.0s
 => => sha256:7b866f12347fbfccbb73284d9c04bbd67b5f9cca8b46786e9fa2bd07af53f09a 1.37kB / 1.37kB                                                           0.0s
 => => sha256:e77f21686f0b6267e49062c42fdf37aa9b87006eb07f402ba0acea8bed38ac06 6.83kB / 6.83kB                                                           0.0s
 => => sha256:10fe820b307733181983e560080d8ef1d79cf8f2fd8105fa3e020dbe4fe2d606 3.37MB / 3.37MB                                                           1.6s
 => => extracting sha256:05c2151a829c7c573d1d540463c8928df99235dca88fba7ae468657f3a0dda73                                                                0.1s
 => => extracting sha256:d31163dd7cf1fe77e2bb90104ec4d35cff4b4763dc39a431e376a4a93985a14f                                                                0.3s
 => => extracting sha256:e2dbff2a8d756ecb457f520679428777b7b0df55c2302fda65efb6281460f8e6                                                                0.0s
 => => extracting sha256:10fe820b307733181983e560080d8ef1d79cf8f2fd8105fa3e020dbe4fe2d606                                                                0.2s
 => [internal] load build context                                                                                                                        0.6s
 => => transferring context: 4.20MB                                                                                                                      0.6s
 => [compile-image  2/19] WORKDIR /opt/warp                                                                                                              0.6s
 => [compile-image  3/19] RUN apt-get update                                                                                                             3.3s
 => [compile-image  4/19] RUN mkdir debs &&     apt-get install -y -d --no-install-recommends libpq5 mime-support &&     cp /var/cache/apt/archives/*de  2.5s
 => [compile-image  5/19] RUN     apt-get install -y wget &&     NODE_ARCH=$(uname -m | sed 's/^x86_64\|amd64$/x64/;s/^i.*86$/x86/;s/^aarch64$/arm64/')  6.8s 
 => [compile-image  6/19] RUN apt-get install -y build-essential libpq-dev libpcre3 libpcre3-dev                                                        45.8s 
 => [compile-image  7/19] RUN pip install --upgrade setuptools && pip install wheel uwsgi                                                                9.7s 
 => [compile-image  8/19] RUN pip wheel -w wheel/ uwsgi                                                                                                  0.9s 
 => [compile-image  9/19] WORKDIR /opt/warp/js/                                                                                                          0.1s 
 => [compile-image 10/19] COPY js/package.json js/package-lock.json ./                                                                                   0.2s 
 => [compile-image 11/19] RUN npm ci                                                                                                                    11.0s 
 => [compile-image 12/19] COPY js/ ./                                                                                                                    0.1s 
 => [compile-image 13/19] RUN npm run build                                                                                                              7.0s 
 => [compile-image 14/19] WORKDIR /opt/warp                                                                                                              0.2s 
 => [compile-image 15/19] COPY requirements.txt ./                                                                                                       0.1s 
 => [compile-image 16/19] RUN pip wheel -w wheel -r requirements.txt                                                                                    11.8s
 => [compile-image 17/19] COPY warp ./warp                                                                                                               0.2s
 => [compile-image 18/19] COPY setup.py MANIFEST.in ./                                                                                                   0.1s
 => [compile-image 19/19] RUN python setup.py bdist_wheel -d wheel                                                                                       0.8s
 => [stage-1 3/6] RUN     --mount=type=bind,from=compile-image,source=/opt/warp/debs,target=./debs     dpkg -i debs/*.deb                                3.8s
 => [stage-1 4/6] RUN     --mount=type=bind,from=compile-image,source=/opt/warp/wheel,target=./wheel     pip install --no-index wheel/*.whl              3.6s
 => [stage-1 5/6] COPY --from=compile-image /opt/warp/warp/static ./static                                                                               0.2s
 => [stage-1 6/6] COPY res/warp_uwsgi.ini .                                                                                                              0.1s
 => exporting to image                                                                                                                                   0.5s
 => => exporting layers                                                                                                                                  0.5s
 => => writing image sha256:56609d4a45ff9aeb691d6fc411a80162534a4d29acdd33b6592bff08af535abd                                                             0.0s
 => => naming to docker.io/library/warp-warp-demo-wsgi                                                                                                   0.0s

Use 'docker scan' to run Snyk tests against images to find vulnerabilities and learn how to fix them
[+] Running 4/4
 ⠿ Network warp_default              Created                                                                                                             0.2s
 ⠿ Container warp-warp-demo-db-1     Created                                                                                                             0.6s
 ⠿ Container warp-warp-demo-wsgi-1   Created                                                                                                             0.3s
 ⠿ Container warp-warp-demo-nginx-1  Created                                                                                                             0.4s
Attaching to warp-warp-demo-db-1, warp-warp-demo-nginx-1, warp-warp-demo-wsgi-1
warp-warp-demo-db-1     | The files belonging to this database system will be owned by user "postgres".
warp-warp-demo-db-1     | This user must also own the server process.
warp-warp-demo-db-1     | 
warp-warp-demo-db-1     | The database cluster will be initialized with locale "en_US.utf8".
warp-warp-demo-db-1     | The default database encoding has accordingly been set to "UTF8".
warp-warp-demo-db-1     | The default text search configuration will be set to "english".
warp-warp-demo-db-1     | 
warp-warp-demo-db-1     | Data page checksums are disabled.
warp-warp-demo-db-1     | 
warp-warp-demo-db-1     | fixing permissions on existing directory /var/lib/postgresql/data ... ok
warp-warp-demo-db-1     | creating subdirectories ... ok
warp-warp-demo-db-1     | selecting dynamic shared memory implementation ... posix
warp-warp-demo-db-1     | selecting default max_connections ... 100
warp-warp-demo-db-1     | selecting default shared_buffers ... 128MB
warp-warp-demo-db-1     | selecting default time zone ... Etc/UTC
warp-warp-demo-db-1     | creating configuration files ... ok
warp-warp-demo-db-1     | running bootstrap script ... ok
warp-warp-demo-wsgi-1   | [uWSGI] getting INI configuration from warp_uwsgi.ini
warp-warp-demo-db-1     | performing post-bootstrap initialization ... ok
warp-warp-demo-wsgi-1   | *** Starting uWSGI 2.0.21 (64bit) on [Mon Jun  5 14:55:05 2023] ***
warp-warp-demo-wsgi-1   | compiled with version: 10.2.1 20210110 on 05 June 2023 14:54:15
warp-warp-demo-wsgi-1   | os: Linux-5.15.49-linuxkit #1 SMP Tue Sep 13 07:51:46 UTC 2022
warp-warp-demo-wsgi-1   | nodename: 37a385307f73
warp-warp-demo-wsgi-1   | machine: x86_64
warp-warp-demo-wsgi-1   | clock source: unix
warp-warp-demo-wsgi-1   | pcre jit disabled
warp-warp-demo-wsgi-1   | detected number of CPU cores: 6
warp-warp-demo-wsgi-1   | current working directory: /opt/warp
warp-warp-demo-wsgi-1   | detected binary path: /usr/local/bin/uwsgi
warp-warp-demo-wsgi-1   | *** dumping internal routing table ***
warp-warp-demo-wsgi-1   | [rule: 0] subject: path_info regexp: ^/static/ action: goto:static
warp-warp-demo-wsgi-1   | [rule: 1] action: last:
warp-warp-demo-wsgi-1   | [rule: 2] label: static
warp-warp-demo-wsgi-1   | [rule: 3] subject: path_info regexp: ^/static/(.*) action: rewrite:$1
warp-warp-demo-wsgi-1   | [rule: 4] subject: /opt/warp/static/${PATH_INFO} func: isfile action: static:/opt/warp/static/${PATH_INFO}
warp-warp-demo-wsgi-1   | [rule: 5] action: addheader:Cache-Control: no-cache
warp-warp-demo-wsgi-1   | [rule: 6] action: return:404
warp-warp-demo-wsgi-1   | *** end of the internal routing table ***
warp-warp-demo-wsgi-1   | uWSGI running as root, you can use --uid/--gid/--chroot options
warp-warp-demo-wsgi-1   | *** WARNING: you are running uWSGI as root !!! (use the --uid flag) *** 
warp-warp-demo-wsgi-1   | your memory page size is 4096 bytes
warp-warp-demo-wsgi-1   | detected max file descriptor number: 1048576
warp-warp-demo-wsgi-1   | building mime-types dictionary from file /etc/mime.types...1476 entry found
warp-warp-demo-wsgi-1   | lock engine: pthread robust mutexes
warp-warp-demo-wsgi-1   | thunder lock: disabled (you can enable it with --thunder-lock)
warp-warp-demo-wsgi-1   | uwsgi socket 0 bound to TCP address 0.0.0.0:8000 fd 6
warp-warp-demo-wsgi-1   | uWSGI running as root, you can use --uid/--gid/--chroot options
warp-warp-demo-wsgi-1   | *** WARNING: you are running uWSGI as root !!! (use the --uid flag) *** 
warp-warp-demo-wsgi-1   | Python version: 3.11.3 (main, May 23 2023, 13:34:03) [GCC 10.2.1 20210110]
warp-warp-demo-wsgi-1   | Python main interpreter initialized at 0x7f12ea63e558
warp-warp-demo-wsgi-1   | uWSGI running as root, you can use --uid/--gid/--chroot options
warp-warp-demo-wsgi-1   | *** WARNING: you are running uWSGI as root !!! (use the --uid flag) *** 
warp-warp-demo-wsgi-1   | python threads support enabled
warp-warp-demo-wsgi-1   | your server socket listen backlog is limited to 100 connections
warp-warp-demo-wsgi-1   | your mercy for graceful operations on workers is 60 seconds
warp-warp-demo-wsgi-1   | mapped 703440 bytes (686 KB) for 8 cores
warp-warp-demo-wsgi-1   | *** Operational MODE: preforking+threaded ***
warp-warp-demo-wsgi-1   | Traceback (most recent call last):
warp-warp-demo-wsgi-1   |   File "/usr/local/lib/python3.11/site-packages/warp/__init__.py", line 9, in create_app
warp-warp-demo-wsgi-1   |     initConfig(app)
warp-warp-demo-wsgi-1   |   File "/usr/local/lib/python3.11/site-packages/warp/config.py", line 109, in initConfig
warp-warp-demo-wsgi-1   |     if app.env != 'production':
warp-warp-demo-wsgi-1   |        ^^^^^^^
warp-warp-demo-wsgi-1   | AttributeError: 'Flask' object has no attribute 'env'
warp-warp-demo-wsgi-1   | unable to load app 0 (mountpoint='') (callable not found or import error)
warp-warp-demo-wsgi-1   | *** no app loaded. going in full dynamic mode ***
warp-warp-demo-wsgi-1   | uWSGI running as root, you can use --uid/--gid/--chroot options
warp-warp-demo-wsgi-1   | *** WARNING: you are running uWSGI as root !!! (use the --uid flag) *** 
warp-warp-demo-wsgi-1   | *** uWSGI is running in multiple interpreter mode ***
warp-warp-demo-wsgi-1   | spawned uWSGI master process (pid: 1)
warp-warp-demo-wsgi-1   | spawned uWSGI worker 1 (pid: 7, cores: 2)
warp-warp-demo-wsgi-1   | spawned 2 offload threads for uWSGI worker 1
warp-warp-demo-wsgi-1   | spawned uWSGI worker 2 (pid: 10, cores: 2)
warp-warp-demo-wsgi-1   | spawned 2 offload threads for uWSGI worker 2
warp-warp-demo-wsgi-1   | spawned uWSGI worker 3 (pid: 14, cores: 2)
warp-warp-demo-wsgi-1   | spawned 2 offload threads for uWSGI worker 3
warp-warp-demo-wsgi-1   | spawned uWSGI worker 4 (pid: 18, cores: 2)
warp-warp-demo-wsgi-1   | spawned 2 offload threads for uWSGI worker 4
warp-warp-demo-db-1     | syncing data to disk ... ok
warp-warp-demo-db-1     | 
warp-warp-demo-db-1     | 
warp-warp-demo-db-1     | Success. You can now start the database server using:
warp-warp-demo-db-1     | 
warp-warp-demo-db-1     |     pg_ctl -D /var/lib/postgresql/data -l logfile start
warp-warp-demo-db-1     | 
warp-warp-demo-db-1     | initdb: warning: enabling "trust" authentication for local connections
warp-warp-demo-db-1     | initdb: hint: You can change this by editing pg_hba.conf or using the option -A, or --auth-local and --auth-host, the next time you run initdb.
warp-warp-demo-db-1     | waiting for server to start....2023-06-05 14:55:05.713 UTC [49] LOG:  starting PostgreSQL 15.3 (Debian 15.3-1.pgdg110+1) on x86_64-pc-linux-gnu, compiled by gcc (Debian 10.2.1-6) 10.2.1 20210110, 64-bit
warp-warp-demo-db-1     | 2023-06-05 14:55:05.722 UTC [49] LOG:  listening on Unix socket "/var/run/postgresql/.s.PGSQL.5432"
warp-warp-demo-db-1     | 2023-06-05 14:55:05.743 UTC [52] LOG:  database system was shut down at 2023-06-05 14:55:05 UTC
warp-warp-demo-db-1     | 2023-06-05 14:55:05.753 UTC [49] LOG:  database system is ready to accept connections
warp-warp-demo-db-1     |  done
warp-warp-demo-db-1     | server started
warp-warp-demo-db-1     | 
warp-warp-demo-db-1     | /usr/local/bin/docker-entrypoint.sh: ignoring /docker-entrypoint-initdb.d/*
warp-warp-demo-db-1     | 
warp-warp-demo-db-1     | waiting for server to shut down...2023-06-05 14:55:05.829 UTC [49] LOG:  received fast shutdown request
warp-warp-demo-db-1     | .2023-06-05 14:55:05.835 UTC [49] LOG:  aborting any active transactions
warp-warp-demo-db-1     | 2023-06-05 14:55:05.836 UTC [49] LOG:  background worker "logical replication launcher" (PID 55) exited with exit code 1
warp-warp-demo-db-1     | 2023-06-05 14:55:05.837 UTC [50] LOG:  shutting down
warp-warp-demo-nginx-1  | /docker-entrypoint.sh: /docker-entrypoint.d/ is not empty, will attempt to perform configuration
warp-warp-demo-nginx-1  | /docker-entrypoint.sh: Looking for shell scripts in /docker-entrypoint.d/
warp-warp-demo-nginx-1  | /docker-entrypoint.sh: Launching /docker-entrypoint.d/10-listen-on-ipv6-by-default.sh
warp-warp-demo-nginx-1  | 10-listen-on-ipv6-by-default.sh: info: can not modify /etc/nginx/conf.d/default.conf (read-only file system?)
warp-warp-demo-nginx-1  | /docker-entrypoint.sh: Launching /docker-entrypoint.d/20-envsubst-on-templates.sh
warp-warp-demo-db-1     | 2023-06-05 14:55:05.842 UTC [50] LOG:  checkpoint starting: shutdown immediate
warp-warp-demo-nginx-1  | /docker-entrypoint.sh: Launching /docker-entrypoint.d/30-tune-worker-processes.sh
warp-warp-demo-nginx-1  | /docker-entrypoint.sh: Configuration complete; ready for start up
warp-warp-demo-nginx-1  | 2023/06/05 14:55:05 [notice] 1#1: using the "epoll" event method
warp-warp-demo-nginx-1  | 2023/06/05 14:55:05 [notice] 1#1: nginx/1.25.0
warp-warp-demo-nginx-1  | 2023/06/05 14:55:05 [notice] 1#1: built by gcc 10.2.1 20210110 (Debian 10.2.1-6) 
warp-warp-demo-nginx-1  | 2023/06/05 14:55:05 [notice] 1#1: OS: Linux 5.15.49-linuxkit
warp-warp-demo-nginx-1  | 2023/06/05 14:55:05 [notice] 1#1: getrlimit(RLIMIT_NOFILE): 1048576:1048576
warp-warp-demo-nginx-1  | 2023/06/05 14:55:05 [notice] 1#1: start worker processes
warp-warp-demo-nginx-1  | 2023/06/05 14:55:05 [notice] 1#1: start worker process 21
warp-warp-demo-nginx-1  | 2023/06/05 14:55:05 [notice] 1#1: start worker process 22
warp-warp-demo-nginx-1  | 2023/06/05 14:55:05 [notice] 1#1: start worker process 23
warp-warp-demo-nginx-1  | 2023/06/05 14:55:05 [notice] 1#1: start worker process 24
warp-warp-demo-nginx-1  | 2023/06/05 14:55:05 [notice] 1#1: start worker process 25
warp-warp-demo-nginx-1  | 2023/06/05 14:55:05 [notice] 1#1: start worker process 26
warp-warp-demo-db-1     | 2023-06-05 14:55:05.900 UTC [50] LOG:  checkpoint complete: wrote 3 buffers (0.0%); 0 WAL file(s) added, 0 removed, 0 recycled; write=0.012 s, sync=0.006 s, total=0.064 s; sync files=2, longest=0.003 s, average=0.003 s; distance=0 kB, estimate=0 kB
warp-warp-demo-db-1     | 2023-06-05 14:55:05.916 UTC [49] LOG:  database system is shut down
warp-warp-demo-db-1     |  done
warp-warp-demo-db-1     | server stopped
warp-warp-demo-db-1     | 
warp-warp-demo-db-1     | PostgreSQL init process complete; ready for start up.
warp-warp-demo-db-1     | 
warp-warp-demo-db-1     | 2023-06-05 14:55:05.976 UTC [1] LOG:  starting PostgreSQL 15.3 (Debian 15.3-1.pgdg110+1) on x86_64-pc-linux-gnu, compiled by gcc (Debian 10.2.1-6) 10.2.1 20210110, 64-bit
warp-warp-demo-db-1     | 2023-06-05 14:55:05.977 UTC [1] LOG:  listening on IPv4 address "0.0.0.0", port 5432
warp-warp-demo-db-1     | 2023-06-05 14:55:05.977 UTC [1] LOG:  listening on IPv6 address "::", port 5432
warp-warp-demo-db-1     | 2023-06-05 14:55:05.988 UTC [1] LOG:  listening on Unix socket "/var/run/postgresql/.s.PGSQL.5432"
warp-warp-demo-db-1     | 2023-06-05 14:55:06.002 UTC [63] LOG:  database system was shut down at 2023-06-05 14:55:05 UTC
warp-warp-demo-db-1     | 2023-06-05 14:55:06.012 UTC [1] LOG:  database system is ready to accept connections
warp-warp-demo-wsgi-1   | --- no python application found, check your startup logs for errors ---
warp-warp-demo-wsgi-1   | [pid: 18|app: -1|req: -1/1] 172.23.0.1 () {50 vars in 887 bytes} [Mon Jun  5 14:57:44 2023] GET / => generated 21 bytes in 0 msecs (HTTP/1.1 500) 2 headers in 83 bytes (0 switches on core 0)
warp-warp-demo-nginx-1  | 172.23.0.1 - - [05/Jun/2023:14:57:44 +0000] "GET / HTTP/1.1" 500 32 "-" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:109.0) Gecko/20100101 Firefox/113.0" "-"
warp-warp-demo-wsgi-1   | --- no python application found, check your startup logs for errors ---
warp-warp-demo-nginx-1  | 172.23.0.1 - - [05/Jun/2023:14:57:44 +0000] "GET /favicon.ico HTTP/1.1" 500 32 "http://127.0.0.1:8080/" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:109.0) Gecko/20100101 Firefox/113.0" "-"
warp-warp-demo-wsgi-1   | [pid: 14|app: -1|req: -1/2] 172.23.0.1 () {48 vars in 824 bytes} [Mon Jun  5 14:57:44 2023] GET /favicon.ico => generated 21 bytes in 0 msecs (HTTP/1.1 500) 2 headers in 83 bytes (0 switches on core 0)
warp-warp-demo-db-1     | 2023-06-05 15:00:06.109 UTC [61] LOG:  checkpoint starting: time
warp-warp-demo-db-1     | 2023-06-05 15:00:10.202 UTC [61] LOG:  checkpoint complete: wrote 43 buffers (0.3%); 0 WAL file(s) added, 0 removed, 0 recycled; write=4.038 s, sync=0.020 s, total=4.093 s; sync files=11, longest=0.010 s, average=0.002 s; distance=252 kB, estimate=252 kB
warp-warp-demo-nginx-1  | 172.23.0.1 - - [05/Jun/2023:15:39:19 +0000] "GET / HTTP/1.1" 500 32 "-" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:109.0) Gecko/20100101 Firefox/113.0" "-"
warp-warp-demo-wsgi-1   | --- no python application found, check your startup logs for errors ---
warp-warp-demo-wsgi-1   | [pid: 18|app: -1|req: -1/3] 172.23.0.1 () {54 vars in 940 bytes} [Mon Jun  5 15:39:19 2023] GET / => generated 21 bytes in 0 msecs (HTTP/1.1 500) 2 headers in 83 bytes (0 switches on core 1)
warp-warp-demo-wsgi-1   | --- no python application found, check your startup logs for errors ---
warp-warp-demo-wsgi-1   | [pid: 14|app: -1|req: -1/4] 172.23.0.1 () {52 vars in 877 bytes} [Mon Jun  5 15:39:20 2023] GET /favicon.ico => generated 21 bytes in 0 msecs (HTTP/1.1 500) 2 headers in 83 bytes (0 switches on core 1)
warp-warp-demo-nginx-1  | 172.23.0.1 - - [05/Jun/2023:15:39:20 +0000] "GET /favicon.ico HTTP/1.1" 500 32 "http://127.0.0.1:8080/" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:109.0) Gecko/20100101 Firefox/113.0" "-"

unsupported hash type MD4 ldap

Error: unsupported hash type MD4 if you are using ldap with AD
Problem: OpenSSL is not providing md4 algorithm anymore
Solution: hashlib can use the Crypto module with pycryptodome you have to add pycryptodome to requirements.txt

error while loading shared libraries: libpcre.so.3

I just checked through the closed issues as well and the ReadMe one more time. However if I get it right, in order to testdrive I would just need to clone the repo and spin up the demo_compose.

Used a fresh debian VM. Got error.

warp-warp-demo-wsgi-1   | uwsgi: error while loading shared libraries: libpcre.so.3: cannot open shared object file: No such file or directory

What am I missing?

ERROR [warp-demo-wsgi compile-image 7/19] RUN pip install --upgrade setuptools && pip install wheel uwsgi

On doing a fresh sync and build. I'm getting the following error

docker compose -f demo_compose.yaml up
[+] Building 65.2s (10/27)                                                                                                                                                                                                                                                                               docker:default
[+] Building 68.0s (11/27)                                                                                                                                                                                                                                                                               docker:default
 => [warp-demo-wsgi internal] load build definition from Dockerfile                                                                                                                                                                                                                                                0.1s
 => => transferring dockerfile: 1.77kB                                                                                                                                                                                                                                                                             0.0s
 => [warp-demo-wsgi internal] load .dockerignore                                                                                                                                                                                                                                                                   0.2s
 => => transferring context: 2B                                                                                                                                                                                                                                                                                    0.0s
 => [warp-demo-wsgi internal] load metadata for docker.io/library/python:3-slim                                                                                                                                                                                                                                    0.7s
 => [warp-demo-wsgi internal] load build context                                                                                                                                                                                                                                                                   0.2s
 => => transferring context: 4.21MB                                                                                                                                                                                                                                                                                0.1s
 => [warp-demo-wsgi compile-image  1/19] FROM docker.io/library/python:3-slim@sha256:43a49c9cc2e614468e3d1a903aabe17a97a4c788c76cf5337b5cdc3535b07d4f                                                                                                                                                              0.0s
 => CACHED [warp-demo-wsgi compile-image  2/19] WORKDIR /opt/warp                                                                                                                                                                                                                                                  0.0s
 => CACHED [warp-demo-wsgi compile-image  3/19] RUN apt-get update                                                                                                                                                                                                                                                 0.0s
 => [warp-demo-wsgi compile-image  4/19] RUN mkdir debs &&     apt-get install -y -d --no-install-recommends libpq5 mime-support &&     cp /var/cache/apt/archives/*deb debs                                                                                                                                       2.8s
 => [warp-demo-wsgi compile-image  5/19] RUN     apt-get install -y wget &&     NODE_ARCH=$(uname -m | sed 's/^x86_64\|amd64$/x64/;s/^i.*86$/x86/;s/^aarch64$/arm64/') &&     NODE_URL="https://nodejs.org/dist/v16.3.0/node-v16.3.0-linux-${NODE_ARCH}.tar.gz" &&     wget -O - "$NODE_URL" | tar -xz --strip-co  7.1s
 => [warp-demo-wsgi compile-image  6/19] RUN apt-get install -y build-essential libpq-dev libpcre3 libpcre3-dev                                                                                                                                                                                                   47.7s
 => ERROR [warp-demo-wsgi compile-image  7/19] RUN pip install --upgrade setuptools && pip install wheel uwsgi                                                                                                                                                                                                     9.0s
------
 > [warp-demo-wsgi compile-image  7/19] RUN pip install --upgrade setuptools && pip install wheel uwsgi:
2.389 Requirement already satisfied: setuptools in /usr/local/lib/python3.12/site-packages (68.2.2)
3.128 WARNING: Running pip as the 'root' user can result in broken permissions and conflicting behaviour with the system package manager. It is recommended to use a virtual environment instead: https://pip.pypa.io/warnings/venv
3.951 Requirement already satisfied: wheel in /usr/local/lib/python3.12/site-packages (0.41.2)
4.069 Collecting uwsgi
4.256   Downloading uwsgi-2.0.22.tar.gz (809 kB)
4.386      ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 809.7/809.7 kB 6.7 MB/s eta 0:00:00
4.553   Preparing metadata (setup.py): started
5.081   Preparing metadata (setup.py): finished with status 'done'
5.101 Building wheels for collected packages: uwsgi
5.102   Building wheel for uwsgi (setup.py): started
7.877   Building wheel for uwsgi (setup.py): finished with status 'error'
7.976   error: subprocess-exited-with-error
7.976
7.976   × python setup.py bdist_wheel did not run successfully.
7.976   │ exit code: 1
7.976   ╰─> [317 lines of output]
7.976       /usr/local/lib/python3.12/site-packages/setuptools/_distutils/dist.py:265: UserWarning: Unknown distribution option: 'descriptions'
7.976         warnings.warn(msg)
7.976       running bdist_wheel
7.976       running build
7.976       running build_py
7.976       creating build
7.976       creating build/lib
7.976       copying uwsgidecorators.py -> build/lib
7.976       /usr/local/lib/python3.12/site-packages/setuptools/_distutils/cmd.py:66: SetuptoolsDeprecationWarning: setup.py install is deprecated.
7.976       !!
7.976
7.976               ********************************************************************************
7.976               Please avoid running ``setup.py`` directly.
7.976               Instead, use pypa/build, pypa/installer or other
7.976               standards-based tools.
7.976
7.976               See https://blog.ganssle.io/articles/2021/10/setup-py-deprecated.html for details.
7.976               ********************************************************************************
7.976
7.976       !!
7.976         self.initialize_options()
7.976       installing to build/bdist.linux-x86_64/wheel
7.976       running install
7.976       using profile: buildconf/default.ini
7.976       detected include path: ['/usr/lib/gcc/x86_64-linux-gnu/12/include', '/usr/local/include', '/usr/include/x86_64-linux-gnu', '/usr/include']
7.976       Patching "bin_name" to properly install_scripts dir
7.976       detected CPU cores: 32
7.976       configured CFLAGS: -O2 -I. -Wall -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -Wextra -Wno-unused-parameter -Wno-missing-field-initializers -DUWSGI_HAS_IFADDRS -DUWSGI_LOCK_USE_MUTEX -DUWSGI_EVENT_USE_EPOLL -DUWSGI_EVENT_TIMER_USE_TIMERFD -DUWSGI_EVENT_FILEMONITOR_USE_INOTIFY  -DUWSGI_PCRE -DUWSGI_ROUTING -DUWSGI_VERSION="\"2.0.22\"" -DUWSGI_VERSION_BASE="2" -DUWSGI_VERSION_MAJOR="0" -DUWSGI_VERSION_MINOR="22" -DUWSGI_VERSION_REVISION="0" -DUWSGI_VERSION_CUSTOM="\"\"" -DUWSGI_YAML -DUWSGI_SSL -DUWSGI_PLUGIN_DIR="\".\"" -DUWSGI_DECLARE_EMBEDDED_PLUGINS="UDEP(python);UDEP(gevent);UDEP(ping);UDEP(cache);UDEP(nagios);UDEP(rrdtool);UDEP(carbon);UDEP(rpc);UDEP(corerouter);UDEP(fastrouter);UDEP(http);UDEP(ugreen);UDEP(signal);UDEP(syslog);UDEP(rsyslog);UDEP(logsocket);UDEP(router_uwsgi);UDEP(router_redirect);UDEP(router_basicauth);UDEP(zergpool);UDEP(redislog);UDEP(mongodblog);UDEP(router_rewrite);UDEP(router_http);UDEP(logfile);UDEP(router_cache);UDEP(rawrouter);UDEP(router_static);UDEP(sslrouter);UDEP(spooler);UDEP(cheaper_busyness);UDEP(symcall);UDEP(transformation_tofile);UDEP(transformation_gzip);UDEP(transformation_chunked);UDEP(transformation_offload);UDEP(router_memcached);UDEP(router_redis);UDEP(router_hash);UDEP(router_expires);UDEP(router_metrics);UDEP(transformation_template);UDEP(stats_pusher_socket);" -DUWSGI_LOAD_EMBEDDED_PLUGINS="ULEP(python);ULEP(gevent);ULEP(ping);ULEP(cache);ULEP(nagios);ULEP(rrdtool);ULEP(carbon);ULEP(rpc);ULEP(corerouter);ULEP(fastrouter);ULEP(http);ULEP(ugreen);ULEP(signal);ULEP(syslog);ULEP(rsyslog);ULEP(logsocket);ULEP(router_uwsgi);ULEP(router_redirect);ULEP(router_basicauth);ULEP(zergpool);ULEP(redislog);ULEP(mongodblog);ULEP(router_rewrite);ULEP(router_http);ULEP(logfile);ULEP(router_cache);ULEP(rawrouter);ULEP(router_static);ULEP(sslrouter);ULEP(spooler);ULEP(cheaper_busyness);ULEP(symcall);ULEP(transformation_tofile);ULEP(transformation_gzip);ULEP(transformation_chunked);ULEP(transformation_offload);ULEP(router_memcached);ULEP(router_redis);ULEP(router_hash);ULEP(router_expires);ULEP(router_metrics);ULEP(transformation_template);ULEP(stats_pusher_socket);"
7.976       *** uWSGI compiling server core ***
7.976       [thread 0][gcc] core/utils.o
7.976       [thread 1][gcc] core/protocol.o
7.976       [thread 4][gcc] core/socket.o
7.976       [thread 2][gcc] core/logging.o
7.976       [thread 8][gcc] core/master.o
7.976       [thread 6][gcc] core/master_utils.o
7.976       [thread 9][gcc] core/emperor.o
7.976       [thread 5][gcc] core/notify.o
7.976       [thread 3][gcc] core/mule.o
7.976       [thread 11][gcc] core/subscription.o
7.976       [thread 10][gcc] core/stats.o
7.976       [thread 13][gcc] core/sendfile.o
7.976       [thread 12][gcc] core/async.o
7.976       [thread 16][gcc] core/master_checks.o
7.976       [thread 14][gcc] core/fifo.o
7.976       [thread 15][gcc] core/offload.o
7.976       [thread 17][gcc] core/io.o
7.976       [thread 18][gcc] core/static.o
7.976       [thread 20][gcc] core/websockets.o
7.976       [thread 19][gcc] core/spooler.o
7.976       [thread 21][gcc] core/snmp.o
7.976       [thread 22][gcc] core/exceptions.o
7.976       [thread 23][gcc] core/config.o
7.976       [thread 26][gcc] core/setup_utils.o
7.976       [thread 25][gcc] core/clock.o
7.976       [thread 27][gcc] core/init.o
7.976       [thread 28][gcc] core/buffer.o
7.976       [thread 29][gcc] core/reader.o
7.976       [thread 24][gcc] core/writer.o
7.976       [thread 30][gcc] core/alarm.o
7.976       [thread 7][gcc] core/cron.o
7.976       [thread 31][gcc] core/hooks.o
7.976       [thread 13][gcc] core/plugins.o
7.976       [thread 5][gcc] core/lock.o
7.976       [thread 25][gcc] core/cache.o
7.976       [thread 26][gcc] core/daemons.o
7.976       [thread 12][gcc] core/errors.o
7.976       [thread 21][gcc] core/hash.o
7.976       [thread 22][gcc] core/master_events.o
7.976       [thread 16][gcc] core/chunked.o
7.976       [thread 27][gcc] core/queue.o
7.976       [thread 18][gcc] core/event.o
7.976       [thread 3][gcc] core/signal.o
7.976       [thread 14][gcc] core/strings.o
7.976       [thread 10][gcc] core/progress.o
7.976       [thread 20][gcc] core/timebomb.o
7.976       [thread 1][gcc] core/ini.o
7.976       [thread 15][gcc] core/fsmon.o
7.976       core/lock.c: In function ‘uwsgi_lock_fast_init’:
7.976       core/lock.c:114:17: warning: ‘pthread_mutexattr_setrobust_np’ is deprecated: pthread_mutexattr_setrobust_np is deprecated, use pthread_mutexattr_setrobust [-Wdeprecated-declarations]
7.976         114 |                 if (pthread_mutexattr_setrobust(&attr, PTHREAD_MUTEX_ROBUST)) {
7.976             |                 ^~
7.976       In file included from /usr/include/features.h:489,
7.976                        from /usr/include/x86_64-linux-gnu/bits/libc-header-start.h:33,
7.976                        from /usr/include/stdio.h:27,
7.976                        from ./uwsgi.h:165,
7.976                        from core/lock.c:1:
7.976       /usr/include/pthread.h:951:12: note: declared here
7.976         951 | extern int __REDIRECT_NTH (pthread_mutexattr_setrobust_np,
7.976             |            ^~~~~~~~~~~~~~
7.976       core/lock.c: In function ‘uwsgi_lock_fast’:
7.976       core/lock.c:176:17: warning: ‘pthread_mutex_consistent_np’ is deprecated: pthread_mutex_consistent_np is deprecated, use pthread_mutex_consistent [-Wdeprecated-declarations]
7.976         176 |                 pthread_mutex_consistent((pthread_mutex_t *) uli->lock_ptr);
7.976             |                 ^~~~~~~~~~~~~~~~~~~~~~~~
7.976       /usr/include/pthread.h:859:12: note: declared here
7.976         859 | extern int __REDIRECT_NTH (pthread_mutex_consistent_np, (pthread_mutex_t *),
7.976             |            ^~~~~~~~~~~~~~
7.976       [thread 30][gcc] core/mount.o
7.976       [thread 29][gcc] core/metrics.o
7.976       [thread 11][gcc] core/plugins_builder.o
7.976       [thread 7][gcc] core/sharedarea.o
7.976       [thread 31][gcc] core/rpc.o
7.976       [thread 8][gcc] core/gateway.o
7.976       [thread 23][gcc] core/loop.o
7.976       [thread 24][gcc] core/cookie.o
7.976       [thread 28][gcc] core/querystring.o
7.976       [thread 13][gcc] core/rb_timers.o
7.976       [thread 12][gcc] core/transformations.o
7.976       [thread 5][gcc] core/uwsgi.o
7.976       [thread 21][gcc] proto/base.o
7.976       [thread 17][gcc] proto/uwsgi.o
7.976       [thread 27][gcc] proto/http.o
7.976       [thread 19][gcc] proto/fastcgi.o
7.976       [thread 22][gcc] proto/scgi.o
7.976       [thread 16][gcc] proto/puwsgi.o
7.976       [thread 10][gcc] lib/linux_ns.o
7.976       [thread 20][gcc] core/regexp.o
7.976       [thread 26][gcc] core/routing.o
7.976       [thread 11][gcc] core/yaml.o
7.976       [thread 30][gcc] core/ssl.o
7.976       [thread 18][gcc] core/legion.o
7.976       [thread 14][gcc] core/dot_h.o
7.976       [thread 4][gcc] core/config_py.o
7.976       *** uWSGI compiling embedded plugins ***
7.976       [thread 24][gcc] plugins/python/python_plugin.o
7.976       [thread 1][gcc] plugins/python/pyutils.o
7.976       [thread 8][gcc] plugins/python/pyloader.o
7.976       [thread 28][gcc] plugins/python/wsgi_handlers.o
7.976       [thread 14][gcc] plugins/python/wsgi_headers.o
7.976       [thread 2][gcc] plugins/python/wsgi_subhandler.o
7.976       [thread 31][gcc] plugins/python/web3_subhandler.o
7.976       [thread 23][gcc] plugins/python/pump_subhandler.o
7.976       [thread 12][gcc] plugins/python/gil.o
7.976       [thread 6][gcc] plugins/python/uwsgi_pymodule.o
7.976       [thread 4][gcc] plugins/python/profiler.o
7.976       [thread 15][gcc] plugins/python/symimporter.o
7.976       [thread 17][gcc] plugins/python/tracebacker.o
7.976       [thread 13][gcc] plugins/python/raw.o
7.976       [thread 16][gcc] plugins/gevent/gevent.o
7.976       core/ssl.c: In function ‘uwsgi_ssl_new_server_context’:
7.976       [thread 22][gcc] plugins/gevent/hooks.o
7.976       core/ssl.c:268:17: warning: ‘PEM_read_bio_DHparams’ is deprecated: Since OpenSSL 3.0 [-Wdeprecated-declarations]
7.976         268 |                 DH *dh = PEM_read_bio_DHparams(bio, NULL, NULL, NULL);
7.976             |                 ^~
7.976       In file included from /usr/include/openssl/ssl.h:36,
7.976                        from ./uwsgi.h:357,
7.976                        from core/ssl.c:1:
7.976       /usr/include/openssl/pem.h:469:1: note: declared here
7.976         469 | DECLARE_PEM_rw_attr(OSSL_DEPRECATEDIN_3_0, DHparams, DH)
7.976             | ^~~~~~~~~~~~~~~~~~~
7.976       core/ssl.c:273:25: warning: ‘DH_free’ is deprecated: Since OpenSSL 3.0 [-Wdeprecated-declarations]
7.976         273 |                         DH_free(dh);
7.976             |                         ^~~~~~~
7.976       In file included from /usr/include/openssl/dsa.h:51,
7.976                        from /usr/include/openssl/x509.h:37,
7.976                        from /usr/include/openssl/ssl.h:31:
7.976       /usr/include/openssl/dh.h:200:28: note: declared here
7.976         200 | OSSL_DEPRECATEDIN_3_0 void DH_free(DH *dh);
7.976             |                            ^~~~~~~
7.976       core/ssl.c:279:9: warning: ‘EC_KEY_new_by_curve_name’ is deprecated: Since OpenSSL 3.0 [-Wdeprecated-declarations]
7.976         279 |         EC_KEY *ecdh = EC_KEY_new_by_curve_name(NID_X9_62_prime256v1);
7.976             |         ^~~~~~
7.976       In file included from /usr/include/openssl/x509.h:33:
7.976       /usr/include/openssl/ec.h:998:31: note: declared here
7.976         998 | OSSL_DEPRECATEDIN_3_0 EC_KEY *EC_KEY_new_by_curve_name(int nid);
7.976             |                               ^~~~~~~~~~~~~~~~~~~~~~~~
7.976       core/ssl.c:283:17: warning: ‘EC_KEY_free’ is deprecated: Since OpenSSL 3.0 [-Wdeprecated-declarations]
7.976         283 |                 EC_KEY_free(ecdh);
7.976             |                 ^~~~~~~~~~~
7.976       /usr/include/openssl/ec.h:1003:28: note: declared here
7.976        1003 | OSSL_DEPRECATEDIN_3_0 void EC_KEY_free(EC_KEY *key);
7.976             |                            ^~~~~~~~~~~
7.976       core/ssl.c: In function ‘uwsgi_sha1’:
7.976       core/ssl.c:563:9: warning: ‘SHA1_Init’ is deprecated: Since OpenSSL 3.0 [-Wdeprecated-declarations]
7.976         563 |         SHA1_Init(&sha);
7.976             |         ^~~~~~~~~
7.976       In file included from /usr/include/openssl/x509.h:41:
7.976       /usr/include/openssl/sha.h:49:27: note: declared here
7.976          49 | OSSL_DEPRECATEDIN_3_0 int SHA1_Init(SHA_CTX *c);
7.976             |                           ^~~~~~~~~
7.976       core/ssl.c:564:9: warning: ‘SHA1_Update’ is deprecated: Since OpenSSL 3.0 [-Wdeprecated-declarations]
7.976         564 |         SHA1_Update(&sha, src, len);
7.976             |         ^~~~~~~~~~~
7.976       /usr/include/openssl/sha.h:50:27: note: declared here
7.976          50 | OSSL_DEPRECATEDIN_3_0 int SHA1_Update(SHA_CTX *c, const void *data, size_t len);
7.976             |                           ^~~~~~~~~~~
7.976       core/ssl.c:565:9: warning: ‘SHA1_Final’ is deprecated: Since OpenSSL 3.0 [-Wdeprecated-declarations]
7.976         565 |         SHA1_Final((unsigned char *)dst, &sha);
7.976             |         ^~~~~~~~~~
7.976       /usr/include/openssl/sha.h:51:27: note: declared here
7.976          51 | OSSL_DEPRECATEDIN_3_0 int SHA1_Final(unsigned char *md, SHA_CTX *c);
7.976             |                           ^~~~~~~~~~
7.976       core/ssl.c: In function ‘uwsgi_md5’:
7.976       core/ssl.c:571:9: warning: ‘MD5_Init’ is deprecated: Since OpenSSL 3.0 [-Wdeprecated-declarations]
7.976         571 |         MD5_Init(&md5);
7.976             |         ^~~~~~~~
7.976       In file included from core/ssl.c:4:
7.976       /usr/include/openssl/md5.h:49:27: note: declared here
7.976          49 | OSSL_DEPRECATEDIN_3_0 int MD5_Init(MD5_CTX *c);
7.976             |                           ^~~~~~~~
7.976       core/ssl.c:572:9: warning: ‘MD5_Update’ is deprecated: Since OpenSSL 3.0 [-Wdeprecated-declarations]
7.976         572 |         MD5_Update(&md5, src, len);
7.976             |         ^~~~~~~~~~
7.976       /usr/include/openssl/md5.h:50:27: note: declared here
7.976          50 | OSSL_DEPRECATEDIN_3_0 int MD5_Update(MD5_CTX *c, const void *data, size_t len);
7.976             |                           ^~~~~~~~~~
7.976       core/ssl.c:573:9: warning: ‘MD5_Final’ is deprecated: Since OpenSSL 3.0 [-Wdeprecated-declarations]
7.976         573 |         MD5_Final((unsigned char *)dst, &md5);
7.976             |         ^~~~~~~~~
7.976       /usr/include/openssl/md5.h:51:27: note: declared here
7.976          51 | OSSL_DEPRECATEDIN_3_0 int MD5_Final(unsigned char *md, MD5_CTX *c);
7.976             |                           ^~~~~~~~~
7.976       core/ssl.c: In function ‘uwsgi_sha1_2n’:
7.976       core/ssl.c:579:9: warning: ‘SHA1_Init’ is deprecated: Since OpenSSL 3.0 [-Wdeprecated-declarations]
7.976         579 |         SHA1_Init(&sha);
7.976             |         ^~~~~~~~~
7.976       /usr/include/openssl/sha.h:49:27: note: declared here
7.976          49 | OSSL_DEPRECATEDIN_3_0 int SHA1_Init(SHA_CTX *c);
7.976             |                           ^~~~~~~~~
7.976       core/ssl.c:580:9: warning: ‘SHA1_Update’ is deprecated: Since OpenSSL 3.0 [-Wdeprecated-declarations]
7.976         580 |         SHA1_Update(&sha, s1, len1);
7.976             |         ^~~~~~~~~~~
7.976       /usr/include/openssl/sha.h:50:27: note: declared here
7.976          50 | OSSL_DEPRECATEDIN_3_0 int SHA1_Update(SHA_CTX *c, const void *data, size_t len);
7.976             |                           ^~~~~~~~~~~
7.976       core/ssl.c:581:9: warning: ‘SHA1_Update’ is deprecated: Since OpenSSL 3.0 [-Wdeprecated-declarations]
7.976         581 |         SHA1_Update(&sha, s2, len2);
7.976             |         ^~~~~~~~~~~
7.976       /usr/include/openssl/sha.h:50:27: note: declared here
7.976          50 | OSSL_DEPRECATEDIN_3_0 int SHA1_Update(SHA_CTX *c, const void *data, size_t len);
7.976             |                           ^~~~~~~~~~~
7.976       core/ssl.c:582:9: warning: ‘SHA1_Final’ is deprecated: Since OpenSSL 3.0 [-Wdeprecated-declarations]
7.976         582 |         SHA1_Final((unsigned char *)dst, &sha);
7.976             |         ^~~~~~~~~~
7.976       /usr/include/openssl/sha.h:51:27: note: declared here
7.976          51 | OSSL_DEPRECATEDIN_3_0 int SHA1_Final(unsigned char *md, SHA_CTX *c);
7.976             |                           ^~~~~~~~~~
7.976       [thread 19][gcc] plugins/ping/ping_plugin.o
7.976       [thread 10][gcc] plugins/cache/cache.o
7.976       [thread 7][gcc] plugins/nagios/nagios.o
7.976       [thread 20][gcc] plugins/rrdtool/rrdtool.o
7.976       [thread 9][gcc] plugins/carbon/carbon.o
7.976       [thread 3][gcc] plugins/rpc/rpc_plugin.o
7.976       [thread 21][gcc] plugins/corerouter/cr_common.o
7.976       plugins/python/python_plugin.c:138:9: warning: ‘Py_NoSiteFlag’ is deprecated [-Wdeprecated-declarations]
7.976         138 |         {"no-site", no_argument, 0, "do not import site module", uwsgi_opt_true, &Py_NoSiteFlag, 0},
7.976             |         ^
7.976       In file included from /usr/local/include/python3.12/Python.h:48,
7.976                        from plugins/python/uwsgi_python.h:4,
7.976                        from plugins/python/python_plugin.c:1:
7.976       /usr/local/include/python3.12/cpython/pydebug.h:14:37: note: declared here
7.976          14 | Py_DEPRECATED(3.12) PyAPI_DATA(int) Py_NoSiteFlag;
7.976             |                                     ^~~~~~~~~~~~~
7.976       plugins/python/python_plugin.c: In function ‘uwsgi_python_init’:
7.976       plugins/python/python_plugin.c:239:17: warning: ‘Py_SetPythonHome’ is deprecated [-Wdeprecated-declarations]
7.976         239 |                 Py_SetPythonHome(wpyhome);
7.976             |                 ^~~~~~~~~~~~~~~~
7.976       In file included from /usr/local/include/python3.12/Python.h:94:
7.976       /usr/local/include/python3.12/pylifecycle.h:40:38: note: declared here
7.976          40 | Py_DEPRECATED(3.11) PyAPI_FUNC(void) Py_SetPythonHome(const wchar_t *);
7.976             |                                      ^~~~~~~~~~~~~~~~
7.976       plugins/python/python_plugin.c:263:9: warning: ‘Py_SetProgramName’ is deprecated [-Wdeprecated-declarations]
7.976         263 |         Py_SetProgramName(pname);
7.976             |         ^~~~~~~~~~~~~~~~~
7.976       /usr/local/include/python3.12/pylifecycle.h:37:38: note: declared here
7.976          37 | Py_DEPRECATED(3.11) PyAPI_FUNC(void) Py_SetProgramName(const wchar_t *);
7.976             |                                      ^~~~~~~~~~~~~~~~~
7.976       plugins/python/python_plugin.c:269:9: warning: ‘Py_OptimizeFlag’ is deprecated [-Wdeprecated-declarations]
7.976         269 |         Py_OptimizeFlag = up.optimize;
7.976             |         ^~~~~~~~~~~~~~~
7.976       /usr/local/include/python3.12/cpython/pydebug.h:13:37: note: declared here
7.976          13 | Py_DEPRECATED(3.12) PyAPI_DATA(int) Py_OptimizeFlag;
7.976             |                                     ^~~~~~~~~~~~~~~
7.976       plugins/python/pyutils.c: In function ‘init_pyargv’:
7.976       plugins/python/pyutils.c:391:9: warning: ‘PySys_SetArgv’ is deprecated [-Wdeprecated-declarations]
7.976         391 |         PySys_SetArgv(up.argc, up.py_argv);
7.976             |         ^~~~~~~~~~~~~
7.976       In file included from /usr/local/include/python3.12/Python.h:96,
7.976                        from plugins/python/uwsgi_python.h:4,
7.976                        from plugins/python/pyutils.c:1:
7.976       /usr/local/include/python3.12/sysmodule.h:13:38: note: declared here
7.976          13 | Py_DEPRECATED(3.11) PyAPI_FUNC(void) PySys_SetArgv(int, wchar_t **);
7.976             |                                      ^~~~~~~~~~~~~
7.976       [thread 11][gcc] plugins/corerouter/cr_map.o
7.976       plugins/python/python_plugin.c: In function ‘uwsgi_python_pre_uwsgi_fork’:
7.976       plugins/python/python_plugin.c:1327:17: error: too few arguments to function ‘_PyImport_AcquireLock’
7.976        1327 |                 _PyImport_AcquireLock();
7.976             |                 ^~~~~~~~~~~~~~~~~~~~~
7.976       In file included from /usr/local/include/python3.12/import.h:91,
7.976                        from /usr/local/include/python3.12/Python.h:99:
7.976       /usr/local/include/python3.12/cpython/import.h:13:18: note: declared here
7.976          13 | PyAPI_FUNC(void) _PyImport_AcquireLock(PyInterpreterState *interp);
7.976             |                  ^~~~~~~~~~~~~~~~~~~~~
7.976       plugins/python/python_plugin.c: In function ‘uwsgi_python_post_uwsgi_fork’:
7.976       plugins/python/python_plugin.c:1339:25: error: too few arguments to function ‘_PyImport_ReleaseLock’
7.976        1339 |                         _PyImport_ReleaseLock();
7.976             |                         ^~~~~~~~~~~~~~~~~~~~~
7.976       /usr/local/include/python3.12/cpython/import.h:14:17: note: declared here
7.976          14 | PyAPI_FUNC(int) _PyImport_ReleaseLock(PyInterpreterState *interp);
7.976             |                 ^~~~~~~~~~~~~~~~~~~~~
7.976       plugins/python/python_plugin.c: In function ‘uwsgi_python_suspend’:
7.976       plugins/python/python_plugin.c:1596:78: error: ‘PyThreadState’ {aka ‘struct _ts’} has no member named ‘recursion_remaining’; did you mean ‘c_recursion_remaining’?
7.976        1596 |                 up.current_recursion_remaining[wsgi_req->async_id] = tstate->recursion_remaining;
7.976             |                                                                              ^~~~~~~~~~~~~~~~~~~
7.976             |                                                                              c_recursion_remaining
7.976       plugins/python/python_plugin.c:1605:63: error: ‘PyThreadState’ {aka ‘struct _ts’} has no member named ‘recursion_remaining’; did you mean ‘c_recursion_remaining’?
7.976        1605 |                 up.current_main_recursion_remaining = tstate->recursion_remaining;
7.976             |                                                               ^~~~~~~~~~~~~~~~~~~
7.976             |                                                               c_recursion_remaining
7.976       plugins/python/python_plugin.c: In function ‘uwsgi_python_resume’:
7.976       plugins/python/python_plugin.c:1839:25: error: ‘PyThreadState’ {aka ‘struct _ts’} has no member named ‘recursion_remaining’; did you mean ‘c_recursion_remaining’?
7.976        1839 |                 tstate->recursion_remaining = up.current_recursion_remaining[wsgi_req->async_id];
7.976             |                         ^~~~~~~~~~~~~~~~~~~
7.976             |                         c_recursion_remaining
7.976       plugins/python/python_plugin.c:1848:25: error: ‘PyThreadState’ {aka ‘struct _ts’} has no member named ‘recursion_remaining’; did you mean ‘c_recursion_remaining’?
7.976        1848 |                 tstate->recursion_remaining = up.current_main_recursion_remaining;
7.976             |                         ^~~~~~~~~~~~~~~~~~~
7.976             |                         c_recursion_remaining
7.976       [end of output]
7.976
7.976   note: This error originates from a subprocess, and is likely not a problem with pip.
7.976   ERROR: Failed building wheel for uwsgi
7.976   Running setup.py clean for uwsgi
8.240 Failed to build uwsgi
8.241 ERROR: Could not build wheels for uwsgi, which is required to install pyproject.toml-based projects
------
failed to solve: process "/bin/sh -c pip install --upgrade setuptools && pip install wheel uwsgi" did not complete successfully: exit code: 1

Any clue on what could be going wrong?

Docker - demo issue

Hi. I was trying to start demo with docker but I got the below error.

uwsgi: error while loading shared libraries: libpcre.so.3: cannot open shared object file: No such file or directory

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.