144 lines
5.1 KiB
Ruby
144 lines
5.1 KiB
Ruby
#
|
|
# Copyright (C) 2016 - present Instructure, Inc.
|
|
#
|
|
# This file is part of Canvas.
|
|
#
|
|
# Canvas is free software: you can redistribute it and/or modify it under
|
|
# the terms of the GNU Affero General Public License as published by the Free
|
|
# Software Foundation, version 3 of the License.
|
|
#
|
|
# Canvas 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 Affero General Public License for more
|
|
# details.
|
|
#
|
|
# You should have received a copy of the GNU Affero General Public License along
|
|
# with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
|
|
# @API Shared Brand Configs
|
|
# @beta
|
|
# This is how you can share Themes with other people in your account or
|
|
# so you can come back to them later without having to apply them to your account
|
|
#
|
|
# @model SharedBrandConfig
|
|
# {
|
|
# "id": "SharedBrandConfig",
|
|
# "properties": {
|
|
# "id": {
|
|
# "description": "The shared_brand_config identifier.",
|
|
# "example": 987,
|
|
# "type": "integer"
|
|
# },
|
|
# "account_id": {
|
|
# "description": "The id of the account it should be shared within.",
|
|
# "example": "",
|
|
# "type": "string"
|
|
# },
|
|
# "brand_config_md5": {
|
|
# "description": "The md5 (since BrandConfigs are identified by MD5 and not numeric id) of the BrandConfig to share.",
|
|
# "example": "1d31002c95842f8fe16da7dfcc0d1f39",
|
|
# "type": "string"
|
|
# },
|
|
# "name": {
|
|
# "description": "The name to share this theme as",
|
|
# "example": "Crimson and Gold Verson 1",
|
|
# "type": "string"
|
|
# },
|
|
# "created_at": {
|
|
# "description": "When this was created",
|
|
# "example": "2012-07-13T10:55:20-06:00",
|
|
# "type": "datetime"
|
|
# },
|
|
# "updated_at": {
|
|
# "description": "When this was last updated",
|
|
# "example": "2012-07-13T10:55:20-06:00",
|
|
# "type": "datetime"
|
|
# }
|
|
# }
|
|
# }
|
|
#
|
|
|
|
class SharedBrandConfigsController < ApplicationController
|
|
before_action :require_account_context, except: [:destroy]
|
|
before_action :require_user
|
|
before_action :set_shared_brand_config, only: [:destroy, :update]
|
|
|
|
|
|
# @API Share a BrandConfig (Theme)
|
|
#
|
|
# Create a SharedBrandConfig, which will give the given brand_config a name
|
|
# and make it available to other users of this account.
|
|
#
|
|
# @argument shared_brand_config[name] [Required, String]
|
|
# Name to share this BrandConfig (theme) as.
|
|
#
|
|
# @argument shared_brand_config[brand_config_md5] [Required, String]
|
|
# MD5 of brand_config to share
|
|
# @example_request
|
|
#
|
|
# curl 'https://<canvas>/api/v1/accounts/<account_id>/shared_brand_configs' \
|
|
# -X POST \
|
|
# -F 'shared_brand_config[name]=Crimson and Gold Theme' \
|
|
# -F 'shared_brand_config[brand_config_md5]=a1f113321fa024e7a14cb0948597a2a4' \
|
|
# -H "Authorization: Bearer <token>"
|
|
# @returns SharedBrandConfig
|
|
def create
|
|
@shared_brand_config = @account.shared_brand_configs.new(shared_brand_config_params)
|
|
|
|
if authorized_action(@shared_brand_config, @current_user, :create)
|
|
if @shared_brand_config.save
|
|
render json: @shared_brand_config.as_json(include_root: false), status: :created
|
|
else
|
|
render json: @shared_brand_config.errors, status: :unprocessable_entity
|
|
end
|
|
end
|
|
end
|
|
|
|
# @API Update a shared theme
|
|
# Update the specified shared_brand_config with a new name or to point to a new brand_config.
|
|
# Uses same parameters as create.
|
|
#
|
|
# @example_request
|
|
#
|
|
# curl -X PUT 'https://<canvas>/api/v1/accounts/<account_id>/shared_brand_configs/<shared_brand_config_id>' \
|
|
# -H "Authorization: Bearer <token>" \
|
|
# -F 'shared_brand_config[name]=New Name' \
|
|
# -F 'shared_brand_config[brand_config_md5]=a1f113321fa024e7a14cb0948597a2a4'
|
|
# @returns SharedBrandConfig
|
|
def update
|
|
if authorized_action(@shared_brand_config, @current_user, :update)
|
|
if @shared_brand_config.update(shared_brand_config_params)
|
|
render json: @shared_brand_config.as_json(include_root: false)
|
|
else
|
|
render json: @shared_brand_config.errors, status: :unprocessable_entity
|
|
end
|
|
end
|
|
end
|
|
|
|
# @API Un-share a BrandConfig (Theme)
|
|
#
|
|
# Delete a SharedBrandConfig, which will unshare it so you nor anyone else in
|
|
# your account will see it as an option to pick from.
|
|
#
|
|
# @example_request
|
|
# curl -X DELETE https://<canvas>/api/v1/shared_brand_configs/<id> \
|
|
# -H 'Authorization: Bearer <token>'
|
|
# @returns SharedBrandConfig
|
|
def destroy
|
|
if authorized_action(@shared_brand_config, @current_user, :delete)
|
|
@shared_brand_config.destroy
|
|
render json: @shared_brand_config.as_json(include_root: false)
|
|
end
|
|
end
|
|
|
|
private
|
|
def set_shared_brand_config
|
|
@shared_brand_config = SharedBrandConfig.find(params[:id])
|
|
end
|
|
|
|
# Never trust parameters from the scary internet, only allow the white list through.
|
|
def shared_brand_config_params
|
|
params.require(:shared_brand_config).permit(:brand_config_md5, :name)
|
|
end
|
|
end
|