Merge branch 'private_repos'
Conflicts: config/application.yml.sample config/locales/ru.yml config/routes.rb db/schema.rb
This commit is contained in:
commit
1659ad5805
|
@ -0,0 +1,17 @@
|
||||||
|
class PrivateUsersController < ApplicationController
|
||||||
|
def index
|
||||||
|
@private_users = PrivateUser.where(:platform_id => params[:platform_id]).paginate :page => params[:page]
|
||||||
|
@platform = Platform.find(params[:platform_id])
|
||||||
|
end
|
||||||
|
|
||||||
|
def create
|
||||||
|
pair = PrivateUser.generate_pair(params[:platform_id])
|
||||||
|
redirect_to platform_private_users_path(params[:platform_id]),
|
||||||
|
:notice => "Логин: #{ pair[:login] } Пароль: #{ pair[:pass] }"
|
||||||
|
end
|
||||||
|
|
||||||
|
def destroy
|
||||||
|
PrivateUser.find(params[:id]).destroy
|
||||||
|
redirect_to platform_private_users_path(params[:platform_id])
|
||||||
|
end
|
||||||
|
end
|
|
@ -0,0 +1,32 @@
|
||||||
|
class PrivatesController < ApplicationController
|
||||||
|
require 'digest/sha2'
|
||||||
|
|
||||||
|
before_filter :find_platform
|
||||||
|
before_filter :authenticate
|
||||||
|
|
||||||
|
def show
|
||||||
|
file_name = "#{APP_CONFIG['private_repo_path']}/#{params[:platform_name]}/#{params[:file_path]}"
|
||||||
|
|
||||||
|
if File.directory?(file_name) || !File.exists?(file_name)
|
||||||
|
render :file => "#{Rails.root}/public/404.html", :layout => false, :status => 404
|
||||||
|
else
|
||||||
|
send_file file_name
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
protected
|
||||||
|
|
||||||
|
def authenticate
|
||||||
|
authenticate_or_request_with_http_basic do |username, password|
|
||||||
|
PrivateUser.exists?(
|
||||||
|
:login => username,
|
||||||
|
:password => Digest::SHA2.new.hexdigest(password),
|
||||||
|
:platform_id => @platform.try(:id)
|
||||||
|
)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
def find_platform
|
||||||
|
@platform = Platform.find_by_name(params[:platform_name])
|
||||||
|
end
|
||||||
|
end
|
|
@ -0,0 +1,2 @@
|
||||||
|
module PrivateUsersHelper
|
||||||
|
end
|
|
@ -0,0 +1,2 @@
|
||||||
|
module PrivatesHelper
|
||||||
|
end
|
|
@ -0,0 +1,21 @@
|
||||||
|
class PrivateUser < ActiveRecord::Base
|
||||||
|
require 'digest/sha2'
|
||||||
|
require 'active_support/secure_random'
|
||||||
|
|
||||||
|
validate :login, :uniqueness => true
|
||||||
|
|
||||||
|
class << self
|
||||||
|
def generate_pair(platform_id)
|
||||||
|
login = "login_#{ActiveSupport::SecureRandom.hex(16)}"
|
||||||
|
pass = "pass_#{ActiveSupport::SecureRandom.hex(16)}"
|
||||||
|
|
||||||
|
PrivateUser.create(
|
||||||
|
:login => login,
|
||||||
|
:password => Digest::SHA2.new.hexdigest(pass),
|
||||||
|
:platform_id => platform_id
|
||||||
|
)
|
||||||
|
|
||||||
|
{:login => login, :pass => pass}
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
|
@ -4,6 +4,7 @@
|
||||||
%li.first= link_to t("layout.platforms.list"), platforms_path
|
%li.first= link_to t("layout.platforms.list"), platforms_path
|
||||||
%li= link_to t("layout.platforms.new"), new_platform_path
|
%li= link_to t("layout.platforms.new"), new_platform_path
|
||||||
%li.active= link_to t("layout.platforms.show"), platform_path
|
%li.active= link_to t("layout.platforms.show"), platform_path
|
||||||
|
%li= link_to t("layout.platforms.private_users"), platform_private_users_path(@platform)
|
||||||
.content
|
.content
|
||||||
.inner
|
.inner
|
||||||
%p
|
%p
|
||||||
|
|
|
@ -0,0 +1,43 @@
|
||||||
|
.block
|
||||||
|
.secondary-navigation
|
||||||
|
%ul.wat-cf
|
||||||
|
%li.first=# link_to t("layout.repositories.list"), platform_path(@platform) + "#repositories"
|
||||||
|
%li=# link_to t("layout.repositories.new"), new_platform_repository_path(@platform)
|
||||||
|
%li.active=# link_to t("layout.repositories.show"), platform_repository_path(@platform, @repository)
|
||||||
|
.content
|
||||||
|
.inner
|
||||||
|
%p
|
||||||
|
%b
|
||||||
|
= t("activerecord.attributes.platform.name")
|
||||||
|
\:
|
||||||
|
= @platform.name
|
||||||
|
%p
|
||||||
|
%b
|
||||||
|
= t("activerecord.attributes.repository.platform")
|
||||||
|
\:
|
||||||
|
= link_to @platform.name, platform_path(@platform)
|
||||||
|
.wat-cf
|
||||||
|
=# link_to image_tag("web-app-theme/icons/cross.png", :alt => t("layout.delete")) + " " + t("layout.delete"), platform_repository_path(@platform, @repository), :method => "delete", :class => "button", :confirm => t("layout.repositories.confirm_delete")
|
||||||
|
|
||||||
|
.block
|
||||||
|
.secondary-navigation
|
||||||
|
%ul.wat-cf
|
||||||
|
%li.first.active= link_to t("layout.private_users.list"), platform_private_users_path(@platform)
|
||||||
|
%li= link_to t("layout.private_users.new"), platform_private_users_path(@platform), :method => :post
|
||||||
|
.content
|
||||||
|
%h2.title
|
||||||
|
= t("layout.private_users.list_header")
|
||||||
|
.inner
|
||||||
|
%table.table
|
||||||
|
%tr
|
||||||
|
%th.first= t("activerecord.attributes.private_user.login")
|
||||||
|
%th.last
|
||||||
|
- @private_users.each do |private_user|
|
||||||
|
%tr{:class => cycle("odd", "even")}
|
||||||
|
%td
|
||||||
|
= link_to private_user.login, platform_private_user_path(@platform, private_user)
|
||||||
|
%td.last
|
||||||
|
#{link_to t("layout.delete"), platform_private_user_path(@platform, private_user), :method => :delete, :confirm => t("layout.private_users.confirm_delete")}
|
||||||
|
.actions-bar.wat-cf
|
||||||
|
.actions
|
||||||
|
= will_paginate @private_users
|
|
@ -43,6 +43,12 @@ ru:
|
||||||
sessions:
|
sessions:
|
||||||
sign_in_header: Вход в систему
|
sign_in_header: Вход в систему
|
||||||
|
|
||||||
|
private_users:
|
||||||
|
list: Список
|
||||||
|
new: Новая пара
|
||||||
|
list_header: Пары логин/пароль
|
||||||
|
confirm_delete: Вы уверены, что хотите удалить эту пару логин/пароль?
|
||||||
|
|
||||||
platforms:
|
platforms:
|
||||||
list: Список
|
list: Список
|
||||||
new: Создать
|
new: Создать
|
||||||
|
@ -67,6 +73,7 @@ ru:
|
||||||
visibility: Видимость
|
visibility: Видимость
|
||||||
platform_type: Тип платформы
|
platform_type: Тип платформы
|
||||||
distrib_type: Тип дистрибутива
|
distrib_type: Тип дистрибутива
|
||||||
|
private_users: Пользователи приватного репозитория
|
||||||
|
|
||||||
repositories:
|
repositories:
|
||||||
list: Список
|
list: Список
|
||||||
|
@ -265,6 +272,10 @@ ru:
|
||||||
download: Статистика
|
download: Статистика
|
||||||
|
|
||||||
attributes:
|
attributes:
|
||||||
|
private_user:
|
||||||
|
login: Логин
|
||||||
|
password: Пароль
|
||||||
|
|
||||||
repository:
|
repository:
|
||||||
name: Название
|
name: Название
|
||||||
platform_id: Платформа
|
platform_id: Платформа
|
||||||
|
|
|
@ -40,8 +40,12 @@ Rosa::Application.routes.draw do
|
||||||
# end
|
# end
|
||||||
# end
|
# end
|
||||||
# end
|
# end
|
||||||
|
#resources :privates
|
||||||
|
match '/private/:platform_name/*file_path' => 'privates#show'
|
||||||
|
|
||||||
resources :platforms do
|
resources :platforms do
|
||||||
|
resources :private_users
|
||||||
|
|
||||||
member do
|
member do
|
||||||
get 'freeze'
|
get 'freeze'
|
||||||
get 'unfreeze'
|
get 'unfreeze'
|
||||||
|
|
|
@ -0,0 +1,14 @@
|
||||||
|
class CreatePrivateUsers < ActiveRecord::Migration
|
||||||
|
def self.up
|
||||||
|
create_table :private_users do |t|
|
||||||
|
t.integer :platform_id
|
||||||
|
t.string :login
|
||||||
|
t.string :password
|
||||||
|
t.timestamps
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
def self.down
|
||||||
|
drop_table :private_users
|
||||||
|
end
|
||||||
|
end
|
|
@ -123,6 +123,14 @@ ActiveRecord::Schema.define(:version => 20111018102655) do
|
||||||
t.string "distrib_type"
|
t.string "distrib_type"
|
||||||
end
|
end
|
||||||
|
|
||||||
|
create_table "private_users", :force => true do |t|
|
||||||
|
t.integer "platform_id"
|
||||||
|
t.string "login"
|
||||||
|
t.string "password"
|
||||||
|
t.datetime "created_at"
|
||||||
|
t.datetime "updated_at"
|
||||||
|
end
|
||||||
|
|
||||||
create_table "products", :force => true do |t|
|
create_table "products", :force => true do |t|
|
||||||
t.string "name", :null => false
|
t.string "name", :null => false
|
||||||
t.integer "platform_id", :null => false
|
t.integer "platform_id", :null => false
|
||||||
|
|
|
@ -0,0 +1,5 @@
|
||||||
|
require 'spec_helper'
|
||||||
|
|
||||||
|
describe PrivateUsersController do
|
||||||
|
|
||||||
|
end
|
|
@ -0,0 +1,5 @@
|
||||||
|
require 'spec_helper'
|
||||||
|
|
||||||
|
describe PrivatesController do
|
||||||
|
|
||||||
|
end
|
|
@ -0,0 +1,15 @@
|
||||||
|
require 'spec_helper'
|
||||||
|
|
||||||
|
# Specs in this file have access to a helper object that includes
|
||||||
|
# the PrivateUsersHelper. For example:
|
||||||
|
#
|
||||||
|
# describe PrivateUsersHelper do
|
||||||
|
# describe "string concat" do
|
||||||
|
# it "concats two strings with spaces" do
|
||||||
|
# helper.concat_strings("this","that").should == "this that"
|
||||||
|
# end
|
||||||
|
# end
|
||||||
|
# end
|
||||||
|
describe PrivateUsersHelper do
|
||||||
|
pending "add some examples to (or delete) #{__FILE__}"
|
||||||
|
end
|
|
@ -0,0 +1,15 @@
|
||||||
|
require 'spec_helper'
|
||||||
|
|
||||||
|
# Specs in this file have access to a helper object that includes
|
||||||
|
# the PrivatesHelper. For example:
|
||||||
|
#
|
||||||
|
# describe PrivatesHelper do
|
||||||
|
# describe "string concat" do
|
||||||
|
# it "concats two strings with spaces" do
|
||||||
|
# helper.concat_strings("this","that").should == "this that"
|
||||||
|
# end
|
||||||
|
# end
|
||||||
|
# end
|
||||||
|
describe PrivatesHelper do
|
||||||
|
pending "add some examples to (or delete) #{__FILE__}"
|
||||||
|
end
|
|
@ -0,0 +1,5 @@
|
||||||
|
require 'spec_helper'
|
||||||
|
|
||||||
|
describe PrivateUser do
|
||||||
|
pending "add some examples to (or delete) #{__FILE__}"
|
||||||
|
end
|
Loading…
Reference in New Issue