Skip to content

Instantly share code, notes, and snippets.

@markasoftware
Last active May 7, 2024 06:36
Show Gist options
  • Save markasoftware/f5b2e55a2c2e3abb1f9eefcdf0bfff45 to your computer and use it in GitHub Desktop.
Save markasoftware/f5b2e55a2c2e3abb1f9eefcdf0bfff45 to your computer and use it in GitHub Desktop.
OpenProject Enterprise mode for free
############ REPLACE app/models/enterprise_token.rb in the source code with this file! ################
############ also be sure to RESTART OpenProject after replacing the file. ################
############ it doesn't show that enterprise mode is enabled in the settings, but all ################
############ enterprise mode features, such as KanBan boards, are enabled. ################
#-- copyright
# OpenProject is an open source project management software.
# Copyright (C) 2012-2023 the OpenProject GmbH
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License version 3.
#
# OpenProject is a fork of ChiliProject, which is a fork of Redmine. The copyright follows:
# Copyright (C) 2006-2013 Jean-Philippe Lang
# Copyright (C) 2010-2013 the ChiliProject Team
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 2
# of the License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# See COPYRIGHT and LICENSE files for more details.
#++
class EnterpriseToken < ApplicationRecord
class << self
def current
RequestStore.fetch(:current_ee_token) do
set_current_token
end
end
def table_exists?
connection.data_source_exists? table_name
end
def allows_to?(action)
true
end
def active?
true
end
def show_banners?
false
end
def set_current_token
token = EnterpriseToken.order(Arel.sql('created_at DESC')).first
if token&.token_object
token
end
end
end
validates :encoded_token, presence: true
validate :valid_token_object
validate :valid_domain
before_save :unset_current_token
before_destroy :unset_current_token
delegate :will_expire?,
:subscriber,
:mail,
:company,
:domain,
:issued_at,
:starts_at,
:expires_at,
:reprieve_days,
:reprieve_days_left,
:restrictions,
to: :token_object
def token_object
load_token! unless defined?(@token_object)
@token_object
end
def allows_to?(action)
true
end
def unset_current_token
# Clear current cache
RequestStore.delete :current_ee_token
end
def expired?(reprieve: true)
false
end
##
# The domain is only validated for tokens from version 2.0 onwards.
def invalid_domain?
false
end
private
def load_token!
@token_object = OpenProject::Token.import(encoded_token)
rescue OpenProject::Token::ImportError => e
Rails.logger.error "Failed to load EE token: #{e}"
nil
end
def valid_token_object
errors.add(:encoded_token, :unreadable) unless load_token!
end
def valid_domain
errors.add :domain, :invalid if invalid_domain?
end
end
@Peffy95
Copy link

Peffy95 commented Mar 9, 2024

1- Copy the file "enterprise_token.rb" in the same directory of the "docker-compose.yml" file. 2- Modify your "docker-compose.yml" : add the follower code at line 31 : - "./enterprise_token.rb:/app/app/models/enterprise_token.rb" after : volumes: - "${OPDATA:-opdata}:/var/openproject/assets

3- finally execute the docker compose command : OPENPROJECT_HTTPS=false PORT=8080 docker compose up -d

and all things will be fine.

i'm completely fresh with docker, proxmox and open project and your instructions worked perfectly, thanks!

@MaeveFirstborn
Copy link

Can confirm this is still working as described in the non-docker package based installation in 2024 as well.

@jiriks74
Copy link

jiriks74 commented Apr 3, 2024

For those running a docker container you can runt this command (and add it to a cron job if you're interested):

docker exec -t openproject-web-1 /usr/bin/curl "https://gist.githubusercontent.com/markasoftware/f5b2e55a2c2e3abb1f9eefcdf0bfff45/raw/148c5067e30eae04f96e3233144b4404f70ade47/enterprise_token.rb" -o /app/app/models/enterprise_token.rb && docker restart openproject-seeder-1 openproject-web-1

EDIT: this is for the official One container per process setup.

@harryburr
Copy link

harryburr commented Apr 7, 2024

docker exec -t openproject-web-1 /usr/bin/curl "https://gist.githubusercontent.com/markasoftware/f5b2e55a2c2e3abb1f9eefcdf0bfff45/raw/148c5067e30eae04f96e3233144b4404f70ade47/enterprise_token.rb" -o /app/app/models/enterprise_token.rb && docker restart openproject-seeder-1 openproject-web-1

Have just tried to run this command with no joy unfortunately.

Core version
OpenProject 12.5.8
PostgreSQL version
13.11

Running on Easypanel with Portainer also installed.

No errors, nothing broken - simply didn't function correctly and premium features are still stuck behind upsales.

@jiriks74
Copy link

jiriks74 commented Apr 8, 2024

docker exec -t openproject-web-1 /usr/bin/curl "https://gist.githubusercontent.com/markasoftware/f5b2e55a2c2e3abb1f9eefcdf0bfff45/raw/148c5067e30eae04f96e3233144b4404f70ade47/enterprise_token.rb" -o /app/app/models/enterprise_token.rb && docker restart openproject-seeder-1 openproject-web-1

Have just tried to run this command with no joy unfortunately.

Core version OpenProject 12.5.8 PostgreSQL version 13.11

Running on Easypanel with Portainer also installed.

No errors, nothing broken - simply didn't function correctly and premium features are still stuck behind upsales.

Did you try to run the whole command inside the docker container? Because that won't work. You need to run this from the host changing the open-project-web-1 container name if you modified the service and/or container name docker-compose.yml file provided by OpenProject.

This has nothing to do with Portainer and has to be run on the host itself. @harryburr

@harryburr
Copy link

Did you try to run the whole command inside the docker container? Because that won't work. You need to run this from the host changing the open-project-web-1 container name if you modified the service and/or container name docker-compose.yml file provided by OpenProject.

Thanks @jiriks74. I ran that command while in the Docker container directory (/var/lib/docker/containers/f6627bfd5f76a3f52bbe1de8455c4043bd4ceea00e8c55217c8f18cfaafb1d41) - and replaced 'openproject-web-1' and openproject-seeder-1 openproject-web-1 with the container name (f6627bfd5f76a3f52bbe1de8455c4043bd4ceea00e8c55217c8f18cfaafb1d41)

Have just tried to run from the root directory (/) also with no joy.

Ignore my stupidity if that's not what you meant.

@jiriks74
Copy link

jiriks74 commented Apr 8, 2024

Did you try to run the whole command inside the docker container? Because that won't work. You need to run this from the host changing the open-project-web-1 container name if you modified the service and/or container name docker-compose.yml file provided by OpenProject.

Thanks @jiriks74. I ran that command while in the Docker container directory (/var/lib/docker/containers/f6627bfd5f76a3f52bbe1de8455c4043bd4ceea00e8c55217c8f18cfaafb1d41) - and replaced 'openproject-web-1' and openproject-seeder-1 openproject-web-1 with the container name (f6627bfd5f76a3f52bbe1de8455c4043bd4ceea00e8c55217c8f18cfaafb1d41)

Have just tried to run from the root directory (/) also with no joy.

Ignore my stupidity if that's not what you meant.

If you'd be willing to do so you can run it in asciinema. Be sure to not run anything that would expose your passwords, secrets, etc.

What I meant was:

ssh <your-server>
docker exec -t openproject-web-1 /usr/bin/curl "https://gist.githubusercontent.com/markasoftware/f5b2e55a2c2e3abb1f9eefcdf0bfff45/raw/148c5067e30eae04f96e3233144b4404f70ade47/enterprise_token.rb" -o /app/app/models/enterprise_token.rb && docker restart openproject-seeder-1 openproject-web-1

or

ssh <your-server>
sudo crontab -e

and put something like

0 0 * * * docker exec -t openproject-web-1 /usr/bin/curl "https://gist.githubusercontent.com/markasoftware/f5b2e55a2c2e3abb1f9eefcdf0bfff45/raw/148c5067e30eae04f96e3233144b4404f70ade47/enterprise_token.rb" -o /app/app/models/enterprise_token.rb && docker restart openproject-seeder-1 openproject-web-1

so that cron updates the file automatically at midnight and restarts OpenProject.

The command that is ran inside the container is:

/usr/bin/curl "https://gist.githubusercontent.com/markasoftware/f5b2e55a2c2e3abb1f9eefcdf0bfff45/raw/148c5067e30eae04f96e3233144b4404f70ade47/enterprise_token.rb" -o /app/app/models/enterprise_token.rb

The docker exec -t openproject-web-1 part tells your server to run that command in the container. The && docker restart openproject-seeder-1 openproject-web-1 part tells your server to restart OpenProject after the first command succeeds so that OpenProject loads the new file.

@harryburr
Copy link

If you'd be willing to do so you can run it in asciinema. Be sure to not run anything that would expose your passwords, secrets, etc.

https://asciinema.org/a/Z7KbSwV3IS6YhIeZi5Trlmbt1

Does that help at all @jiriks74?

Have just attempted following those instructions again with no joy - still getting upsale screens unfortunately. Ran that in my root user directory straight after ssh'ing in.

@jiriks74
Copy link

jiriks74 commented Apr 8, 2024

Try to go into the container and head /app/app/models/enterprise_token.rb and see whether

############ REPLACE app/models/enterprise_token.rb in the source code with this file! ################
############ also be sure to RESTART OpenProject after replacing the file.             ################
############ it doesn't show that enterprise mode is enabled in the settings, but all  ################
############ enterprise mode features, such as KanBan boards, are enabled.             ################

is there

@harryburr
Copy link

Try to go into the container and head /app/app/models/enterprise_token.rb and see whether

############ REPLACE app/models/enterprise_token.rb in the source code with this file! ################
############ also be sure to RESTART OpenProject after replacing the file.             ################
############ it doesn't show that enterprise mode is enabled in the settings, but all  ################
############ enterprise mode features, such as KanBan boards, are enabled.             ################

is there

What I've just done @jiriks74 is:

  1. cd'd into /app/app/models/enterprise_token.rb to see the file wasn't amended
  2. removed the existing file
  3. wget the enterprise_token.rb file from here
  4. ran your command again
  5. checked Portainer
  6. and every time I run the command it decides to create a different Docker container(is that normal??)

image

  1. double checked the enterprise_token.rb file again and it was set back to default prior to replacing it with this file

Is this my server just being weird??

@jiriks74
Copy link

jiriks74 commented Apr 8, 2024

Try to use the name of the container not the hash.

image

As you can see I'm using openproject-web-1 as it's the name for the container that hosts the web app files.

Here's the info about it:
image
As you can see the long string of numbers and letters is a id/hash. it is not preserved when you docker compose down && docker compose up the stack.

I don't recognize the setup. The names are modified and I have no idea what container .z2... is. Are you using the official docker One container per process setup? Because that's the one the command is for.

@harryburr
Copy link

Try to use the name of the container not the hash.

This still didn't work - just created another container again.

I don't recognize the setup. The names are modified and I have no idea what container .z2... is. Are you using the official docker One container per process setup? Because that's the one the command is for.

I'm using the Easypanel image for OpenProject. But I'll try that doc you've just linked to.

@jiriks74
Copy link

jiriks74 commented Apr 8, 2024

Try to use the name of the container not the hash.

This still didn't work - just created another container again.

I don't recognize the setup. The names are modified and I have no idea what container .z2... is. Are you using the official docker One container per process setup? Because that's the one the command is for.

I'm using the Easypanel image for OpenProject. But I'll try that doc you've just linked to.

Don't port your whole setup just because of this command. Modify it or do it manually after every update.

@jiriks74
Copy link

jiriks74 commented Apr 8, 2024

Hello,
another approach to have this modification persistent is adding a volume to the container web:

    volumes:
      - <path>/enterprise_token.rb:/app/app/models/enterprise_token.rb:ro

Then you can do a cron job (crontab -e):

@daily curl "https://gist.githubusercontent.com/markasoftware/f5b2e55a2c2e3abb1f9eefcdf0bfff45/raw/148c5067e30eae04f96e3233144b4404f70ade47/enterprise_token.rb" -o <path>/enterprise_token.rb

Don't forget to change <path> to your folder where you want the file be. Do so for the volume and cron job.

This is for the official One container per process setup. If you use something else make sure that the file is under /app/app/models/enterprise_token.rb. If it isn't modify the volume path.

@acethecool1
Copy link

Thanks, For this and all the comments.

Anyone running OpenProject Container on Synology NAS devices can follow this

  1. Download the file "enterprise_token.rb" and place it in your NAS.
  2. Stop your container and go to settings.
  3. Scroll Down to Volume Settings "Add File" and select the file you download "enterprise_token.rb".
  4. In the Text Box paste this "/app/app/models/enterprise_token.rb" and select "Read Only"
  5. Start the container again.
  6. That's All.

@zuevav
Copy link

zuevav commented Apr 17, 2024

it is work on OpenProject 13.4.1?
installed on Ubuntu.

@RFX19
Copy link

RFX19 commented Apr 18, 2024

it is work on OpenProject 13.4.1? installed on Ubuntu.

No. Not on my installation.

@zuevav
Copy link

zuevav commented Apr 18, 2024

it is work on OpenProject 13.4.1? installed on Ubuntu.

No. Not on my installation.

for me too...

@jiriks74
Copy link

@zuevav @RFX19 It's working on 13.4.1
Did you follow the setup steps properly?
Are you using docker? Are you using single/multi image setup?
Did you restart OpenProject after setting up the new file?

@RFX19
Copy link

RFX19 commented Apr 18, 2024

@zuevav @RFX19 It's working on 13.4.1 Did you follow the setup steps properly? Are you using docker? Are you using single/multi image setup? Did you restart OpenProject after setting up the new file?

I dont think that the setup is so hard. Just switch the files and restart. What I did. In the previous version it was working like charm but with the update it stopped working.

I'm using the single image setup.

@jiriks74
Copy link

Check your running container for the file header. Maybe the container got recreated during restart.

@RFX19
Copy link

RFX19 commented Apr 18, 2024

Check your running container for the file header. Maybe the container got recreated during restart.

Excuse me, but may I ask for your support? How can I carry out your proposal?

@jiriks74
Copy link

docker exec -it <container-name> head <path-to-file>

@zuevav
Copy link

zuevav commented Apr 18, 2024

The problem is that we don't use docker, we have a clean Ubuntu installation, according to the instructions - Install Open Project with DEB/RPM packages. Next is the Configuration of the Open Project. Stop it, change the file and start it, and nothing....

@RFX19
Copy link

RFX19 commented Apr 19, 2024

The problem is that we don't use docker, we have a clean Ubuntu installation, according to the instructions - Install Open Project with DEB/RPM packages. Next is the Configuration of the Open Project. Stop it, change the file and start it, and nothing....

Same here. But instead of Ubuntu we are using Debian.

@lockdlock
Copy link

The problem is that we don't use docker, we have a clean Ubuntu installation, according to the instructions - Install Open Project with DEB/RPM packages. Next is the Configuration of the Open Project. Stop it, change the file and start it, and nothing....

Same here. But instead of Ubuntu we are using Debian.

On my ubuntu 22.04 server, 13.4.1 is working fine. Of course I am not using docker.
However, this is not a clean install of 13.4.1, but an update from 13.4.0.
However, I have not tried 14.0.0.

@markasoftware
Copy link
Author

I've heard reports that the enterprise_token.rb file no longer exists in 14.0.0 so a slightly different override may be needed. Openproject is not something I use anymore so I'll leave this up to other people to solve, I'm happy to merge a fork that works on 14.0.0!

@siddhu2310
Copy link

I've heard reports that the enterprise_token.rb file no longer exists in 14.0.0 so a slightly different override may be needed. Openproject is not something I use anymore so I'll leave this up to other people to solve, I'm happy to merge a fork that works on 14.0.0!

I have chekced with 14.0.0 it is Working

@CC1119
Copy link

CC1119 commented Apr 30, 2024

@markasoftware
Copy link
Author

Ok great to hear! The reports of my demise have been greatly exaggerated 😆

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment