about summary refs log tree commit diff
diff options
context:
space:
mode:
authorEugen Rochko <eugen@zeonfederated.com>2017-08-23 00:59:35 +0200
committerGitHub <noreply@github.com>2017-08-23 00:59:35 +0200
commitc1b086a538d128e9fbceab4fc6686611a4f2710f (patch)
treec57a587e6e09c9f13aea58009854427899209695
parent696c2c6f2f3338df121cf17389478da9ecab11af (diff)
Fix up the applications area (#4664)
- Section it into "Development" area
- Improve UI of application form, index, and details
-rw-r--r--app/controllers/settings/applications_controller.rb21
-rw-r--r--app/views/settings/applications/_fields.html.haml15
-rw-r--r--app/views/settings/applications/index.html.haml11
-rw-r--r--app/views/settings/applications/new.html.haml11
-rw-r--r--app/views/settings/applications/show.html.haml40
-rw-r--r--config/locales/doorkeeper.en.yml19
-rw-r--r--config/locales/en.yml23
-rw-r--r--config/locales/ja.yml6
-rw-r--r--config/locales/oc.yml16
-rw-r--r--config/locales/pl.yml8
-rw-r--r--config/navigation.rb5
-rw-r--r--config/routes.rb6
-rw-r--r--db/schema.rb11
-rw-r--r--spec/controllers/settings/applications_controller_spec.rb2
14 files changed, 102 insertions, 92 deletions
diff --git a/app/controllers/settings/applications_controller.rb b/app/controllers/settings/applications_controller.rb
index b8f114455..894222c2a 100644
--- a/app/controllers/settings/applications_controller.rb
+++ b/app/controllers/settings/applications_controller.rb
@@ -4,6 +4,7 @@ class Settings::ApplicationsController < ApplicationController
   layout 'admin'
 
   before_action :authenticate_user!
+  before_action :set_application, only: [:show, :update, :destroy, :regenerate]
 
   def index
     @applications = current_user.applications.page(params[:page])
@@ -16,22 +17,20 @@ class Settings::ApplicationsController < ApplicationController
     )
   end
 
-  def show
-    @application = current_user.applications.find(params[:id])
-  end
+  def show; end
 
   def create
     @application = current_user.applications.build(application_params)
+
     if @application.save
-      redirect_to settings_applications_path, notice: I18n.t('application.created')
+      redirect_to settings_applications_path, notice: I18n.t('applications.created')
     else
       render :new
     end
   end
 
   def update
-    @application = current_user.applications.find(params[:id])
-    if @application.update_attributes(application_params)
+    if @application.update(application_params)
       redirect_to settings_applications_path, notice: I18n.t('generic.changes_saved_msg')
     else
       render :show
@@ -39,21 +38,23 @@ class Settings::ApplicationsController < ApplicationController
   end
 
   def destroy
-    @application = current_user.applications.find(params[:id])
     @application.destroy
-    redirect_to settings_applications_path, notice: t('application.destroyed')
+    redirect_to settings_applications_path, notice: I18n.t('applications.destroyed')
   end
 
   def regenerate
-    @application = current_user.applications.find(params[:application_id])
     @access_token = current_user.token_for_app(@application)
     @access_token.destroy
 
-    redirect_to settings_application_path(@application), notice: t('access_token.regenerated')
+    redirect_to settings_application_path(@application), notice: I18n.t('applications.token_regenerated')
   end
 
   private
 
+  def set_application
+    @application = current_user.applications.find(params[:id])
+  end
+
   def application_params
     params.require(:doorkeeper_application).permit(
       :name,
diff --git a/app/views/settings/applications/_fields.html.haml b/app/views/settings/applications/_fields.html.haml
index 9dbe23466..536f69e04 100644
--- a/app/views/settings/applications/_fields.html.haml
+++ b/app/views/settings/applications/_fields.html.haml
@@ -1,4 +1,11 @@
-= f.input :name, hint: t('activerecord.attributes.doorkeeper/application.name')
-= f.input :website, hint: t('activerecord.attributes.doorkeeper/application.website')
-= f.input :redirect_uri, hint: t('activerecord.attributes.doorkeeper/application.redirect_uri')
-= f.input :scopes, hint: t('activerecord.attributes.doorkeeper/application.scopes')
+.fields-group
+  = f.input :name, placeholder: t('activerecord.attributes.doorkeeper/application.name')
+  = f.input :website, placeholder: t('activerecord.attributes.doorkeeper/application.website')
+
+.fields-group
+  = f.input :redirect_uri, wrapper: :with_block_label, label: t('activerecord.attributes.doorkeeper/application.redirect_uri'), hint: t('doorkeeper.applications.help.redirect_uri')
+
+  %p.hint= t('doorkeeper.applications.help.native_redirect_uri', native_redirect_uri: Doorkeeper.configuration.native_redirect_uri)
+
+.fields-group
+  = f.input :scopes, wrapper: :with_label, label: t('activerecord.attributes.doorkeeper/application.scopes'), hint: t('doorkeeper.applications.help.scopes')
diff --git a/app/views/settings/applications/index.html.haml b/app/views/settings/applications/index.html.haml
index 17035f96c..eea550388 100644
--- a/app/views/settings/applications/index.html.haml
+++ b/app/views/settings/applications/index.html.haml
@@ -6,15 +6,14 @@
     %tr
       %th= t('doorkeeper.applications.index.application')
       %th= t('doorkeeper.applications.index.scopes')
-      %th= t('doorkeeper.applications.index.created_at')
       %th
   %tbody
     - @applications.each do |application|
       %tr
         %td= link_to application.name, settings_application_path(application)
-        %th= application.scopes.map { |scope| t(scope, scope: [:doorkeeper, :scopes]) }.join('<br />').html_safe
-        %td= l application.created_at
-        %td= table_link_to 'show', t('doorkeeper.applications.index.show'), settings_application_path(application)
-        %td= table_link_to 'times', t('doorkeeper.applications.index.delete'), settings_application_path(application), method: :delete, data: { confirm: t('doorkeeper.applications.confirmations.destroy') }
+        %th= application.scopes
+        %td
+          = table_link_to 'times', t('doorkeeper.applications.index.delete'), settings_application_path(application), method: :delete, data: { confirm: t('doorkeeper.applications.confirmations.destroy') }
+
 = paginate @applications
-= link_to t('add_new'), new_settings_application_path, class: 'button'
+= link_to t('doorkeeper.applications.index.new'), new_settings_application_path, class: 'button'
diff --git a/app/views/settings/applications/new.html.haml b/app/views/settings/applications/new.html.haml
index 61406a31f..5274a430c 100644
--- a/app/views/settings/applications/new.html.haml
+++ b/app/views/settings/applications/new.html.haml
@@ -1,9 +1,8 @@
 - content_for :page_title do
   = t('doorkeeper.applications.new.title')
+
+= simple_form_for @application, url: settings_applications_path do |f|
+  = render 'fields', f: f
   
-.form-container
-  = simple_form_for @application, url: settings_applications_path do |f|
-    = render 'fields', f:f
-    
-    .actions
-      = f.button :button, t('.create'), type: :submit
+  .actions
+    = f.button :button, t('doorkeeper.applications.buttons.submit'), type: :submit
diff --git a/app/views/settings/applications/show.html.haml b/app/views/settings/applications/show.html.haml
index 9f1a11986..4d8555111 100644
--- a/app/views/settings/applications/show.html.haml
+++ b/app/views/settings/applications/show.html.haml
@@ -1,27 +1,29 @@
 - content_for :page_title do
   = t('doorkeeper.applications.show.title', name: @application.name)
 
-
-%p.hint= t('application.warning')
-  
-%div
-  %h3= t('application.uid')
-  %code= @application.uid
-
-%div 
-  %h3= t('application.secret')
-  %code= @application.secret
-
-%div
-  %h3= t('access_token.your_token')
-  %code= current_user.token_for_app(@application).token
-
-= link_to t('access_token.regenerate'), settings_application_regenerate_path(@application), method: :put,  class: 'button'
-
-%hr
+%p.hint= t('applications.warning')
+
+%table.table
+  %tbody
+    %tr  
+      %th= t('doorkeeper.applications.show.application_id')
+      %td
+        %code= @application.uid
+    %tr
+      %th= t('doorkeeper.applications.show.secret')
+      %td
+        %code= @application.secret
+    %tr
+      %th{ rowspan: 2}= t('applications.your_token')
+      %td
+        %code= current_user.token_for_app(@application).token
+    %tr
+      %td= table_link_to 'refresh', t('applications.regenerate_token'), regenerate_settings_application_path(@application), method: :post
+
+%hr/
 
 = simple_form_for @application, url: settings_application_path(@application), method: :put do |f|
-  = render 'fields', f:f
+  = render 'fields', f: f
     
   .actions
     = f.button :button, t('generic.save_changes'), type: :submit
diff --git a/config/locales/doorkeeper.en.yml b/config/locales/doorkeeper.en.yml
index fa0a7babf..788d1bb40 100644
--- a/config/locales/doorkeeper.en.yml
+++ b/config/locales/doorkeeper.en.yml
@@ -3,10 +3,10 @@ en:
   activerecord:
     attributes:
       doorkeeper/application:
-        name: Application Name
-        website: Application Website
+        name: Application name
         redirect_uri: Redirect URI
         scopes: Scopes
+        website: Application website
     errors:
       models:
         doorkeeper/application:
@@ -36,20 +36,19 @@ en:
         scopes: Separate scopes with spaces. Leave blank to use the default scopes.
       index:
         callback_url: Callback URL
+        delete: Delete
         name: Name
-        new: New Application
-        title: Your applications
+        new: New application
         show: Show
-        delete: Delete
+        title: Your applications
       new:
-        title: New Application
+        title: New application
       show:
-        title: 'Application: %{name}'
         actions: Actions
-        application_id: Application Id
-        callback_urls: Callback urls
+        application_id: Client key
+        callback_urls: Callback URLs
         scopes: Scopes
-        secret: Secret
+        secret: Client secret
         title: 'Application: %{name}'
     authorizations:
       buttons:
diff --git a/config/locales/en.yml b/config/locales/en.yml
index fbcef03bd..97bb14186 100644
--- a/config/locales/en.yml
+++ b/config/locales/en.yml
@@ -33,24 +33,20 @@ en:
     user_count_after: users
     user_count_before: Home to
     what_is_mastodon: What is Mastodon?
-  access_token:
-    your_token: Your Access Token
-    regenerate: Regenerate Access Token
-    regenerated: Access Token Regenerated
   accounts:
     follow: Follow
     followers: Followers
     following: Following
+    media: Media
     nothing_here: There is nothing here!
     people_followed_by: People whom %{name} follows
     people_who_follow: People who follow %{name}
     posts: Toots
     posts_with_replies: Toots with replies
-    media: Media
-    roles:
-      admin: Admin
     remote_follow: Remote follow
     reserved_username: The username is reserved
+    roles:
+      admin: Admin
     unfollow: Unfollow
   admin:
     accounts:
@@ -230,14 +226,14 @@ en:
     settings: 'Change e-mail preferences: %{link}'
     signature: Mastodon notifications from %{instance}
     view: 'View:'
-  application:
-    created: Application Created
-    destroyed: Application Destroyed
-    uid: Client ID
-    secret: Client Secret
-    warning: Be very careful with this data. Never share it with anyone other than authorized applications!    
   applications:
+    created: Application successfully created
+    destroyed: Application successfully deleted
     invalid_url: The provided URL is invalid
+    regenerate_token: Regenerate access token
+    token_regenerated: Access token successfully regenerated
+    warning: Be very careful with this data. Never share it with anyone!
+    your_token: Your access token
   auth:
     agreement_html: By signing up you agree to <a href="%{rules_path}">our terms of service</a> and <a href="%{terms_path}">privacy policy</a>.
     change_password: Security
@@ -426,6 +422,7 @@ en:
     authorized_apps: Authorized apps
     back: Back to Mastodon
     delete: Account deletion
+    development: Development
     edit_profile: Edit profile
     export: Data export
     followers: Authorized followers
diff --git a/config/locales/ja.yml b/config/locales/ja.yml
index 0f0b0ad4a..2ee99db45 100644
--- a/config/locales/ja.yml
+++ b/config/locales/ja.yml
@@ -37,16 +37,16 @@ ja:
     follow: フォロー
     followers: フォロワー
     following: フォロー中
+    media: メディア
     nothing_here: 何もありません
     people_followed_by: "%{name} さんがフォロー中のアカウント"
     people_who_follow: "%{name} さんをフォロー中のアカウント"
     posts: トゥート
     posts_with_replies: トゥートと返信
-    media: メディア
-    roles:
-      admin: Admin
     remote_follow: リモートフォロー
     reserved_username: このユーザー名は予約されています。
+    roles:
+      admin: Admin
     unfollow: フォロー解除
   admin:
     accounts:
diff --git a/config/locales/oc.yml b/config/locales/oc.yml
index 9038d887a..65ea4525a 100644
--- a/config/locales/oc.yml
+++ b/config/locales/oc.yml
@@ -37,16 +37,16 @@ oc:
     follow: Sègre
     followers: Seguidors
     following: Abonaments
+    media: Mèdias
     nothing_here: I a pas res aquí !
     people_followed_by: Lo mond que %{name} sèc
     people_who_follow: Lo mond que sègon %{name}
     posts: Tuts
     posts_with_replies: Tuts amb responsas
-    media: Mèdias
-    roles:
-      admin: Admin
     remote_follow: Sègre a distància
     reserved_username: Aqueste nom d’utilizaire es reservat
+    roles:
+      admin: Admin
     unfollow: Quitar de sègre
   admin:
     accounts:
@@ -221,7 +221,7 @@ oc:
       body: "%{reporter} a senhalat %{target}"
       subject: Novèl senhalament per %{instance} (#%{id})
   application_mailer:
-    salutation: '%{name},'
+    salutation: "%{name},"
     settings: 'Cambiar las preferéncias de corrièl : %{link}'
     signature: Notificacion de Mastodon sus %{instance}
     view: 'Veire :'
@@ -234,13 +234,13 @@ oc:
     delete_account_html: Se volètz suprimir vòstre compte, podètz <a href="%{path}">o far aquí</a>. Vos demandarem que confirmetz.
     didnt_get_confirmation: Avètz pas recebut las instruccions de confirmacion ?
     forgot_password: Senhal oblidat ?
+    invalid_reset_password_token: Lo geton de reïnicializacion es invalid o acabat. Tornatz demandar un geton se vos plai.
     login: Se connectar
     logout: Se desconnectar
     register: Se marcar
     resend_confirmation: Tornar mandar las instruccions de confirmacion
     reset_password: Reïnicializar lo senhal
     set_new_password: Picar un nòu senhal
-    invalid_reset_password_token: Lo geton de reïnicializacion es invalid o acabat. Tornatz demandar un geton se vos plai.
   authorize_follow:
     error: O planhèm, i a agut una error al moment de cercar lo compte
     follow: Sègre
@@ -337,12 +337,12 @@ oc:
       x_months:
         one: Fa un mes
         other: Fa %{count} meses
-      x_years:
-        one: Fa un an
-        other: Fa %{count} ans
       x_seconds:
         one: Fa una segonda
         other: Fa %{count} segondas
+      x_years:
+        one: Fa un an
+        other: Fa %{count} ans
   deletes:
     bad_password_msg: Ben ensajat pirata ! Senhal incorrècte
     confirm_password: Picatz vòstre senhal actual per verificar vòstra identitat
diff --git a/config/locales/pl.yml b/config/locales/pl.yml
index c005cdb01..b7f4898b0 100644
--- a/config/locales/pl.yml
+++ b/config/locales/pl.yml
@@ -37,16 +37,16 @@ pl:
     follow: Śledź
     followers: Śledzących
     following: Śledzi
+    media: Zawartość multimedialna
     nothing_here: Niczego tu nie ma!
     people_followed_by: Konta śledzone przez %{name}
     people_who_follow: Osoby, które śledzą konto %{name}
     posts: Wpisy
     posts_with_replies: Wpisy z odpowiedziami
-    media: Zawartość multimedialna
-    roles:
-      admin: Administrator
     remote_follow: Śledź zdalnie
     reserved_username: Ta nazwa użytkownika jest zarezerwowana.
+    roles:
+      admin: Administrator
     unfollow: Przestań śledzić
   admin:
     accounts:
@@ -126,8 +126,8 @@ pl:
       severity: Priorytet
       show:
         affected_accounts:
-          one: Dotyczy jednego konta w bazie danych
           many: Dotyczy %{count} kont w bazie danych
+          one: Dotyczy jednego konta w bazie danych
           other: Dotyczy %{count} kont w bazie danych
         retroactive:
           silence: Odwołaj wyciszenie wszystkich kont w tej domenie
diff --git a/config/navigation.rb b/config/navigation.rb
index 6e04843ec..4b454b3fc 100644
--- a/config/navigation.rb
+++ b/config/navigation.rb
@@ -12,10 +12,13 @@ SimpleNavigation::Configuration.run do |navigation|
       settings.item :import, safe_join([fa_icon('cloud-upload fw'), t('settings.import')]), settings_import_url
       settings.item :export, safe_join([fa_icon('cloud-download fw'), t('settings.export')]), settings_export_url
       settings.item :authorized_apps, safe_join([fa_icon('list fw'), t('settings.authorized_apps')]), oauth_authorized_applications_url
-      settings.item :your_apps, safe_join([fa_icon('list fw'), t('settings.your_apps')]), settings_applications_url
       settings.item :follower_domains, safe_join([fa_icon('users fw'), t('settings.followers')]), settings_follower_domains_url
     end
 
+    primary.item :development, safe_join([fa_icon('code fw'), t('settings.development')]), settings_applications_url do |development|
+      development.item :your_apps, safe_join([fa_icon('list fw'), t('settings.your_apps')]), settings_applications_url, highlights_on: %r{/settings/applications}
+    end
+
     primary.item :admin, safe_join([fa_icon('cogs fw'), t('admin.title')]), admin_reports_url, if: proc { current_user.admin? } do |admin|
       admin.item :reports, safe_join([fa_icon('flag fw'), t('admin.reports.title')]), admin_reports_url, highlights_on: %r{/admin/reports}
       admin.item :accounts, safe_join([fa_icon('users fw'), t('admin.accounts.title')]), admin_accounts_url, highlights_on: %r{/admin/accounts}
diff --git a/config/routes.rb b/config/routes.rb
index e8bc968f4..94a4ac88e 100644
--- a/config/routes.rb
+++ b/config/routes.rb
@@ -80,8 +80,10 @@ Rails.application.routes.draw do
 
     resource :follower_domains, only: [:show, :update]
 
-    resources :applications do
-      put :regenerate
+    resources :applications, except: [:edit] do
+      member do
+        post :regenerate
+      end
     end
 
     resource :delete, only: [:show, :destroy]
diff --git a/db/schema.rb b/db/schema.rb
index 929a5fd01..98b07e282 100644
--- a/db/schema.rb
+++ b/db/schema.rb
@@ -216,11 +216,11 @@ ActiveRecord::Schema.define(version: 20170720000000) do
     t.string "scopes", default: "", null: false
     t.datetime "created_at"
     t.datetime "updated_at"
-    t.boolean  "superapp",     default: false, null: false
-    t.string   "website"
-    t.integer  "owner_id"
-    t.string   "owner_type"
-    t.index ["owner_id", "owner_type"], name: "index_oauth_applications_on_owner_id_and_owner_type", using: :btree
+    t.boolean "superapp", default: false, null: false
+    t.string "website"
+    t.integer "owner_id"
+    t.string "owner_type"
+    t.index ["owner_id", "owner_type"], name: "index_oauth_applications_on_owner_id_and_owner_type"
     t.index ["uid"], name: "index_oauth_applications_on_uid", unique: true
   end
 
@@ -423,6 +423,7 @@ ActiveRecord::Schema.define(version: 20170720000000) do
   add_foreign_key "oauth_access_grants", "users", column: "resource_owner_id", on_delete: :cascade
   add_foreign_key "oauth_access_tokens", "oauth_applications", column: "application_id", on_delete: :cascade
   add_foreign_key "oauth_access_tokens", "users", column: "resource_owner_id", on_delete: :cascade
+  add_foreign_key "oauth_applications", "users", column: "owner_id", on_delete: :cascade
   add_foreign_key "preview_cards", "statuses", on_delete: :cascade
   add_foreign_key "reports", "accounts", column: "action_taken_by_account_id", on_delete: :nullify
   add_foreign_key "reports", "accounts", column: "target_account_id", on_delete: :cascade
diff --git a/spec/controllers/settings/applications_controller_spec.rb b/spec/controllers/settings/applications_controller_spec.rb
index fa27e6ec6..7902a4334 100644
--- a/spec/controllers/settings/applications_controller_spec.rb
+++ b/spec/controllers/settings/applications_controller_spec.rb
@@ -156,7 +156,7 @@ describe Settings::ApplicationsController do
     let(:token) { user.token_for_app(app) }
     before do
       expect(token).to_not be_nil
-      put :regenerate, params: { application_id: app.id }
+      post :regenerate, params: { id: app.id }
     end
 
     it 'should create new token' do