Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Redmine 6 #98

Merged
merged 12 commits into from
Mar 13, 2025
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,7 @@
## Version: 0.6.0
### Improvements
- [Redmine 6.0 compatibility.](https://github.com/noshutdown-ru/vault/issues/96)

## Version: 0.5.0
### Improvements
- [Redmine 5.0 compatibility.](https://github.com/noshutdown-ru/vault/issues/91)
3 changes: 0 additions & 3 deletions Gemfile
Original file line number Diff line number Diff line change
@@ -2,12 +2,9 @@ source 'https://rubygems.org'

gem 'roo'
gem 'iconv'
gem 'rubyzip', '~> 2.3.0'
gem 'zip-zip'
gem 'protected_attributes_continued', '1.8.2'

group :test, :development do
gem 'byebug'
gem 'capybara-screenshot'
end

33 changes: 15 additions & 18 deletions app/controllers/key_files_controller.rb
Original file line number Diff line number Diff line change
@@ -1,22 +1,19 @@
class KeyFilesController < ApplicationController
unloadable

before_action :find_project_by_project_id
before_action :authorize
before_action :find_project_by_project_id
before_action :authorize

def download
find_key
unless @key.nil?
send_file "#{Vault::KEYFILES_DIR}/#{@key.file}", filename: @key.name
end
end

def find_key
@key = Vault::KeyFile.find(params[:id])
unless @key.project_id == @project.id
redirect_to project_keys_path(@project), alert: t('alert.key.not_found')
@key = nil
end
end
def download
find_key
unless @key.nil?
send_file "#{Vault::KEYFILES_DIR}/#{@key.file}", filename: @key.name
end
end

def find_key
@key = Vault::KeyFile.find(params[:id])
unless @key.project_id == @project.id
redirect_to project_keys_path(@project), alert: t('alert.key.not_found')
@key = nil
end
end
end
58 changes: 27 additions & 31 deletions app/controllers/keys_controller.rb
Original file line number Diff line number Diff line change
@@ -1,20 +1,17 @@
class KeysController < ApplicationController
unloadable

before_action :find_project_by_project_id, except: [:all]
before_action :authorize, except: [:all]
before_action :find_key, only: [ :show, :edit, :update, :destroy, :copy ]
before_action :find_keys, only: [ :context_menu ]
before_action :find_key, only: [:show, :edit, :update, :destroy, :copy]
before_action :find_keys, only: [:context_menu]
accept_api_auth :index, :show

helper :sort
include SortHelper
helper ContextMenusHelper

def index

unless Setting.plugin_vault['use_redmine_encryption'] ||
Setting.plugin_vault['use_null_encryption']
Setting.plugin_vault['use_null_encryption']
if not Setting.plugin_vault['encryption_key'] or Setting.plugin_vault['encryption_key'].empty?
render_error t("error.key.not_set")
return
@@ -39,8 +36,8 @@ def index
end

@keys = @keys.order(sort_clause) unless @keys.nil?
@keys = @keys.select { |key| key.whitelisted?(User,@project) } unless @keys.nil?
@keys = [] if @keys.nil? #hack for decryption
@keys = @keys.select { |key| key.whitelisted?(User.current, @project) } unless @keys.nil?
@keys = [] if @keys.nil? # hack for decryption

@limit = per_page_option
@key_count = @keys.count
@@ -61,7 +58,7 @@ def index
end

def all
unless User.current.allowed_to?({:controller => 'keys', :action => 'all'}, nil, :global => true)
unless User.current.allowed_to?({ :controller => 'keys', :action => 'all' }, nil, :global => true)
render_error t("error.user.not_allowed")
return
end
@@ -97,8 +94,8 @@ def all
end

@keys = @keys.order(sort_clause) unless @keys.nil?
@keys = @keys.select { |key| key.whitelisted?(User,key.project) } unless @keys.nil?
@keys = [] if @keys.nil? #hack for decryption
@keys = @keys.select { |key| key.whitelisted?(User.current, key.project) } unless @keys.nil?
@keys = [] if @keys.nil? # hack for decryption

@limit = per_page_option
@key_count = @keys.count
@@ -131,12 +128,11 @@ def copy

def create
save_file if key_params[:file]
@key = Vault::Key.new(key_params)

@key = Vault::Key.new
@key.safe_attributes = key_params.except(:tags)
@key.tags = key_params[:tags]
@key.project = @project

@key.tags = Vault::Tag.create_from_string(key_params[:tags])


self.update_wishlist

respond_to do |format|
@@ -151,48 +147,48 @@ def create
def update
save_file if key_params[:file]
respond_to do |format|

self.update_wishlist
@key.safe_attributes = key_params.except(:tags)

if @key.update(params[:vault_key])
@key.tags = Vault::Tag.create_from_string(key_params[:tags])
if @key.update(key_params)
@key.tags = key_params[:tags]
format.html { redirect_to project_keys_path(@project), notice: t('notice.key.update.success') }
else
format.html { render action: 'edit'}
format.html { render action: 'edit' }
end
end
end

def update_wishlist
if User.current.allowed_to?(:manage_whitelist_keys, @key.project)
if params[:whitelist].blank?
@key.whitelist = ""
@key.whitelist = ""
else
@key.whitelist = params[:whitelist].join(",")
@key.whitelist = params[:whitelist].join(",")
end
end
end

def edit
if !@key.whitelisted?(User,@project)
if !@key.whitelisted?(User.current, @project)
render_error t("error.key.not_whitelisted")
return
else
@key.decrypt!
respond_to do |format|
format.html { render action: 'edit'}
format.html { render action: 'edit' }
end
end
end

def show
if !@key.whitelisted?(User,@project)
if !@key.whitelisted?(User.current, @project)
render_error t("error.key.not_whitelisted")
return
else
@key.decrypt!
respond_to do |format|
format.html { render action: 'show'}
format.html { render action: 'show' }
end
end
end
@@ -204,23 +200,23 @@ def destroy
end

def context_menu
#FIXME
# FIXME
@keys.map(&:decrypt!)
render layout: false
end

private

def find_key
@key=Vault::Key.find(params[:id])
@key = Vault::Key.find(params[:id])
unless @key.project_id == @project.id
redirect_to project_keys_path(@project), notice: t('alert.key.not_found')
end
end

def find_keys
@keys=Vault::Key.find(params[:ids])
unless @keys.all? { |k| k.project_id == @project.id }
@keys = Vault::Key.find(params[:ids])
unless @keys.all? { |k| k.project_id == @project.id }
redirect_to project_keys_path(@project), notice: t('alert.key.not_found')
end
end
@@ -239,7 +235,7 @@ def save_file
params['vault_key']['file'] = name
end

def projects_for_jump_box(user=User.current)
def projects_for_jump_box(user = User.current)
if user.logged?
user.projects.active.select(:id, :name, :identifier, :lft, :rgt).to_a
else
8 changes: 5 additions & 3 deletions app/controllers/tags_controller.rb
Original file line number Diff line number Diff line change
@@ -8,7 +8,8 @@ def index
end

def create
@tag = @key.tags.build(tag_params)
@tag = @key.tags.build
@tag.safe_attributes = tag_params
if @tag.save
redirect_to project_key_tags_path(@project, @key), notice: 'Tag was successfully created.'
else
@@ -17,7 +18,8 @@ def create
end

def update
if @tag.update(tag_params)
@tag.safe_attributes = tag_params
if @tag.save
redirect_to project_key_tags_path(@project, @key), notice: 'Tag was successfully updated.'
else
render :index
@@ -46,4 +48,4 @@ def find_tag
def tag_params
params.require(:tag).permit(:name, :color)
end
end
end
9 changes: 4 additions & 5 deletions app/controllers/vault_settings_controller.rb
Original file line number Diff line number Diff line change
@@ -2,7 +2,6 @@
require 'zip'

class VaultSettingsController < ApplicationController
unloadable
menu_item :vault_settings

layout 'admin'
@@ -14,12 +13,12 @@ def index

def save
if params[:settings][:encryption_key].length != 16 and params[:settings][:encryption_key].length != 0
redirect_to vault_settings_path, :flash => { :error => t('error.key.length') }
redirect_to vault_settings_path, :flash => { :error => t('error.key.length') }
return
end

Setting.send "plugin_vault=", params[:settings]
redirect_to vault_settings_path , notice: t('notice.settings.saved')
redirect_to vault_settings_path, notice: t('notice.settings.saved')
end

def backup
@@ -59,8 +58,8 @@ def backup
zip_data = IO.binread(tmp_fname)

send_data zip_data,
:type => 'application/zip',
:disposition => "attachment; filename=#{fname}"
:type => 'application/zip',
:disposition => "attachment; filename=#{fname}"

end

Loading