class SlackSmartBot
def upgrade_to_use_team_ids()
team_id = config.team_id
if Dir.exist?("#{config.path}/rules/") files_updated = []
Dir.glob(config.path + "/rules/**/*").select { |i| i[/admins_channels.yaml$/] }.each do |f|
t = YAML.load_file(f)
n = {}
t.each do |k, v|
if v.length > 0
n[k] = []
v.each do |m|
if !m.to_s.match?(/^[A-Z0-9]{7,11}_/)
n[k] << team_id.to_s + "_" + m
files_updated << f unless files_updated.include?(f)
else
n[k] << m
end
end
else
n[k] = v
end
end
File.open(f, "w") { |f| f.write n.to_yaml } if files_updated.include?(f)
end
@logger.info "Updated admins_channels.yaml files to use team ids" unless files_updated.empty?
files_updated = []
Dir.glob(config.path + "/rules/**/*").select { |i| i[/access_channels.yaml$/] }.each do |f|
t = YAML.load_file(f)
n = {}
t.each do |k, v|
n[k] = {}
v.each do |k2, v2|
if v2.length > 0
n[k][k2] = []
v2.each do |m|
if !m.to_s.match?(/^[A-Z0-9]{7,11}_/)
n[k][k2] << team_id.to_s + "_" + m
files_updated << f unless files_updated.include?(f)
else
n[k][k2] << m
end
end
else
n[k][k2] = v2
end
end
end
File.open(f, "w") { |f| f.write n.to_yaml } if files_updated.include?(f)
end
@logger.info "Updated access_channels.yaml files to use team ids" unless files_updated.empty?
files_updated = []
Dir.glob(config.path + "/rules/*").select { |i| i[/rules_imported.yaml$/] }.each do |f|
t = YAML.load_file(f)
n = {}
t.each do |k, v|
if !k.to_s.match?(/^[A-Z0-9]{7,11}_/)
n["#{team_id.to_s}_#{k}"] = v
files_updated << f unless files_updated.include?(f)
else
n[k] = v
end
end
File.open(f, "w") { |f| f.write n.to_yaml } if files_updated.include?(f)
end
@logger.info "Updated rules_imported.yaml files to use team ids" unless files_updated.empty?
end
if Dir.exist?("#{config.path}/teams/")
files_updated = []
Dir.entries("#{config.path}/teams/").select { |i| i[/\.yaml$/] }.each do |f|
t = YAML.load(Utils::Encryption.decrypt(File.read("#{config.path}/teams/#{f}"), config))
t[:members].each do |k, v|
n = []
v.each do |m|
if !m.to_s.match?(/^[A-Z0-9]{7,11}_/)
n << team_id.to_s + "_" + m
files_updated << f unless files_updated.include?(f)
else
n << m
end
end
t[:members][k] = n
end
if t.key?(:memos)
t[:memos].each do |m|
if !m[:user].to_s.match?(/^[A-Z0-9]{7,11}_/)
m[:user] = team_id.to_s + "_" + m[:user]
files_updated << f unless files_updated.include?(f)
end
if m.key?(:comments)
m[:comments].each do |c|
if !c[:user_name].to_s.match?(/^[A-Z0-9]{7,11}_/)
c[:user_name] = team_id.to_s + "_" + c[:user_name]
files_updated << f unless files_updated.include?(f)
end
end
end
end
end
if !t[:user].to_s.match?(/^[A-Z0-9]{7,11}_/)
t[:user] = team_id.to_s + "_" + t[:user]
files_updated << f unless files_updated.include?(f)
end
if !t[:creator].to_s.match?(/^[A-Z0-9]{7,11}_/)
t[:creator] = team_id.to_s + "_" + t[:creator]
files_updated << f unless files_updated.include?(f)
end
if files_updated.include?(f)
File.open("#{config.path}/teams/#{f}", "w") { |file|
file.flock(File::LOCK_EX)
file.write(Utils::Encryption.encrypt(t.to_yaml, config))
file.flock(File::LOCK_UN)
}
end
end
@logger.info "Updated teams files to use team ids" unless files_updated.empty?
end
if Dir.exist?("#{config.path}/shortcuts/")
files_updated = []
Dir.entries("#{config.path}/shortcuts/").select { |i| i[/\.yaml$/] }.each do |f|
t = YAML.load_file("#{config.path}/shortcuts/#{f}")
n = {}
t.each do |k, v|
if k != :all and !k.to_s.match?(/^[A-Z0-9]{7,11}_/)
n[team_id.to_s + "_" + k.to_s] = t[k]
files_updated << f unless files_updated.include?(f)
else
n[k] = t[k]
end
end
File.open("#{config.path}/shortcuts/#{f}", "w") { |f| f.write n.to_yaml } if files_updated.include?(f)
end
@logger.info "Updated shortcuts files to use team ids" unless files_updated.empty?
end
if Dir.exist?("#{config.path}/repl/")
files_updated = []
Dir.entries("#{config.path}/repl/").select { |i| i[/\.yaml$/] }.each do |f|
t = YAML.load_file("#{config.path}/repl/#{f}")
t.each do |k, v|
if v[:creator_team_id].to_s == ""
v[:creator_team_id] = team_id
files_updated << f unless files_updated.include?(f)
end
end
File.open("#{config.path}/repl/#{f}", "w") { |f| f.write t.to_yaml } if files_updated.include?(f)
end
@logger.info "Updated repl files to use team ids" unless files_updated.empty?
end
if Dir.exist?("#{config.path}/routines/")
files_updated = []
Dir.entries("#{config.path}/routines/").select { |i| i[/\.yaml$/] }.each do |f|
t = YAML.load_file("#{config.path}/routines/#{f}")
t.each do |k, v|
v.each do |k2, v2|
if v2[:creator_team_id].to_s == ""
v2[:creator_team_id] = team_id
files_updated << f unless files_updated.include?(f)
end
end
end
File.open("#{config.path}/routines/#{f}", "w") { |f| f.write t.to_yaml } if files_updated.include?(f)
end
@logger.info "Updated routines files to use team ids" unless files_updated.empty?
end
if Dir.exist?("#{config.path}/shares/")
Dir.entries("#{config.path}/shares/").select { |i| i[/\.csv$/] }.each do |f|
t = CSV.table("#{config.path}/shares/#{f}")
if t..length == 8
t = CSV.table("#{config.path}/shares/#{f}", headers: ["share_id", "user_deleted", "user_created", "date", "time", "type", "to_channel", "condition"])
= ["share_id", "user_team_id_deleted", "user_deleted", "user_team_id_created", "user_created", "date", "time", "type", "to_channel", "condition"]
new_t = []
t.each do |m|
if m[:user_deleted].to_s == ""
user_team_id_deleted = ""
else
user_team_id_deleted = team_id
end
new_t << [m[:share_id], user_team_id_deleted, m[:user_deleted], team_id, m[:user_created], m[:date], m[:time], m[:type], m[:to_channel], m[:condition]]
end
CSV.open("#{config.path}/shares/#{f}", "wb") do |csv|
new_t.each do |row|
csv << row
end
end
@logger.info "Updated shares to use team ids"
end
end
end
if Dir.exist?("#{config.path}/announcements/")
Dir.entries("#{config.path}/announcements/").select { |i| i[/\.csv$/] }.each do |f|
t = CSV.table("#{config.path}/announcements/#{f}")
if t..length == 7
t = CSV.table("#{config.path}/announcements/#{f}", headers: ["message_id", "user_deleted", "user_created", "date", "time", "type", "message"])
= ["message_id", "user_team_id_deleted", "user_deleted", "user_team_id_created", "user_created", "date", "time", "type", "message"]
new_t = []
t.each do |m|
if m[:user_deleted].to_s == ""
user_team_id_deleted = ""
else
user_team_id_deleted = team_id
end
new_t << [m[:message_id], user_team_id_deleted, m[:user_deleted], team_id, m[:user_created], m[:date], m[:time], m[:type], m[:message]]
end
CSV.open("#{config.path}/announcements/#{f}", "wb") do |csv|
new_t.each do |row|
csv << row
end
end
@logger.info "Updated announcements to use team ids"
end
end
end
if Dir.exist?("#{config.path}/vacations/") and !Dir.exist?(config.path + "/vacations/" + team_id.to_s)
FileUtils.mkdir_p(config.path + "/vacations/" + team_id.to_s)
files_updated = []
Dir.glob(config.path + "/vacations/*").select { |i| i[/\.yaml$/] }.each do |f|
FileUtils.mv(f, config.path + "/vacations/" + team_id.to_s)
files_updated << f
end
@logger.info "Updated vacations to use team ids. All moved to #{config.path}/vacations/#{team_id}/" unless files_updated.empty?
end
if Dir.exist?("#{config.path}/openai/") and !Dir.exist?(config.path + "/openai/" + team_id.to_s)
FileUtils.mkdir_p(config.path + "/openai/" + team_id.to_s)
files_updated = []
Dir.glob(config.path + "/openai/*").each do |file_or_dir|
next if file_or_dir == config.path + "/openai/" + team_id.to_s
FileUtils.mv(file_or_dir, config.path + "/openai/" + team_id.to_s)
files_updated << file_or_dir
end
@logger.info "Updated openai to use team ids. All moved to #{config.path}/openai/#{team_id}/" unless files_updated.empty?
end
if Dir.exist?("#{config.path}/personal_settings/") and !Dir.exist?(config.path + "/personal_settings/" + team_id.to_s)
FileUtils.mkdir_p(config.path + "/personal_settings/" + team_id.to_s)
files_updated = []
Dir.glob(config.path + "/personal_settings/*").each do |file_or_dir|
next if file_or_dir == config.path + "/personal_settings/" + team_id.to_s
FileUtils.mv(file_or_dir, config.path + "/personal_settings/" + team_id.to_s)
files_updated << file_or_dir
end
@logger.info "Updated personal_settings to use team ids. All moved to #{config.path}/personal_settings/#{team_id}/" unless files_updated.empty?
end
end
end