Tuesday, February 25, 2025

Front for National Salvation

The Front for National Salvation (FRONASA) was a Ugandan rebel group led by Yoweri Museveni. The group factually emerged in 1971, although it was formally founded in 1973. FRONASA, along with other militant groups such as Kikosi Maalum (led by Milton Obote), formed the Uganda National Liberation Front (UNLF) and its military wing the Uganda National Liberation Army (UNLA) in 1979 to fight alongside Tanzanian forces against Idi Amin.

Emergence and early operations

edit

FRONASA originated as a group of militant left-leaning intellectuals led by Yoweri Museveni. Its founding members mostly were ex-followers of President Milton Obote who had fallen out with him. The group's membership belonged to the Banyankole and Banyarwanda peoples. When Obote was overthrown during the 1971 Ugandan coup d'état, resulting in Idi Amin's assumption of the Ugandan Presidency, the Ugandan left split. Some decided to cooperate with Amin, while others went into exile to organize a militant resistance. Strongly opposed to Amin's regime, Museveni and his small group of comrades decided to team up with Obote's faction despite their previous disagreements.

Museveni's group was based in Tanzania and covertly supported by its host country in various ways. The insurgents repeatedly entered Uganda to gather intelligence and carry out sabotage missions. In August 1971, Museveni's force attempted to set up a guerrilla base on Mount Elgon, but its undisciplined and barely trained fighters were quickly discovered and arrested by Ugandan security forces. The group consequently sent 30 fighters to train with FRELIMO in Mozambique. At the time, FRELIMO was allied with the Tanzanian government which facilitated the Mozambicans' contacts with Museveni. After their training, these cadres infiltrated Uganda. In 1972, Museveni's fighters took part in an attempted invasion of Uganda by Obote-led insurgents. The attack failed completely, however, and the rebels suffered heavy losses.

Official foundation and the Uganda–Tanzania War

edit

In early 1973, Museveni officially announced the formation of the "Front for National Salvation" and published a manifesto targeting Amin, titled "An Indictment of a Primitive Fascist". At this point, FRONASA had about 200 members. Around this time, another FRONASA camp near Busoga in Uganda was discovered and destroyed by the Uganda Army. FRONASA underground operations were dismantled, and nine members of the group were executed by a firing squad. The group's activities consequently declined. In 1974, 40 to 50 FRONASA cadres led by Museveni were sent for another training mission to Mozambique. They were supposed to be taught about gerrilla warfare by FRELIMO, but the FRONASA fighters were unruly and the training of little success. From 1974 to 1978, FRONASA was mostly dormant, although it continued occasional training.[3]

In late 1978, the Uganda–Tanzania War broke out and the armed Ugandan opposition movements rallied to fight alongside the Tanzanians against Amin's regime. At the time, FRONASA had just 30 armed members.[8] After the Tanzania People's Defence Force (TPDF) defeated the Ugandan invasion of Kagera, it counterattacked into Uganda. FRONASA guerrillas consequently acted as scouts for the Tanzanian 206th Brigade, aiding it during the capture of Mbarara.[9] In March 1979, the Tanzanian government organized the Uganda National Liberation Front (UNLF) and its armed wing, the Uganda National Liberation Army (UNLA). The UNLF/UNLA was supposed to serve as an umbrella organization to unify all Ugandan rebel factions, including FRONASA. Regardless of this nominal unification, the UNLF was split into numerous sub-units according to the wishes and needs of the Tanzanian military.[10] Following the Fall of Kampala and overthrow of Amin's regime in April 1979,[11] Museveni became Minister of Defence in the new Tanzania-backed UNLF government of Uganda. FRONASA consequently acted as his private army and he recruited a large number of Tutsi and Banyankole to bolster its ranks. The group was about 9,000[11] to 10,000 fighters strong at its peak by mid-1979.[8] As a result of recruiting many Tutsi who were refugees from Rwanda, FRONASA became aligned with the newly founded Rwandese Alliance for National Unity, an organization that aimed at creating an army of Tutsi exiles to overthrow the government of Rwanda.[8] From April 1979, however, Museveni had left the frontlines to involve himself in politics in Kampala.[12]

Meanwhile, FRONASA continued to aid the Tanzanians to securing the rest of western Uganda, helping the TPDF to conquer Fort Royal, Masindi, and the West Nile region.[13] In course of this campaign, anti-Amin tribal militias, vigilantes,[14] and FRONASA militants "unleashed terror" on Muslim civilians. Museveni's followers regarded the Muslims as partisans of Amin who had played an important part in defeating FRONASA's earlier insurgencies. Museveni's fighters carried out several massacres in the Ankole region,[8] and their campaign in the West Nile region was described by researcher Ogenga Otunnu as "systematic extermination" of the local population,[8] killing thousands of civilians.[15] In addition, FRONASA began to clash with its nominal ally, namely Milton Obote's private army Kikosi Maalum.[16] Museveni was reportedly horrified at the mob violence,[17] and especially at the involvement of his own followers in the massacres. He tried to put a stop to the worst excesses, and ordered arrests of some of the participants.[18]

Dissolution

edit

After the UNLF assumed full control of the country, Milton Obote gradually outmaneuvered Museveni and his followers. He sidelined the latter in politics, allowed just 4,000 FRONASA fighters to join the new Ugandan army and had them split up among numerous units, and finally forced the rest of Museveni's private army to disarm.[11] What remained of FRONASA later became the core of the Popular Resistance Army (and later the National Resistance Army) when Museveni launched a rebellion against Obote's new government in 1981.[6] The ex-FRONASA cadres brought much-needed political and military experience with them, and allowed the PRA/NRA to develop a broad supporter base. This contributed to its eventual victory in the Ugandan Bush War.

Wrote by NZAYISENGA Adrien

0 Comments:

Post a Comment

Comment here

Subscribe to Post Comments [Atom]

<< Home

.

Nzayisenga Adrien

Rwanda • Africa • History • Business • Technology • Knowledge

Page Views
0
Visitors
0
AdSense Revenue
Check AdSense

Support Nzayisenga Adrien

Ushobora gushyigikira ibikorwa byacu by'ubushakashatsi, ubumenyi, amateka n'itangazamakuru.

Support / Pay

Uko system ikora

Abasomyi basura blog → Google igatanga ads → abantu bareba cyangwa bagakanda ads mu buryo busanzwe → AdSense ikabara amafaranga → Google ikishyura konti yawe hakurikijwe payment settings za AdSense.

Ntukande ku matangazo yawe kandi ntusabe abandi kuyakandaho. Clicks zigomba kuba genuine.

. Rwanda Nziza Ngobyi Iduhetse | ADFID TV | Nzayisenga Adrien ADFID Africa | Digital Library & AI Content Creator

ADFID Africa

African knowledge, digital publishing and AI-powered content creation in one platform.

🤖 AI Content Creator

Create articles, YouTube scripts, Shorts, Facebook posts and SEO content.

📚 Digital Library

Store and manage your African books, research and educational resources.

📺 ADFID TV

Transform written articles into video-ready scripts.

💰 Monetization

Prepare your platform for advertising, subscriptions and reader support.

🤖 ADFID TV AI Content Creator

Create multiple content formats from one article.

📚 ADFID Africa Digital Library

📤 Upload E-Book

📊 ADFID Dashboard

Books

0

Articles Created

0

AI Generations

0

Platform Status

ONLINE

System Information

This running version stores demo data in your browser using localStorage.

For a production platform, connect this interface to a real backend, database, authentication system and AI API.

❤️ Support ADFID Africa

Support Knowledge & African Digital Content

Your support can help develop educational materials, African history resources, digital books and media content.


Email: nayisengadrianos@gmail.com

Mobile: +250 784 296 338

require("dotenv").config(); const express = require("express"); const multer = require("multer"); const path = require("path"); const crypto = require("crypto"); const { createClient } = require("@supabase/supabase-js"); const app = express(); const PORT = process.env.PORT || 3000; const SUPABASE_URL = process.env.SUPABASE_URL; const SUPABASE_SERVICE_KEY = process.env.SUPABASE_SERVICE_KEY; const ADMIN_PASSWORD = process.env.ADMIN_PASSWORD; if (!SUPABASE_URL || !SUPABASE_SERVICE_KEY || !ADMIN_PASSWORD) { console.error("Missing required environment variables."); process.exit(1); } const supabase = createClient( SUPABASE_URL, SUPABASE_SERVICE_KEY, { auth: { autoRefreshToken: false, persistSession: false } } ); app.use(express.json()); app.use(express.urlencoded({ extended: true })); app.use(express.static(path.join(__dirname, "public"))); const upload = multer({ storage: multer.memoryStorage(), limits: { fileSize: 100 * 1024 * 1024 }, fileFilter: (req, file, cb) => { const extension = path.extname(file.originalname).toLowerCase(); if ( extension !== ".pdf" && file.mimetype !== "application/pdf" ) { return cb(new Error("Only PDF files are allowed.")); } cb(null, true); } }); function checkAdmin(req, res, next) { const password = req.headers["x-admin-password"]; if (!password || password !== ADMIN_PASSWORD) { return res.status(401).json({ error: "Unauthorized" }); } next(); } function cleanFileName(name) { return name .replace(/[^a-zA-Z0-9._-]/g, "-") .replace(/-+/g, "-") .toLowerCase(); } /* GET BOOKS */ app.get("/api/books", async (req, res) => { try { const search = (req.query.search || "").trim(); let query = supabase .from("books") .select("*") .order("created_at", { ascending: false }); if (search) { query = query.or( `title.ilike.%${search}%,author.ilike.%${search}%,category.ilike.%${search}%` ); } const { data, error } = await query; if (error) { throw error; } res.json(data || []); } catch (error) { console.error(error); res.status(500).json({ error: "Unable to load books." }); } }); /* UPLOAD BOOK */ app.post( "/api/books", checkAdmin, upload.single("pdf"), async (req, res) => { try { if (!req.file) { return res.status(400).json({ error: "Please select a PDF file." }); } const title = (req.body.title || "").trim(); const author = (req.body.author || "").trim(); const description = (req.body.description || "").trim(); const category = (req.body.category || "General").trim(); if (!title || !author) { return res.status(400).json({ error: "Title and author are required." }); } const unique = crypto.randomBytes(8).toString("hex"); const filename = `${Date.now()}-${unique}-${cleanFileName(req.file.originalname)}`; const storagePath = `pdfs/${filename}`; /* Upload PDF to Supabase Storage */ const { error: uploadError } = await supabase.storage .from("books") .upload( storagePath, req.file.buffer, { contentType: "application/pdf", upsert: false } ); if (uploadError) { throw uploadError; } /* Get public PDF URL */ const { data: publicData } = supabase.storage .from("books") .getPublicUrl(storagePath); const pdfUrl = publicData.publicUrl; /* Save book information */ const { data, error } = await supabase .from("books") .insert({ title, author, description, category, pdf_path: storagePath, pdf_url: pdfUrl, downloads: 0 }) .select() .single(); if (error) { throw error; } res.json({ success: true, message: "Book uploaded successfully.", book: data }); } catch (error) { console.error(error); res.status(500).json({ error: error.message || "Book upload failed." }); } } ); /* DELETE BOOK */ app.delete( "/api/books/:id", checkAdmin, async (req, res) => { try { const id = req.params.id; const { data: book, error: findError } = await supabase .from("books") .select("*") .eq("id", id) .single(); if (findError) { throw findError; } /* Delete PDF from storage */ if (book.pdf_path) { await supabase.storage .from("books") .remove([ book.pdf_path ]); } /* Delete database record */ const { error: deleteError } = await supabase .from("books") .delete() .eq("id", id); if (deleteError) { throw deleteError; } res.json({ success: true }); } catch (error) { console.error(error); res.status(500).json({ error: "Unable to delete book." }); } } ); /* DOWNLOAD BOOK Increments download counter. */ app.get( "/api/books/:id/download", async (req, res) => { try { const id = req.params.id; const { data: book, error } = await supabase .from("books") .select("*") .eq("id", id) .single(); if (error || !book) { return res.status(404).send( "Book not found." ); } /* Increase download count */ await supabase .from("books") .update({ downloads: Number(book.downloads || 0) + 1 }) .eq("id", id); /* Redirect to PDF */ res.redirect(book.pdf_url); } catch (error) { console.error(error); res.status(500).send( "Download failed." ); } } ); /* HEALTH CHECK */ app.get("/api/health", (req, res) => { res.json({ status: "running", application: "ADFID Africa Digital Library" }); }); /* ERROR HANDLER */ app.use((error, req, res, next) => { console.error(error); res.status(400).json({ error: error.message || "Something went wrong." }); }); app.listen(PORT, () => { console.log(""); console.log( "==========================================" ); console.log( " ADFID Africa Digital Library" ); console.log( " PDF Library Server" ); console.log( ` Running: http://localhost:${PORT}` ); console.log( ` Admin: http://localhost:${PORT}/admin.html` ); console.log( "==========================================" ); }); ADFID Library Administration

ADFID AFRICA DIGITAL LIBRARY

Administrator Panel

Administrator Login