An unofficial, mostly Bitwarden-compatible API server written in Ruby (Sinatra and ActiveRecord)
1#
2# Copyright (c) 2017 joshua stein <jcs@jcs.org>
3#
4# Permission to use, copy, modify, and distribute this software for any
5# purpose with or without fee is hereby granted, provided that the above
6# copyright notice and this permission notice appear in all copies.
7#
8# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
9# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
10# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
11# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
12# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
13# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
14# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
15#
16
17class Attachment < DBModel
18 self.table_name = "attachments"
19
20 before_create :generate_uuid_primary_key
21
22 belongs_to :cipher,
23 foreign_key: :cipher_uuid,
24 inverse_of: :attachments
25
26 def self.build_from_params(params)
27 Attachment.new(filename: params[:filename], size: params[:size],
28 file: params[:file])
29 end
30
31 def to_hash
32 {
33 "Id" => self.uuid,
34 "Url" => self.url,
35 "FileName" => self.filename.to_s,
36 "Size" => self.size,
37 "SizeName" => human_file_size,
38 "Object" => "attachment"
39 }
40 end
41
42 def url
43 "#{::ATTACHMENTS_URL}/#{self.cipher_uuid}/#{self.id}"
44 end
45
46private
47 def human_file_size
48 ActiveSupport::NumberHelper.number_to_human_size(self.size)
49 end
50end