From internal plugin to protected product

Overview

Problem

The company had a powerful internal Tekla Structures plugin but could not hand it to external contractors without putting their IP at risk. Anyone could copy the DLLs out of the Tekla directory and pass them around.

Solution

We built a three-tier licensing system:

  • an admin panel (Blazor),
  • a desktop client (WPF),
  • a build engine that compiles, encrypts, and signs a unique plugin copy bound to the user hardware ID on every download.
Result

Contractors now work with the same tool as the in-house team. The company decides who gets it, on which machine, and until when, all from one interface, and neither side has to take the other on trust.

Background

The client came back with the Tekla Structures plugin we had built together earlier, the toolset that generates their LGSF panels. As they took on larger contracts the in-house team could no longer absorb the volume, so bringing in external contractors, from individual engineers to whole firms, became the only practical way to grow. The catch was that the plugin is proprietary: distributing it unprotected was not an option. They needed a way to grant contractors access while keeping full control over who uses the tool, on which machine, and for how long.

Problem

Why standard protection wasn't enough

We started by working out exactly what had to be protected and from what. A simple serial key does not survive this environment: the plugin runs inside Tekla Structures, where the user has full access to the file system, so the assemblies themselves can be copied and shared. The licensing had to bind each copy to a specific machine, enforce a time limit, and stay tamper-proof even if the user moved their system clock.

  • The plugin is a set of DLLs sitting in the Tekla Structures directory, fully readable by whoever runs it.

  • A serial key protects nothing once the files themselves can be copied.

  • Licenses had to expire on their own, without trusting the local clock.

  • The company needed to grant and revoke access per person and per machine.

Solution

We designed a system with three layers, each handling a specific part of the licensing workflow:

1

Server: Windows Server with IIS

Holds the accounts, the licenses, and the plugin sources. It authenticates users, records which machine each license is bound to, tracks expiry dates, and runs the build pipeline on demand. Windows is not an implementation detail here: the plugin targets .NET Framework 4.8, so the build has to run on a Windows host.

2

Client: the LSTK application

A WPF desktop application through which users authenticate and download the plugin. At the moment of download it transmits the hardware key of that machine, the motherboard serial number, to the server.

3

Build and protection engine

On each download request the server runs a full build cycle: it compiles the plugin from source, encrypts it with server-side private keys, and calculates a hash checksum to prevent tampering. Every licensed copy is genuinely compiled for its user rather than stamped out of one shared binary. The output is an encrypted assembly bound to one machine with a defined expiration date.

The LSTK desktop application, where a user authenticates and downloads their licensed copy of the plugin

LGSF licensing system — architecture

Architecture of the licensing system: admin panel, desktop client, and the server that builds and protects each plugin copy

How it works

From a user account to a working plugin, the whole path is five steps:

1

Admin creates a user account

The administrator registers the user in the Blazor admin panel and assigns a license type and duration.

2

User logs in through the LSTK application

The user opens the desktop app, enters their credentials, and authenticates against the server.

3

Download triggers license generation

When the user clicks Download, the app sends the hardware serial key of the computer to the server, which builds, encrypts, and signs the plugin, creating a copy unique to that machine.

4

Plugin installs into Tekla Structures

The encrypted plugin is placed directly into the correct Tekla Structures directory. It runs only on that computer, and only for the allotted period.

5

Renewal through re-download

When the license expires the user clicks Download again in the LSTK application. If the administrator has approved the renewal, a fresh licensed copy is generated.

Users and licenses screen of the Blazor admin panel, with license type, bound computer, status, and expiry per user

LGSF licensing step-by-step flow

Step-by-step licensing flow, from account creation to renewal through re-download

Result

The plugin went from a file on a flash drive to a controlled, distributable software product. After the first month of use:

  • External contractors get the same tool as the in-house team, with no risk of IP exposure.

  • Every copy is cryptographically bound to one machine and expires on its own.

  • All licenses are managed from a single admin interface: who has access, on which device, and until when.

  • Onboarding a contractor is an account and a download, not a negotiation about trust.

+15%

Engineering capacity

10

Hours of onboarding saved

Technologies

Windows Server with IIS

C#

Blazor Server

WPF

Tekla Open API

Find out where you're losing time and money right now

Modern building