Skip to content

Instantly share code, notes, and snippets.

@markasoftware
Last active April 21, 2025 17:56
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
@AndyCyberSec
Copy link

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.

add -u root after exec otherwise you get permission error. I also stopped openproject-autoheal-1, not sure if this is needed

@OliverKarla
Copy link

This is not working for newest 15.3 anymore? I installed on premise community version and when I change that file, app on server becomes unresponsive and I have to remove everything and reinstall. Just changing this file back does not work. OS is ubuntu 22.04

@perexwi
Copy link

perexwi commented Mar 6, 2025

Working with OpenProject 15.3.2

@duy12i1i7
Copy link

Working with OpenProject 15.3.2

how can u active with OpenProject 15.3.2, I installed OpenProject 15.3.2 on ubuntu 20.04, but I don't know how to use this script for active enterprise mode :<, plz help me

@scalenow
Copy link

@duy12i1i7 look for enterprise_token.rb and replace the content on top

@perexwi
Copy link

perexwi commented Mar 13, 2025

Working with OpenProject 15.3.2

how can u active with OpenProject 15.3.2, I installed OpenProject 15.3.2 on ubuntu 20.04, but I don't know how to use this script for active enterprise mode :<, plz help me

How did you install OpenProject, Docker, packages, Kubernetes, etc.? In all cases, you'll need to replace the enterprise_token.rb script, but you'll need to do different things depending on your installation method. Let me know first to help you 🙃

@smarthomecoder
Copy link

I also installed as standalone under Ubuntu, pasted the code in the token.rb file and then whole openproject crashed. Can that be a result of not shutting down the right processes before editing the file? Maybe I forgot to turn of something !? Also I installed the community version that you can download.

@perexwi
Copy link

perexwi commented Mar 15, 2025

@smarthomecoder @duy12i1i7 I installed the package version under a fresh install of Ubuntu 20.04 (The same you use) and works just perfect. I noticed that you write "pasted the code in the token.rb" maybe did you replace the wrong file? you need to replace the /opt/openproject/app/models/enterprise_token.rb file, not the token.rb file. Can you confirm what file did you replace?

@lockdlock
Copy link

Working with OpenProject 15.4.1?

@duy12i1i7
Copy link

@smarthomecoder @duy12i1i7 I installed the package version under a fresh install of Ubuntu 20.04 (The same you use) and works just perfect. I noticed that you write "pasted the code in the token.rb" maybe did you replace the wrong file? you need to replace the /opt/openproject/app/models/enterprise_token.rb file, not the token.rb file. Can you confirm what file did you replace?

Oh I see how to use this on newest version, thanks bro

@benmi3
Copy link

benmi3 commented Mar 21, 2025

It is working on OpenProject 15.4.1

@smarthomecoder
Copy link

smarthomecoder commented Mar 24, 2025

thx for the help! did it again, step by step and now it works.

@antoniolago
Copy link

For helm installations

  1. Add configmap with this file content in it:
apiVersion: v1
kind: ConfigMap
metadata:
  name: enterprise-token-config
  namespace: openproject
data:
  enterprise_token.rb: |
    <file content here>
    
  1. Add helm values:
  extraVolumes:
     - name: enterprise-token-volume
       configMap:
         name: enterprise-token-config
   extraVolumeMounts:
     - name: enterprise-token-volume
       mountPath: /app/app/models/enterprise_token.rb
       subPath: enterprise_token.rb
       readOnly: true
   
 

@gelt00
Copy link

gelt00 commented Mar 27, 2025

I have a question, my enterprise demo version only has 10 users, is there any way to adjust it to 20-25?

@OPiElix
Copy link

OPiElix commented Mar 31, 2025

works for 15.4.2. Thanks !!

@buzzqw
Copy link

buzzqw commented Apr 9, 2025

Hi
on New Custom Action, the Add Action is empty

any hints ?

@scalenow
Copy link

@buzzqw raise a ticket with openproject

@javito1081
Copy link

javito1081 commented Apr 17, 2025

Just for everyone having issues on how to do this the easiest way, i did the following:

Step 1:

Downloaded the file using curl to the openproject folder, i have a folder called openproject and inside its my docker compose file and now the enterprise_token.rb, along with my assets and data folder

curl "https://gist.githubusercontent.com/markasoftware/f5b2e55a2c2e3abb1f9eefcdf0bfff45/raw/148c5067e30eae04f96e3233144b4404f70ade47/enterprise_token.rb" -o openproject/enterprise_token.rb

Step 2:

Once downloaded i added this line - ./enterprise_token.rb:/app/app/models/enterprise_token.rb to my docker compose file in the volumes

services:
    openproject:
        image: openproject/openproject:15
        container_name: openproject
        ports:
            - "8200:80"
        restart: unless-stopped
        environment:
            - OPENPROJECT_SECRET_KEY_BASE=secret
            - OPENPROJECT_HOST__NAME=openproject.something.com
            - OPENPROJECT_HTTPS=true
            - OPENPROJECT_DEFAULT__LANGUAGE=es
            - OPENPROJECT_USER__DEFAULT__TIMEZONE=America/Mexico_City
        volumes:
            - ./pgdata:/var/openproject/pgdata
            - ./assets:/var/openproject/assets
            - ./enterprise_token.rb:/app/app/models/enterprise_token.rb

Step 3:

after that, i saved the file and ran my docker compose like this:

docker-compose -f openproject/openproject.yml up -d

thats it, no restarts or any extra steps,

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