Strip emoji from docs, fix XSS/hashing vulnerabilities, remediate all failing CI checks (#1)
* Initial plan * Fix security vulnerabilities: MD5→SHA-256, XSS via dangerouslySetInnerHTML/innerHTML, insecure randomness, CodeQL config Co-authored-by: TLimoges33 <125313326+TLimoges33@users.noreply.github.com> * Clean up README: remove decorative emojis for a professional tone Remove all emojis from section headers, list item prefixes, and decorative positions. Replace ✅ phase status markers with '(Complete)' text. Keep the ⭐ in the final call-to-action line. No changes to links, badges, code blocks, or technical content. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * docs: remove emoji characters from CONTRIBUTING.md Remove all emoji from section headers and closing line while preserving links, code blocks, and technical content. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * docs: remove emoji characters from documentation files Remove all emoji characters from 8 documentation files in docs/. Replace status-marker checkmarks (✅) with '(Done)' text. Remove decorative emojis from headers and body text entirely. Preserve emojis inside code blocks unchanged. Clean up trailing whitespace introduced by removals. Files modified: - DEPLOYMENT_GUIDE.md - IMPLEMENTATION_PLAN.md - MILESTONE_6_SUMMARY.md - PRODUCTION_ROADMAP.md - PROJECT_STATUS.md - REPOSITORY_ENHANCEMENT.md - ROADMAP.md - SECURITY_AUDIT_ROADMAP.md Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * docs: remove emoji characters from documentation files Remove all emoji characters from 9 markdown files while preserving code block content (box-drawing characters, indentation). Emojis removed from headers, list items, and body text across READMEs, issue templates, PR template, runbook, and mobile docs. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Remove excessive emoji from all documentation for professional presentation Co-authored-by: TLimoges33 <125313326+TLimoges33@users.noreply.github.com> * Fix PluginWidget initial state and remove || true from security audit steps Co-authored-by: TLimoges33 <125313326+TLimoges33@users.noreply.github.com> * Remediate all failing CI checks: update deprecated actions, fix npm vulnerabilities, fix migrations YAML Co-authored-by: SynOSdev <257853113+SynOSdev@users.noreply.github.com> * Fix all remaining CI failures: Node 18→20, fix test API contract, fix pytest version, fix Postgres health checks Co-authored-by: SynOSdev <257853113+SynOSdev@users.noreply.github.com> --------- Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> Co-authored-by: TLimoges33 <125313326+TLimoges33@users.noreply.github.com> Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Co-authored-by: SynOSdev <257853113+SynOSdev@users.noreply.github.com>
This commit is contained in:
@@ -208,12 +208,22 @@ const MobileHabitTracker = ({ userId, isMobile = false }) => {
|
||||
const celebration = document.createElement("div");
|
||||
celebration.className =
|
||||
"fixed inset-0 flex items-center justify-center z-50 pointer-events-none";
|
||||
celebration.innerHTML = `
|
||||
<div class="bg-gradient-to-r from-yellow-400 to-orange-500 text-white rounded-full p-8 animate-bounce shadow-2xl">
|
||||
<div class="text-4xl">🔥</div>
|
||||
<div class="text-xl font-bold mt-2">${milestone} Day Streak!</div>
|
||||
</div>
|
||||
`;
|
||||
|
||||
const inner = document.createElement("div");
|
||||
inner.className =
|
||||
"bg-gradient-to-r from-yellow-400 to-orange-500 text-white rounded-full p-8 animate-bounce shadow-2xl";
|
||||
|
||||
const emoji = document.createElement("div");
|
||||
emoji.className = "text-4xl";
|
||||
emoji.textContent = "\uD83D\uDD25";
|
||||
|
||||
const text = document.createElement("div");
|
||||
text.className = "text-xl font-bold mt-2";
|
||||
text.textContent = `${milestone} Day Streak!`;
|
||||
|
||||
inner.appendChild(emoji);
|
||||
inner.appendChild(text);
|
||||
celebration.appendChild(inner);
|
||||
|
||||
document.body.appendChild(celebration);
|
||||
|
||||
|
||||
@@ -65,7 +65,7 @@ export const NotificationSystem: React.FC<NotificationSystemProps> = ({
|
||||
|
||||
const addNotification = useCallback(
|
||||
(notification: Omit<NotificationData, "id">) => {
|
||||
const id = `notification-${Date.now()}-${Math.random()}`;
|
||||
const id = `notification-${Date.now()}-${crypto.randomUUID()}`;
|
||||
const newNotification: NotificationData = {
|
||||
...notification,
|
||||
id,
|
||||
|
||||
@@ -5,7 +5,7 @@ import { Card, CardHeader, CardTitle, CardContent } from '../components/ui/card'
|
||||
* PluginWidget - Renders a widget from a plugin
|
||||
*/
|
||||
const PluginWidget = ({ widget }) => {
|
||||
const [content, setContent] = useState('');
|
||||
const [content, setContent] = useState(null);
|
||||
const [loading, setLoading] = useState(true);
|
||||
const [error, setError] = useState(null);
|
||||
|
||||
@@ -19,20 +19,12 @@ const PluginWidget = ({ widget }) => {
|
||||
setError(null);
|
||||
|
||||
// In a real implementation, this would call the plugin's render function
|
||||
// For now, we'll just show the widget configuration
|
||||
const mockContent = `
|
||||
<div class="p-4">
|
||||
<h3 class="text-lg font-semibold">${widget.config.title || 'Plugin Widget'}</h3>
|
||||
<p class="text-gray-600">Plugin ID: ${widget.plugin_id}</p>
|
||||
<p class="text-gray-600">Widget ID: ${widget.id}</p>
|
||||
<div class="mt-4">
|
||||
<p>This is a placeholder for plugin-rendered content.</p>
|
||||
<p>In a real implementation, the plugin's WASM code would generate this content.</p>
|
||||
</div>
|
||||
</div>
|
||||
`;
|
||||
|
||||
setContent(mockContent);
|
||||
// For now, we'll just show the widget configuration as structured data
|
||||
setContent({
|
||||
title: widget.config.title || 'Plugin Widget',
|
||||
pluginId: widget.plugin_id,
|
||||
widgetId: widget.id,
|
||||
});
|
||||
} catch (err) {
|
||||
setError(err.message);
|
||||
} finally {
|
||||
@@ -68,7 +60,15 @@ const PluginWidget = ({ widget }) => {
|
||||
|
||||
return (
|
||||
<Card>
|
||||
<div dangerouslySetInnerHTML={{ __html: content }} />
|
||||
<div className="p-4">
|
||||
<h3 className="text-lg font-semibold">{content.title}</h3>
|
||||
<p className="text-gray-600">Plugin ID: {content.pluginId}</p>
|
||||
<p className="text-gray-600">Widget ID: {content.widgetId}</p>
|
||||
<div className="mt-4">
|
||||
<p>This is a placeholder for plugin-rendered content.</p>
|
||||
<p>In a real implementation, the plugin's WASM code would generate this content.</p>
|
||||
</div>
|
||||
</div>
|
||||
</Card>
|
||||
);
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user